diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a32855d..fd921ad 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,15 +13,15 @@ jobs: runs-on: ${{ matrix.platform }} steps: - - name: Checkout Code - uses: actions/checkout@v3 - - - name: Run Era Test Node - uses: dutterbutter/era-test-node-action@latest + - name: Checkout Code + uses: actions/checkout@v3 - - name: Install Dependencies - run: yarn install - - - name: Run Tests - run: | - yarn ci:tests \ No newline at end of file + - name: Run Era Test Node + uses: dutterbutter/era-test-node-action@latest + + - name: Install Dependencies + run: yarn install + + - name: Run Tests + run: | + yarn ci:tests diff --git a/.gitignore b/.gitignore index 6144bb5..a5e8bdb 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ cache # zksync artifacts artifacts-zk cache-zk +deployments-zk # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json diff --git a/contracts/contracts/paymasters/SignatureBasedPaymaster.sol b/contracts/contracts/paymasters/SignatureBasedPaymaster.sol index b37363f..3d492da 100644 --- a/contracts/contracts/paymasters/SignatureBasedPaymaster.sol +++ b/contracts/contracts/paymasters/SignatureBasedPaymaster.sol @@ -12,126 +12,131 @@ import {TransactionHelper, Transaction} from "@matterlabs/zksync-contracts/l2/sy import "@matterlabs/zksync-contracts/l2/system-contracts/Constants.sol"; /// @notice This smart contract pays the gas fees on behalf of users that provide valid signature from the signer. -/// @dev This contract is controlled by an owner, who can update the signer, cancel a user's nonce and withdraw funds from contract. +/// @dev This contract is controlled by an owner, who can update the signer, cancel a user's nonce and withdraw funds from contract. contract SignatureBasedPaymaster is IPaymaster, Ownable, EIP712 { - using ECDSA for bytes32; - // Note - EIP712 Domain compliance typehash. TYPES should exactly match while signing signature to avoid signature failure. - bytes32 public constant SIGNATURE_TYPEHASH = keccak256( - "SignatureBasedPaymaster(address userAddress,uint256 lastTimestamp,uint256 nonces)" + using ECDSA for bytes32; + // Note - EIP712 Domain compliance typehash. TYPES should exactly match while signing signature to avoid signature failure. + bytes32 public constant SIGNATURE_TYPEHASH = + keccak256( + "SignatureBasedPaymaster(address userAddress,uint256 lastTimestamp,uint256 nonces)" ); - // All signatures should be validated based on signer - address public signer; - // Mapping user => nonce to guard against signature re-play attack. - mapping(address => uint256) public nonces; + // All signatures should be validated based on signer + address public signer; + // Mapping user => nonce to guard against signature re-play attack. + mapping(address => uint256) public nonces; - modifier onlyBootloader() { - require( - msg.sender == BOOTLOADER_FORMAL_ADDRESS, - "Only bootloader can call this method" - ); - // Continue execution if called from the bootloader. - _; - } + modifier onlyBootloader() { + require( + msg.sender == BOOTLOADER_FORMAL_ADDRESS, + "Only bootloader can call this method" + ); + // Continue execution if called from the bootloader. + _; + } -/// @param _signer Sets the signer to validate against signatures -/// @dev Changes in EIP712 constructor arguments - "name","version" would update domainSeparator which should be taken into considertion while signing. - constructor(address _signer) EIP712("SignatureBasedPaymaster","1") { - require(_signer != address(0), "Signer cannot be address(0)"); - // Owner can be signer too. - signer = _signer; - } + /// @param _signer Sets the signer to validate against signatures + /// @dev Changes in EIP712 constructor arguments - "name","version" would update domainSeparator which should be taken into considertion while signing. + constructor(address _signer) EIP712("SignatureBasedPaymaster", "1") { + require(_signer != address(0), "Signer cannot be address(0)"); + // Owner can be signer too. + signer = _signer; + } - function validateAndPayForPaymasterTransaction( - bytes32, - bytes32, - Transaction calldata _transaction - ) - external - payable - onlyBootloader - returns (bytes4 magic, bytes memory context) - { - // By default we consider the transaction as accepted. - magic = PAYMASTER_VALIDATION_SUCCESS_MAGIC; - require( - _transaction.paymasterInput.length >= 4, - "The standard paymaster input must be at least 4 bytes long" - ); + function validateAndPayForPaymasterTransaction( + bytes32, + bytes32, + Transaction calldata _transaction + ) + external + payable + onlyBootloader + returns (bytes4 magic, bytes memory context) + { + // By default we consider the transaction as accepted. + magic = PAYMASTER_VALIDATION_SUCCESS_MAGIC; + require( + _transaction.paymasterInput.length >= 4, + "The standard paymaster input must be at least 4 bytes long" + ); - bytes4 paymasterInputSelector = bytes4( - _transaction.paymasterInput[0:4] - ); - if (paymasterInputSelector == IPaymasterFlow.general.selector) { - // Note - We first need to decode innerInputs data to bytes. - (bytes memory innerInputs) = abi.decode( - _transaction.paymasterInput[4:], - (bytes) - ); - // Note - Decode the innerInputs as per encoding. Here, we have encoded lastTimestamp and signature in innerInputs - (uint lastTimestamp, bytes memory sig) = abi.decode(innerInputs,(uint256,bytes)); - - // Verify signature expiry based on timestamp. - // lastTimestamp is used in signature hash, hence cannot be faked. - require(block.timestamp <= lastTimestamp, "Paymaster: Signature expired"); - // Get user address from transaction.from - address userAddress = address(uint160(_transaction.from)); - // Generate hash - bytes32 hash = keccak256(abi.encode(SIGNATURE_TYPEHASH, userAddress,lastTimestamp, nonces[userAddress]++)); - // EIP712._hashTypedDataV4 hashes with domain separator that includes chain id. Hence prevention to signature replay atttacks. - bytes32 digest = _hashTypedDataV4(hash); - // Revert if signer not matched with recovered address. Reverts on address(0) as well. - require(signer == digest.recover(sig),"Paymaster: Invalid signer"); - + bytes4 paymasterInputSelector = bytes4(_transaction.paymasterInput[0:4]); + if (paymasterInputSelector == IPaymasterFlow.general.selector) { + // Note - We first need to decode innerInputs data to bytes. + bytes memory innerInputs = abi.decode( + _transaction.paymasterInput[4:], + (bytes) + ); + // Note - Decode the innerInputs as per encoding. Here, we have encoded lastTimestamp and signature in innerInputs + (uint lastTimestamp, bytes memory sig) = abi.decode( + innerInputs, + (uint256, bytes) + ); - // Note, that while the minimal amount of ETH needed is tx.gasPrice * tx.gasLimit, - // neither paymaster nor account are allowed to access this context variable. - uint256 requiredETH = _transaction.gasLimit * - _transaction.maxFeePerGas; + // Verify signature expiry based on timestamp. + // lastTimestamp is used in signature hash, hence cannot be faked. + require(block.timestamp <= lastTimestamp, "Paymaster: Signature expired"); + // Get user address from transaction.from + address userAddress = address(uint160(_transaction.from)); + // Generate hash + bytes32 hash = keccak256( + abi.encode( + SIGNATURE_TYPEHASH, + userAddress, + lastTimestamp, + nonces[userAddress]++ + ) + ); + // EIP712._hashTypedDataV4 hashes with domain separator that includes chain id. Hence prevention to signature replay atttacks. + bytes32 digest = _hashTypedDataV4(hash); + // Revert if signer not matched with recovered address. Reverts on address(0) as well. + require(signer == digest.recover(sig), "Paymaster: Invalid signer"); - // The bootloader never returns any data, so it can safely be ignored here. - (bool success, ) = payable(BOOTLOADER_FORMAL_ADDRESS).call{ - value: requiredETH - }(""); - require( - success, - "Failed to transfer tx fee to the bootloader. Paymaster balance might not be enough." - ); - } else { - revert("Unsupported paymaster flow"); - } - } + // Note, that while the minimal amount of ETH needed is tx.gasPrice * tx.gasLimit, + // neither paymaster nor account are allowed to access this context variable. + uint256 requiredETH = _transaction.gasLimit * _transaction.maxFeePerGas; - function postTransaction( - bytes calldata _context, - Transaction calldata _transaction, - bytes32, - bytes32, - ExecutionResult _txResult, - uint256 _maxRefundedGas - ) external payable override onlyBootloader { - // Refunds are not supported yet. + // The bootloader never returns any data, so it can safely be ignored here. + (bool success, ) = payable(BOOTLOADER_FORMAL_ADDRESS).call{ + value: requiredETH + }(""); + require( + success, + "Failed to transfer tx fee to the bootloader. Paymaster balance might not be enough." + ); + } else { + revert("Unsupported paymaster flow"); } - function withdraw(address _to) external onlyOwner { - // send paymaster funds to the owner - (bool success, ) = payable(_to).call{value: address(this).balance}(""); - require(success, "Failed to withdraw funds from paymaster."); + } - } - receive() external payable {} + function postTransaction( + bytes calldata _context, + Transaction calldata _transaction, + bytes32, + bytes32, + ExecutionResult _txResult, + uint256 _maxRefundedGas + ) external payable override onlyBootloader {} - /// @dev Only owner should be able to change signer. - /// @param _signer New signer address - function changeSigner(address _signer) onlyOwner public { - signer = _signer; - } - /// @dev Only owner should be able to update user nonce. - /// @dev There could be a scenario where owner needs to cancel paying gas for a certain user transaction. - /// @param _userAddress user address to update the nonce. - function cancelNonce(address _userAddress) onlyOwner public { - nonces[_userAddress]++; - } + function withdraw(address _to) external onlyOwner { + // send paymaster funds to the owner + (bool success, ) = payable(_to).call{value: address(this).balance}(""); + require(success, "Failed to withdraw funds from paymaster."); + } + receive() external payable {} - function domainSeparator() public view returns(bytes32) { - return _domainSeparatorV4(); - } -} \ No newline at end of file + /// @dev Only owner should be able to change signer. + /// @param _signer New signer address + function changeSigner(address _signer) public onlyOwner { + signer = _signer; + } + /// @dev Only owner should be able to update user nonce. + /// @dev There could be a scenario where owner needs to cancel paying gas for a certain user transaction. + /// @param _userAddress user address to update the nonce. + function cancelNonce(address _userAddress) public onlyOwner { + nonces[_userAddress]++; + } + + function domainSeparator() public view returns (bytes32) { + return _domainSeparatorV4(); + } +} diff --git a/contracts/deploy/allowListPaymaster.ts b/contracts/deploy/allowListPaymaster.ts index d55b523..de91e6b 100644 --- a/contracts/deploy/allowListPaymaster.ts +++ b/contracts/deploy/allowListPaymaster.ts @@ -1,11 +1,8 @@ -import { Provider, Wallet } from "zksync-web3"; -import * as ethers from "ethers"; -import { HardhatRuntimeEnvironment, HttpNetworkUserConfig } from "hardhat/types"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; +import { fundAccount, deployContract } from "./utils"; +import * as hre from "hardhat"; // load env file import dotenv from "dotenv"; - dotenv.config(); // load wallet private key from env file @@ -14,51 +11,50 @@ const PRIVATE_KEY = process.env.WALLET_PRIVATE_KEY || ""; if (!PRIVATE_KEY) throw "⛔️ Private key not detected! Add it to the .env file!"; -export default async function (hre: HardhatRuntimeEnvironment) { - console.log(`Running deploy script for the AllowlistPaymaster contract...`); - const provider = new Provider((hre.network.config as HttpNetworkUserConfig).url); +async function main() { + const contract = "AllowlistPaymaster"; + const artifact = await hre.ethers.loadArtifact(contract); + + console.log( + `Running script to deploy ${artifact.contractName} contract on ${hre.network.name}`, + ); - // The wallet that will deploy the token and the paymaster - // It is assumed that this wallet already has sufficient funds on zkSync - const wallet = new Wallet(PRIVATE_KEY); - const deployer = new Deployer(hre, wallet); + // Retrieve signers + const [deployer] = await hre.ethers.getSigners(); // Deploying the paymaster - const paymasterArtifact = await deployer.loadArtifact("AllowlistPaymaster"); - const deploymentFee = await deployer.estimateDeployFee(paymasterArtifact, []); - const parsedFee = ethers.utils.formatEther(deploymentFee.toString()); - console.log(`The deployment is estimated to cost ${parsedFee} ETH`); - // Deploy the contract - const paymaster = await deployer.deploy(paymasterArtifact, []); - console.log(`Paymaster address: ${paymaster.address}`); - console.log(`Contract owner added to allow list: ${wallet.address}`); + const paymaster = await deployContract(artifact.contractName, []); + const paymasterAddress = await paymaster.getAddress(); + console.log(`Paymaster address: ${paymasterAddress}`); + console.log(`Contract owner added to allow list: ${deployer.address}`); console.log("Funding paymaster with ETH"); // Supplying paymaster with ETH - await ( - await deployer.zkWallet.sendTransaction({ - to: paymaster.address, - value: ethers.utils.parseEther("0.005"), - }) - ).wait(); - - let paymasterBalance = await provider.getBalance(paymaster.address); - console.log(`Paymaster ETH balance is now ${paymasterBalance.toString()}`); + await fundAccount(deployer, paymasterAddress, "0.005"); - // Verify contract programmatically - // - // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) - const contractFullyQualifedName = - "contracts/paymasters/AllowlistPaymaster.sol:AllowlistPaymaster"; - const verificationId = await hre.run("verify:verify", { - address: paymaster.address, - contract: contractFullyQualifedName, - constructorArguments: [], - bytecode: paymasterArtifact.bytecode, - }); - console.log( - `${contractFullyQualifedName} verified! VerificationId: ${verificationId}`, + const paymasterBalance = await hre.ethers.provider.getBalance( + paymasterAddress, ); + console.log(`Paymaster ETH balance is now ${paymasterBalance.toString()}`); + // only verify on testnet and mainnet + if (hre.network.name.includes("ZKsyncEra")) { + const verificationId = await hre.run("verify:verify", { + address: paymasterAddress, + // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) + contract: `${artifact.sourceName}:${artifact.contractName}`, + constructorArguments: [], + }); + console.log( + `${artifact.contractName} verified! VerificationId: ${verificationId}`, + ); + } console.log(`Done!`); } + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/contracts/deploy/erc20.ts b/contracts/deploy/erc20.ts index 0e6ee33..490114a 100644 --- a/contracts/deploy/erc20.ts +++ b/contracts/deploy/erc20.ts @@ -1,7 +1,6 @@ -import * as ethers from "ethers"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { Wallet } from "zksync-web3"; +import { deployContract } from "./utils"; +import * as hre from "hardhat"; + // load env file import dotenv from "dotenv"; @@ -10,7 +9,7 @@ dotenv.config(); // load wallet private key from env file const PRIVATE_KEY = process.env.WALLET_PRIVATE_KEY || ""; // We will mint the NFTs to this address -const RECIPIENT_ADDRESS = "RECIPIENT_ADDRESS"; +const RECIPIENT_ADDRESS = ""; if (!PRIVATE_KEY) throw "⛔️ Private key not detected! Add it to the .env file!"; @@ -18,55 +17,56 @@ if (!PRIVATE_KEY) if (!RECIPIENT_ADDRESS) throw "⛔️ RECIPIENT_ADDRESS not detected! Add it to the RECIPIENT_ADDRESS variable!"; -export default async function (hre: HardhatRuntimeEnvironment) { - console.log(`Running deploy script for the MyERC20 contract...`); - // The wallet that will deploy the token and the paymaster - // It is assumed that this wallet already has sufficient funds on zkSync - const wallet = new Wallet(PRIVATE_KEY); - const deployer = new Deployer(hre, wallet); +async function main() { + const contract = "MyERC20"; + const artifact = await hre.ethers.loadArtifact(contract); - // Deploying the ERC20 contract - const name = "My ERC20"; + console.log( + `Running script to deploy ${artifact} contract on ${hre.network.name}`, + ); + const name = "MyERC20"; const symbol = "ERC20"; const decimals = 18; - const tokenContractArtifact = await deployer.loadArtifact("MyERC20"); - const deploymentFee = await deployer.estimateDeployFee( - tokenContractArtifact, - [name, symbol, decimals], - ); - const parsedFee = ethers.utils.formatEther(deploymentFee.toString()); - console.log(`The deployment is estimated to cost ${parsedFee} ETH`); // Deploy the contract - const tokenContract = await deployer.deploy(tokenContractArtifact, [ + const erc20 = await deployContract(artifact.contractName, [ name, symbol, decimals, ]); - console.log(`Token contract address: ${tokenContract.address}`); + const contractAddress = await erc20.getAddress(); + console.log(`Token contract address: ${contractAddress}`); // Mint token to the recipient address - const amount = ethers.utils.parseEther("100"); - const tx = await tokenContract.mint(RECIPIENT_ADDRESS, amount); - console.log(`Token minted to ${RECIPIENT_ADDRESS}! TxHash: ${tx.hash}`); + const amount = hre.ethers.parseEther("100"); + const tx = await erc20.mint(RECIPIENT_ADDRESS, amount); + console.log( + `${amount} tokens minted to ${RECIPIENT_ADDRESS}! TxHash: ${tx.hash}`, + ); await tx.wait(); // Get and log the balance of the recipient - const balance = await tokenContract.balanceOf(RECIPIENT_ADDRESS); - console.log(`Token balance of the recipient: ${balance}`); + const balance = await erc20.balanceOf(RECIPIENT_ADDRESS); + console.log(`Balance of the recipient: ${balance}`); - // Verify contract programmatically - // - // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) - const contractFullyQualifedName = "contracts/token/ERC20.sol:MyERC20"; - const verificationId = await hre.run("verify:verify", { - address: tokenContract.address, - contract: contractFullyQualifedName, - constructorArguments: [name, symbol, decimals], - bytecode: tokenContractArtifact.bytecode, - }); - console.log( - `${contractFullyQualifedName} verified! VerificationId: ${verificationId}`, - ); + // only verify on testnet and mainnet + if (hre.network.name.includes("ZKsyncEra")) { + const verificationId = await hre.run("verify:verify", { + address: contractAddress, + // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) + contract: `${artifact.sourceName}:${artifact.contractName}`, + constructorArguments: [name, symbol, decimals], + }); + console.log( + `${artifact.contractName} verified! VerificationId: ${verificationId}`, + ); + } console.log(`Done!`); } + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/contracts/deploy/erc20fixedPaymaster.ts b/contracts/deploy/erc20fixedPaymaster.ts index 836b72b..00b0196 100644 --- a/contracts/deploy/erc20fixedPaymaster.ts +++ b/contracts/deploy/erc20fixedPaymaster.ts @@ -1,10 +1,5 @@ -import * as ethers from "ethers"; -import { Provider, Wallet } from "zksync-web3"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import { - HardhatRuntimeEnvironment, - HttpNetworkUserConfig, -} from "hardhat/types"; +import * as hre from "hardhat"; +import { fundAccount, deployContract } from "./utils"; // load env file import dotenv from "dotenv"; @@ -14,7 +9,7 @@ dotenv.config(); // load wallet private key from env file const PRIVATE_KEY = process.env.WALLET_PRIVATE_KEY || ""; // The address of the token contract -const TOKEN_ADDRESS = "TOKEN_ADDRESS"; +const TOKEN_ADDRESS = ""; if (!PRIVATE_KEY) throw "⛔️ Private key not detected! Add it to the .env file!"; @@ -22,51 +17,50 @@ if (!PRIVATE_KEY) if (!TOKEN_ADDRESS) throw "⛔️ TOKEN_ADDRESS not detected! Add it to the TOKEN_ADDRESS variable!"; -export default async function (hre: HardhatRuntimeEnvironment) { - console.log(`Running deploy script for the ERC20fixedPaymaster contract...`); - const provider = new Provider((hre.network.config as HttpNetworkUserConfig).url); - // The wallet that will deploy the token and the paymaster - // It is assumed that this wallet already has sufficient funds on zkSync - const wallet = new Wallet(PRIVATE_KEY); - const deployer = new Deployer(hre, wallet); +async function main() { + const contract = "ERC20fixedPaymaster"; + const artifact = await hre.ethers.loadArtifact(contract); + + console.log( + `Running script to deploy ${artifact.contractName} contract on ${hre.network.name}`, + ); + + // Retrieve signers + const [deployer] = await hre.ethers.getSigners(); // Deploying the paymaster - const paymasterArtifact = await deployer.loadArtifact("ERC20fixedPaymaster"); - const deploymentFee = await deployer.estimateDeployFee(paymasterArtifact, [ + const paymaster = await deployContract(artifact.contractName, [ TOKEN_ADDRESS, ]); - const parsedFee = ethers.utils.formatEther(deploymentFee.toString()); - console.log(`The deployment is estimated to cost ${parsedFee} ETH`); - // Deploy the contract - const paymaster = await deployer.deploy(paymasterArtifact, [TOKEN_ADDRESS]); - console.log(`Paymaster address: ${paymaster.address}`); + const paymasterAddress = await paymaster.getAddress(); + console.log(`Paymaster address: ${paymasterAddress}`); console.log("Funding paymaster with ETH"); - // Supplying paymaster with ETH - await ( - await deployer.zkWallet.sendTransaction({ - to: paymaster.address, - value: ethers.utils.parseEther("0.005"), - }) - ).wait(); - - let paymasterBalance = await provider.getBalance(paymaster.address); - console.log(`Paymaster ETH balance is now ${paymasterBalance.toString()}`); + await fundAccount(deployer, paymasterAddress, "0.005"); - // Verify contract programmatically - // - // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) - const contractFullyQualifedName = - "contracts/paymasters/ERC20fixedPaymaster.sol:ERC20fixedPaymaster"; - const verificationId = await hre.run("verify:verify", { - address: paymaster.address, - contract: contractFullyQualifedName, - constructorArguments: [TOKEN_ADDRESS], - bytecode: paymasterArtifact.bytecode, - }); - console.log( - `${contractFullyQualifedName} verified! VerificationId: ${verificationId}`, + const paymasterBalance = await hre.ethers.provider.getBalance( + paymasterAddress, ); + console.log(`Paymaster ETH balance is now ${paymasterBalance.toString()}`); + // only verify on testnet and mainnet + if (hre.network.name.includes("ZKsyncEra")) { + const verificationId = await hre.run("verify:verify", { + address: paymasterAddress, + // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) + contract: `${artifact.sourceName}:${artifact.contractName}`, + constructorArguments: [TOKEN_ADDRESS], + }); + console.log( + `${artifact.contractName} verified! VerificationId: ${verificationId}`, + ); + } console.log(`Done!`); } + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/contracts/deploy/erc721.ts b/contracts/deploy/erc721.ts index f87c266..40f9a17 100644 --- a/contracts/deploy/erc721.ts +++ b/contracts/deploy/erc721.ts @@ -1,6 +1,6 @@ -import { Wallet } from "zksync-web3"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import { HardhatRuntimeEnvironment } from "hardhat/types"; +import { deployContract } from "./utils"; +import * as hre from "hardhat"; + // load env file import dotenv from "dotenv"; @@ -9,7 +9,7 @@ dotenv.config(); // load wallet private key from env file const PRIVATE_KEY = process.env.WALLET_PRIVATE_KEY || ""; // We will mint the NFTs to this address -const RECIPIENT_ADDRESS = "RECIPIENT_ADDRESS"; +const RECIPIENT_ADDRESS = ""; if (!PRIVATE_KEY) throw "⛔️ Private key not detected! Add it to the .env file!"; @@ -17,40 +17,45 @@ if (!PRIVATE_KEY) if (!RECIPIENT_ADDRESS) throw "⛔️ RECIPIENT_ADDRESS not detected! Add it to the RECIPIENT_ADDRESS variable!"; -export default async function (hre: HardhatRuntimeEnvironment) { - console.log(`Running deploy script for the MyNFT contract...`); - - // The wallet that will deploy the token and the paymaster - // It is assumed that this wallet already has sufficient funds on zkSync - const wallet = new Wallet(PRIVATE_KEY); - const deployer = new Deployer(hre, wallet); - - // Deploying the ERC721 contract - const nftContractArtifact = await deployer.loadArtifact("MyNFT"); - const nftContract = await deployer.deploy(nftContractArtifact, []); - console.log(`NFT Contract address: ${nftContract.address}`); +async function main() { + const contract = "MyNFT"; + const artifact = await hre.ethers.loadArtifact(contract); + console.log( + `Running script to deploy ${artifact.contractName} contract on ${hre.network.name}`, + ); + // Deploy the contract + const nftContract = await deployContract(artifact.contractName, []); + const nftAddress = await nftContract.getAddress(); + console.log(`NFT contract address: ${nftAddress}`); - // Mint NFTs to the recipient address + // Mint NFT to the recipient address const tx = await nftContract.createCollectible(RECIPIENT_ADDRESS); + console.log(`NFT minted to ${RECIPIENT_ADDRESS}! TxHash: ${tx.hash}`); await tx.wait(); // Get and log the balance of the recipient const balance = await nftContract.balanceOf(RECIPIENT_ADDRESS); console.log(`Balance of the recipient: ${balance}`); - // Verify contract programmatically - // - // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) - const contractFullyQualifedName = "contracts/token/ERC721.sol:MyNFT"; - const verificationId = await hre.run("verify:verify", { - address: nftContract.address, - contract: contractFullyQualifedName, - constructorArguments: [], - bytecode: nftContractArtifact.bytecode, - }); - console.log( - `${contractFullyQualifedName} verified! VerificationId: ${verificationId}`, - ); + // only verify on testnet and mainnet + if (hre.network.name.includes("ZKsyncEra")) { + const verificationId = await hre.run("verify:verify", { + address: nftAddress, + // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) + contract: `${artifact.sourceName}:${artifact.contractName}`, + constructorArguments: [], + }); + console.log( + `${artifact.contractName} verified! VerificationId: ${verificationId}`, + ); + } console.log(`Done!`); } + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/contracts/deploy/erc721gatedPaymaster.ts b/contracts/deploy/erc721gatedPaymaster.ts index 3eedb36..f9303f6 100644 --- a/contracts/deploy/erc721gatedPaymaster.ts +++ b/contracts/deploy/erc721gatedPaymaster.ts @@ -1,19 +1,14 @@ -import * as ethers from "ethers"; -import { Provider, Wallet } from "zksync-web3"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import { - HardhatRuntimeEnvironment, - HttpNetworkUserConfig, -} from "hardhat/types"; +import { fundAccount, deployContract } from "./utils"; +import * as hre from "hardhat"; + // load env file import dotenv from "dotenv"; - dotenv.config(); // load wallet private key from env file const PRIVATE_KEY = process.env.WALLET_PRIVATE_KEY || ""; // The address of the NFT collection contract -const NFT_COLLECTION_ADDRESS = "ADDRESS_OF_NFT_COLLECTION_CONTRACT"; +const NFT_COLLECTION_ADDRESS = ""; if (!PRIVATE_KEY) throw "⛔️ Private key not detected! Add it to the .env file!"; @@ -21,54 +16,48 @@ if (!PRIVATE_KEY) if (!NFT_COLLECTION_ADDRESS) throw "⛔️ NFT_COLLECTION_ADDRESS not detected! Add it to the NFT_COLLECTION_ADDRESS variable!"; -export default async function (hre: HardhatRuntimeEnvironment) { - console.log(`Running deploy script for the ERC721gatedPaymaster contract...`); - const provider = new Provider((hre.network.config as HttpNetworkUserConfig).url); +async function main() { + const contract = "ERC721gatedPaymaster"; + const artifact = await hre.ethers.loadArtifact(contract); - // The wallet that will deploy the token and the paymaster - // It is assumed that this wallet already has sufficient funds on zkSync - const wallet = new Wallet(PRIVATE_KEY); - const deployer = new Deployer(hre, wallet); + console.log( + `Running script to deploy ${artifact.contractName} contract on ${hre.network.name}`, + ); + const [deployer] = await hre.ethers.getSigners(); // Deploying the paymaster - const paymasterArtifact = await deployer.loadArtifact("ERC721gatedPaymaster"); - const deploymentFee = await deployer.estimateDeployFee(paymasterArtifact, [ - NFT_COLLECTION_ADDRESS, - ]); - const parsedFee = ethers.utils.formatEther(deploymentFee.toString()); - console.log(`The deployment is estimated to cost ${parsedFee} ETH`); - // Deploy the contract - const paymaster = await deployer.deploy(paymasterArtifact, [ + const paymaster = await deployContract(artifact.contractName, [ NFT_COLLECTION_ADDRESS, ]); - console.log(`Paymaster address: ${paymaster.address}`); + const paymasterAddress = await paymaster.getAddress(); + console.log(`Paymaster address: ${paymasterAddress}`); console.log("Funding paymaster with ETH"); // Supplying paymaster with ETH - await ( - await deployer.zkWallet.sendTransaction({ - to: paymaster.address, - value: ethers.utils.parseEther("0.005"), - }) - ).wait(); + await fundAccount(deployer, paymasterAddress, "0.005"); - let paymasterBalance = await provider.getBalance(paymaster.address); + let paymasterBalance = await hre.ethers.provider.getBalance(paymasterAddress); console.log(`Paymaster ETH balance is now ${paymasterBalance.toString()}`); - // Verify contract programmatically - // - // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) - const contractFullyQualifedName = - "contracts/paymasters/ERC721gatedPaymaster.sol:ERC721gatedPaymaster"; - const verificationId = await hre.run("verify:verify", { - address: paymaster.address, - contract: contractFullyQualifedName, - constructorArguments: [NFT_COLLECTION_ADDRESS], - bytecode: paymasterArtifact.bytecode, - }); - console.log( - `${contractFullyQualifedName} verified! VerificationId: ${verificationId}`, - ); + // only verify on testnet and mainnet + if (hre.network.name.includes("ZKsyncEra")) { + const verificationId = await hre.run("verify:verify", { + address: paymasterAddress, + // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) + contract: `${artifact.sourceName}:${artifact.contractName}`, + constructorArguments: [NFT_COLLECTION_ADDRESS], + }); + console.log( + `${artifact.contractName} verified! VerificationId: ${verificationId}`, + ); + } console.log(`Done!`); } + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/contracts/deploy/gaslessPaymaster.ts b/contracts/deploy/gaslessPaymaster.ts index 19c5675..4c15747 100644 --- a/contracts/deploy/gaslessPaymaster.ts +++ b/contracts/deploy/gaslessPaymaster.ts @@ -1,13 +1,8 @@ -import * as ethers from "ethers"; -import { Provider, Wallet } from "zksync-web3"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import { - HardhatRuntimeEnvironment, - HttpNetworkUserConfig, -} from "hardhat/types"; +import { fundAccount, deployContract } from "./utils"; +import * as hre from "hardhat"; + // load env file import dotenv from "dotenv"; - dotenv.config(); // load wallet private key from env file @@ -16,49 +11,49 @@ const PRIVATE_KEY = process.env.WALLET_PRIVATE_KEY || ""; if (!PRIVATE_KEY) throw "⛔️ Private key not detected! Add it to the .env file!"; -export default async function (hre: HardhatRuntimeEnvironment) { - console.log(`Running deploy script for the GaslessPaymaster contract...`); - const provider = new Provider((hre.network.config as HttpNetworkUserConfig).url); - // The wallet that will deploy the token and the paymaster - // It is assumed that this wallet already has sufficient funds on zkSync - const wallet = new Wallet(PRIVATE_KEY); - const deployer = new Deployer(hre, wallet); +async function main() { + const contract = "GaslessPaymaster"; + const artifact = await hre.ethers.loadArtifact(contract); + + console.log( + `Running script to deploy ${artifact.contractName} contract on ${hre.network.name}`, + ); + + // Retrieve signers + const [deployer] = await hre.ethers.getSigners(); // Deploying the paymaster - const paymasterArtifact = await deployer.loadArtifact("GaslessPaymaster"); - const deploymentFee = await deployer.estimateDeployFee(paymasterArtifact, []); - const parsedFee = ethers.utils.formatEther(deploymentFee.toString()); - console.log(`The deployment is estimated to cost ${parsedFee} ETH`); - // Deploy the contract - const paymaster = await deployer.deploy(paymasterArtifact, []); - console.log(`Paymaster address: ${paymaster.address}`); + const paymaster = await deployContract(artifact.contractName, []); + const paymasterAddress = await paymaster.getAddress(); + console.log(`Paymaster address: ${paymasterAddress}`); console.log("Funding paymaster with ETH"); // Supplying paymaster with ETH - await ( - await deployer.zkWallet.sendTransaction({ - to: paymaster.address, - value: ethers.utils.parseEther("0.005"), - }) - ).wait(); - - let paymasterBalance = await provider.getBalance(paymaster.address); + await fundAccount(deployer, paymasterAddress, "0.005"); + const paymasterBalance = await hre.ethers.provider.getBalance( + paymasterAddress, + ); console.log(`Paymaster ETH balance is now ${paymasterBalance.toString()}`); - // Verify contract programmatically - // - // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) - const contractFullyQualifedName = - "contracts/paymasters/GaslessPaymaster.sol:GaslessPaymaster"; - const verificationId = await hre.run("verify:verify", { - address: paymaster.address, - contract: contractFullyQualifedName, - constructorArguments: [], - bytecode: paymasterArtifact.bytecode, - }); - console.log( - `${contractFullyQualifedName} verified! VerificationId: ${verificationId}`, - ); + // only verify on testnet and mainnet + if (hre.network.name.includes("ZKsyncEra")) { + const verificationId = await hre.run("verify:verify", { + address: paymasterAddress, + // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) + contract: `${artifact.sourceName}:${artifact.contractName}`, + constructorArguments: [], + }); + console.log( + `${artifact.contractName} verified! VerificationId: ${verificationId}`, + ); + } console.log(`Done!`); } + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/contracts/deploy/greeter.ts b/contracts/deploy/greeter.ts index 32d93f9..38ce9b0 100644 --- a/contracts/deploy/greeter.ts +++ b/contracts/deploy/greeter.ts @@ -1,10 +1,9 @@ -import { Wallet } from "zksync-web3"; -import * as ethers from "ethers"; -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; +import { deployContract } from "./utils"; +import * as hre from "hardhat"; // load env file import dotenv from "dotenv"; + dotenv.config(); // load wallet private key from env file @@ -13,58 +12,43 @@ const PRIVATE_KEY = process.env.WALLET_PRIVATE_KEY || ""; if (!PRIVATE_KEY) throw "⛔️ Private key not detected! Add it to the .env file!"; -// An example of a deploy script that will deploy and call a simple contract. -export default async function (hre: HardhatRuntimeEnvironment) { - console.log(`Running deploy script for the Greeter contract`); - - // Initialize the wallet. - const wallet = new Wallet(PRIVATE_KEY); - - // Create deployer object and load the artifact of the contract you want to deploy. - const deployer = new Deployer(hre, wallet); - const artifact = await deployer.loadArtifact("Greeter"); - - // Estimate contract deployment fee - const greeting = "Hi there!"; - const deploymentFee = await deployer.estimateDeployFee(artifact, [greeting]); - - // ⚠️ OPTIONAL: You can skip this block if your account already has funds in L2 - // Deposit funds to L2 - // const depositHandle = await deployer.zkWallet.deposit({ - // to: deployer.zkWallet.address, - // token: utils.ETH_ADDRESS, - // amount: deploymentFee.mul(2), - // }); - // // Wait until the deposit is processed on zkSync - // await depositHandle.wait(); - - // Deploy this contract. The returned object will be of a `Contract` type, similarly to ones in `ethers`. - // `greeting` is an argument for contract constructor. - const parsedFee = ethers.utils.formatEther(deploymentFee.toString()); - console.log(`The deployment is estimated to cost ${parsedFee} ETH`); - - const greeterContract = await deployer.deploy(artifact, [greeting]); - - //obtain the Constructor Arguments +async function main() { + const contract = "Greeter"; + const artifact = await hre.ethers.loadArtifact(contract); console.log( - "constructor args:" + greeterContract.interface.encodeDeploy([greeting]), + `Running script to deploy ${artifact.contractName} contract on ${hre.network.name}`, ); + const message = "ZK is the endgame"; + // Deploy the contract + const greeter = await deployContract((await artifact).contractName, [ + message, + ]); + const contractAddress = await greeter.getAddress(); + console.log(`Greeter contract address: ${contractAddress}`); + + // Get and log the balance of the recipient + const greet = await greeter.greet(); + console.log(`Message in contract is: ${greet}`); + + // only verify on testnet and mainnet + if (hre.network.name.includes("ZKsyncEra")) { + const verificationId = await hre.run("verify:verify", { + address: contractAddress, + // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) + contract: `${artifact.sourceName}:${artifact.contractName}`, + constructorArguments: [message], + }); + console.log( + `${artifact.contractName} verified! VerificationId: ${verificationId}`, + ); + } + + console.log(`Done!`); +} - // Show the contract info. - const contractAddress = greeterContract.address; - console.log(`${artifact.contractName} was deployed to ${contractAddress}`); - - // Verify contract programmatically - // - // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) - const contractFullyQualifedName = "contracts/utils/Greeter.sol:Greeter"; - const verificationId = await hre.run("verify:verify", { - address: contractAddress, - contract: contractFullyQualifedName, - constructorArguments: [greeting], - bytecode: artifact.bytecode, +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); }); - console.log( - `${contractFullyQualifedName} verified! VerificationId: ${verificationId}`, - ); -} diff --git a/contracts/deploy/signatureBasedPaymaster.ts b/contracts/deploy/signatureBasedPaymaster.ts index 48401b8..14209ce 100644 --- a/contracts/deploy/signatureBasedPaymaster.ts +++ b/contracts/deploy/signatureBasedPaymaster.ts @@ -1,12 +1,8 @@ -import { Provider, Wallet } from "zksync-web3"; -import * as ethers from "ethers"; -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import { HttpNetworkUserConfig } from "hardhat/types"; +import { fundAccount, deployContract } from "./utils"; +import * as hre from "hardhat"; // load env file import dotenv from "dotenv"; - dotenv.config(); // load wallet private key from env file @@ -15,62 +11,53 @@ const PRIVATE_KEY = process.env.WALLET_PRIVATE_KEY || ""; if (!PRIVATE_KEY) throw "⛔️ Private key not detected! Add it to the .env file!"; -export default async function (hre: HardhatRuntimeEnvironment) { +async function main() { + const contract = "SignatureBasedPaymaster"; + const artifact = await hre.ethers.loadArtifact(contract); + console.log( - `Running deploy script for the SignatureBasedPaymaster contract...`, + `Running script to deploy ${artifact.contractName} contract on ${hre.network.name}`, ); - // Currently targeting the Sepolia zkSync testnet - const network = hre.userConfig.networks?.zkSyncTestnet; - const provider = new Provider((network as HttpNetworkUserConfig).url); - // The wallet that will deploy the paymaster - // It is assumed that this wallet already has sufficient funds on zkSync - const wallet = new Wallet(PRIVATE_KEY); - const deployer = new Deployer(hre, wallet); + // Retrieve signers + const [deployer] = await hre.ethers.getSigners(); // Deploying the paymaster - const paymasterArtifact = await deployer.loadArtifact( - "SignatureBasedPaymaster", - ); - const deploymentFee = await deployer.estimateDeployFee(paymasterArtifact, [wallet.address]); - const parsedFee = ethers.utils.formatEther(deploymentFee.toString()); - console.log(`The deployment is estimated to cost ${parsedFee} ETH`); - // Deploy the contract with owner as signer - const paymaster = await deployer.deploy(paymasterArtifact, [wallet.address]); - console.log(`Paymaster address: ${paymaster.address}`); - console.log(`Signer of the contract: ${wallet.address}`); + const paymaster = await deployContract(artifact.contractName, [ + deployer.address, + ]); + const paymasterAddress = await paymaster.getAddress(); + console.log(`Paymaster address: ${paymasterAddress}`); + console.log(`Signer of the contract: ${deployer.address}`); console.log("Funding paymaster with ETH"); // Supplying paymaster with ETH - await ( - await deployer.zkWallet.sendTransaction({ - to: paymaster.address, - value: ethers.utils.parseEther("0.005"), - }) - ).wait(); + await fundAccount(deployer, paymasterAddress, "0.005"); + + const paymasterBalance = await hre.ethers.provider.getBalance( + paymasterAddress, + ); + console.log(`Paymaster ETH balance is now ${paymasterBalance.toString()}`); - let paymasterBalance = await provider.getBalance(paymaster.address); -// Only verify on live networks - if ( - hre.network.name == "zkSyncTestnet" || - hre.network.name == "zkSyncMainnet" - ) { - // Verify contract programmatically - // - // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) - const contractFullyQualifedName = - "contracts/paymasters/SignatureBasedPaymaster.sol:SignatureBasedPaymaster"; + // only verify on testnet and mainnet + if (hre.network.name.includes("ZKsyncEra")) { const verificationId = await hre.run("verify:verify", { - address: paymaster.address, - contract: contractFullyQualifedName, - constructorArguments: [wallet.address], - bytecode: paymasterArtifact.bytecode, + address: paymasterAddress, + // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) + contract: `${artifact.sourceName}:${artifact.contractName}`, + constructorArguments: [deployer.address], }); console.log( - `${contractFullyQualifedName} verified! VerificationId: ${verificationId}`, + `${artifact.contractName} verified! VerificationId: ${verificationId}`, ); } - console.log(`Done!`); - + console.log(`Done!`); } + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/contracts/deploy/timeBasedPaymaster.ts b/contracts/deploy/timeBasedPaymaster.ts index 67f33bd..399e856 100644 --- a/contracts/deploy/timeBasedPaymaster.ts +++ b/contracts/deploy/timeBasedPaymaster.ts @@ -1,13 +1,8 @@ -import * as ethers from "ethers"; -import { Provider, Wallet } from "zksync-web3"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import { - HardhatRuntimeEnvironment, - HttpNetworkUserConfig, -} from "hardhat/types"; +import { fundAccount, deployContract } from "./utils"; +import * as hre from "hardhat"; + // load env file import dotenv from "dotenv"; - dotenv.config(); // load wallet private key from env file @@ -16,47 +11,48 @@ const PRIVATE_KEY = process.env.WALLET_PRIVATE_KEY || ""; if (!PRIVATE_KEY) throw "⛔️ Private key not detected! Add it to the .env file!"; -export default async function (hre: HardhatRuntimeEnvironment) { - console.log(`Running deploy script for the TimeBasedPaymaster contract...`); - const provider = new Provider((hre.network.config as HttpNetworkUserConfig).url); +async function main() { + const contract = "TimeBasedPaymaster"; + const artifact = await hre.ethers.loadArtifact(contract); + console.log( + `Running script to deploy ${artifact.contractName} contract on ${hre.network.name}`, + ); - const wallet = new Wallet(PRIVATE_KEY); - const deployer = new Deployer(hre, wallet); + // Retrieve signers + const [deployer] = await hre.ethers.getSigners(); - const paymasterArtifact = await deployer.loadArtifact("TimeBasedPaymaster"); - const deploymentFee = await deployer.estimateDeployFee(paymasterArtifact, []); - const parsedFee = ethers.utils.formatEther(deploymentFee.toString()); - console.log(`The deployment is estimated to cost ${parsedFee} ETH`); - // Deploy the contract - const paymaster = await deployer.deploy(paymasterArtifact, []); - console.log(`Paymaster address: ${paymaster.address}`); - console.log("constructor args:" + paymaster.interface.encodeDeploy([])); + // Deploying the paymaster + const paymaster = await deployContract(artifact.contractName, []); + const paymasterAddress = await paymaster.getAddress(); + console.log(`Paymaster address: ${paymasterAddress}`); console.log("Funding paymaster with ETH"); // Supplying paymaster with ETH - await ( - await deployer.zkWallet.sendTransaction({ - to: paymaster.address, - value: ethers.utils.parseEther("0.001"), - }) - ).wait(); - - let paymasterBalance = await provider.getBalance(paymaster.address); - console.log(`Paymaster ETH balance is now ${paymasterBalance.toString()}`); + await fundAccount(deployer, paymasterAddress, "0.005"); - // Verify contract programmatically - // - // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) - const contractFullyQualifedName = - "contracts/paymasters/TimeBasedPaymaster.sol:TimeBasedPaymaster"; - const verificationId = await hre.run("verify:verify", { - address: paymaster.address, - contract: contractFullyQualifedName, - constructorArguments: [], - bytecode: paymasterArtifact.bytecode, - }); - console.log( - `${contractFullyQualifedName} verified! VerificationId: ${verificationId}`, + const paymasterBalance = await hre.ethers.provider.getBalance( + paymasterAddress, ); + console.log(`Paymaster ETH balance is now ${paymasterBalance.toString()}`); + + // only verify on testnet and mainnet + if (hre.network.name.includes("ZKsyncEra")) { + const verificationId = await hre.run("verify:verify", { + address: paymasterAddress, + // Contract MUST be fully qualified name (e.g. path/sourceName:contractName) + contract: `${artifact.sourceName}:${artifact.contractName}`, + constructorArguments: [deployer.address], + }); + console.log( + `${artifact.contractName} verified! VerificationId: ${verificationId}`, + ); + } console.log(`Done!`); } + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/contracts/deploy/use-greeter.ts b/contracts/deploy/use-greeter.ts index dd40652..6bbf100 100644 --- a/contracts/deploy/use-greeter.ts +++ b/contracts/deploy/use-greeter.ts @@ -1,6 +1,5 @@ -import { Provider } from "zksync-web3"; -import * as ethers from "ethers"; -import { HardhatRuntimeEnvironment, HttpNetworkUserConfig } from "hardhat/types"; +import { Contract } from "zksync-ethers"; +import * as hre from "hardhat"; // load env file import dotenv from "dotenv"; @@ -20,20 +19,14 @@ const CONTRACT_ADDRESS = ""; if (!CONTRACT_ADDRESS) throw "⛔️ Contract address not provided"; // An example of a deploy script that will deploy and call a simple contract. -export default async function (hre: HardhatRuntimeEnvironment) { - console.log(`Running script to interact with contract ${CONTRACT_ADDRESS}`); - - // Initialize the provider. - // @ts-ignore - const provider = new Provider((hre.network.config as HttpNetworkUserConfig).url); - const signer = new ethers.Wallet(PRIVATE_KEY, provider); +async function main() { + console.log( + `Running script to interact with contract ${CONTRACT_ADDRESS} on ${hre.network.name}`, + ); + const [signer] = await hre.ethers.getSigners(); // Initialise contract instance - const contract = new ethers.Contract( - CONTRACT_ADDRESS, - ContractArtifact.abi, - signer, - ); + const contract = new Contract(CONTRACT_ADDRESS, ContractArtifact.abi, signer); // Read message from contract console.log(`The message is ${await contract.greet()}`); @@ -48,3 +41,10 @@ export default async function (hre: HardhatRuntimeEnvironment) { // Read message after transaction console.log(`The message now is ${await contract.greet()}`); } + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/contracts/deploy/utils.ts b/contracts/deploy/utils.ts new file mode 100644 index 0000000..12bb5a2 --- /dev/null +++ b/contracts/deploy/utils.ts @@ -0,0 +1,26 @@ +import { Contract, Signer } from "zksync-ethers"; +import * as ethers from "ethers"; +import * as hre from "hardhat"; + +async function deployContract( + artifact: string, + params: any[], +): Promise { + const contractFactory = await hre.ethers.getContractFactory(artifact); + const contract = await contractFactory.deploy(...params); + return contract; +} + +async function fundAccount(wallet: Signer, address: string, amount: string) { + // fund account + await ( + await wallet.sendTransaction({ + to: address, + value: ethers.parseEther(amount), + }) + ).wait(); + + console.log(`Account ${address} funded with ${amount}`); +} + +export { deployContract, fundAccount }; diff --git a/contracts/hardhat.config.ts b/contracts/hardhat.config.ts index eee584b..db898d9 100644 --- a/contracts/hardhat.config.ts +++ b/contracts/hardhat.config.ts @@ -1,43 +1,51 @@ -import "@matterlabs/hardhat-zksync-deploy"; -import "@matterlabs/hardhat-zksync-solc"; -import "@matterlabs/hardhat-zksync-verify"; -import "@nomiclabs/hardhat-etherscan"; +import "@matterlabs/hardhat-zksync"; import { HardhatUserConfig } from "hardhat/config"; +// load env file +import dotenv from "dotenv"; +dotenv.config(); + +// PK from era-test-node rich wallet list https://docs.zksync.io/build/test-and-debug/in-memory-node#pre-configured-rich-wallets +const TEST_RICH_WALLET = + "0x3d3cbc973389cb26f657686445bcc75662b415b656078503592ac8c1abb8810e"; + const config: HardhatUserConfig = { zksolc: { version: "latest", settings: {}, }, - defaultNetwork: "zkSyncTestnet", + defaultNetwork: "hardhat", networks: { hardhat: { - zksync: false, + zksync: true, }, - zkSyncInMemory: { + ZKsyncInMemory: { url: "http://127.0.0.1:8011", ethNetwork: "sepolia", zksync: true, }, - zkSyncLocal: { + ZKsyncLocal: { url: "http://localhost:3050", ethNetwork: "http://localhost:8545", zksync: true, }, - zkSyncTestnet: { + ZKsyncEraTestnet: { url: "https://sepolia.era.zksync.dev", ethNetwork: "sepolia", zksync: true, // Verification endpoint for Sepolia verifyURL: "https://explorer.sepolia.era.zksync.dev/contract_verification", + accounts: [process.env.WALLET_PRIVATE_KEY || TEST_RICH_WALLET], }, - zkSyncMainnet: { + ZKsyncEraMainnet: { url: "https://mainnet.era.zksync.io", ethNetwork: "mainnet", zksync: true, - verifyURL: "https://zksync2-mainnet-explorer.zksync.io/contract_verification", + verifyURL: + "https://zksync2-mainnet-explorer.zksync.io/contract_verification", + accounts: [process.env.WALLET_PRIVATE_KEY || TEST_RICH_WALLET], }, }, solidity: { diff --git a/contracts/package.json b/contracts/package.json index a0d03c7..22e13ae 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -6,37 +6,33 @@ "author": "Antonio ", "license": "MIT", "devDependencies": { - "@matterlabs/hardhat-zksync-deploy": "^0.6.5", - "@matterlabs/hardhat-zksync-solc": "^0.4.2", - "@matterlabs/hardhat-zksync-verify": "^0.1.8", + "@matterlabs/hardhat-zksync": "^1.2.0", "@matterlabs/zksync-contracts": "^0.6.1", - "@nomiclabs/hardhat-etherscan": "^3.1.7", "@openzeppelin/contracts": "^4.9.1", "@types/chai": "^4.3.4", "@types/mocha": "^10.0.1", "chai": "^4.3.7", "dotenv": "^16.0.3", - "ethers": "^5.7.2", - "hardhat": "^2.12.4", + "ethers": "^6.7.2", + "hardhat": "^2.16.0", "mocha": "^10.2.0", "prettier": "^2.8.8", "ts-node": "^10.9.1", "typescript": "^4.9.4", - "zksync-web3": "^0.14.3" + "zksync-ethers": "^6.14.0" }, "scripts": { - "test": "hardhat test --network zkSyncInMemory", - "ci:tests": "hardhat test --network zkSyncInMemory --show-stack-traces", - "deploy": "hardhat deploy-zksync", - "greeter": "hardhat deploy-zksync --script greeter.ts", - "gasless": "hardhat deploy-zksync --script gaslessPaymaster.ts", - "allowList": "hardhat deploy-zksync --script allowListPaymaster.ts", - "nftGated": "hardhat deploy-zksync --script erc721gatedPaymaster.ts", - "fixedToken": "hardhat deploy-zksync --script erc20fixedPaymaster.ts", - "timeBased": "hardhat deploy-zksync --script timeBasedPaymaster.ts", - "signatureBased":"hardhat deploy-zksync --script signatureBasedPaymaster.ts", - "nft": "hardhat deploy-zksync --script erc721.ts", - "token": "hardhat deploy-zksync --script erc20.ts", + "test": "hardhat test", + "ci:tests": "hardhat test --show-stack-traces", + "greeter": "hardhat run ./deploy/greeter.ts", + "gasless": "hardhat run ./deploy/gaslessPaymaster.ts", + "allowList": "hardhat run ./deploy/allowListPaymaster.ts", + "nftGated": "hardhat run ./deploy/erc721gatedPaymaster.ts", + "fixedToken": "hardhat run ./deploy/erc20fixedPaymaster.ts", + "timeBased": "hardhat run ./deploy/timeBasedPaymaster.ts", + "signatureBased": "hardhat run ./deploy/signatureBasedPaymaster.ts", + "nft": "hardhat run ./deploy/erc721.ts", + "token": "hardhat run ./deploy/erc20.ts", "compile": "hardhat compile", "format": "prettier --write \"{deploy,test}/**/*.{ts,js,jsx,tsx}\"" }, diff --git a/contracts/test/allowlist.test.ts b/contracts/test/allowlist.test.ts index ffa8438..2adc5f1 100644 --- a/contracts/test/allowlist.test.ts +++ b/contracts/test/allowlist.test.ts @@ -1,55 +1,54 @@ import { expect } from "chai"; -import { Wallet, Provider, Contract, utils } from "zksync-web3"; -import hardhatConfig from "../hardhat.config"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import * as ethers from "ethers"; - -import { deployContract, fundAccount, setupDeployer } from "./utils"; +import { Wallet, Contract, utils, Signer } from "zksync-ethers"; +import * as hre from "hardhat"; +import { deployContract, fundAccount } from "../deploy/utils"; // load env file import dotenv from "dotenv"; dotenv.config(); -// load wallet private key from env file -const PRIVATE_KEY = - process.env.WALLET_PRIVATE_KEY || - "0x7726827caac94a7f9e1b160f7ea819f172f7b6f9d2a97f992c38edeab82d4110"; - describe("AllowlistPaymaster", function () { - let provider: Provider; - let wallet: Wallet; - let deployer: Deployer; + let randomWallet: any; let emptyWallet: Wallet; - let userWallet: Wallet; - let userInitialBalance: ethers.BigNumber; + let userInitialBalance: bigint; let paymaster: Contract; let greeter: Contract; + let paymasterAddress: string; + let signers: Signer[]; + let deployer: Signer; before(async function () { - const deployUrl = hardhatConfig.networks.zkSyncInMemory.url; - // setup deployer - [provider, wallet, deployer] = setupDeployer(deployUrl, PRIVATE_KEY); - // setup new wallet - emptyWallet = Wallet.createRandom(); - console.log(`Empty wallet's address: ${emptyWallet.address}`); - userWallet = new Wallet(emptyWallet.privateKey, provider); - userInitialBalance = await userWallet.getBalance(); + // retrieve default signers + signers = await hre.ethers.getSigners(); + deployer = signers[0]; + + // setup new empty wallet + randomWallet = Wallet.createRandom(); + emptyWallet = new Wallet(randomWallet.privateKey, hre.ethers.provider); + + userInitialBalance = await hre.ethers.provider.getBalance( + emptyWallet.address, + ); + // deploy contracts - paymaster = await deployContract(deployer, "AllowlistPaymaster", []); - greeter = await deployContract(deployer, "Greeter", ["Hi"]); - // fund paymaster - await fundAccount(wallet, paymaster.address, "3"); + + paymaster = await deployContract("AllowlistPaymaster", []); + greeter = await deployContract("Greeter", ["Hi"]); + paymasterAddress = await paymaster.getAddress(); + + await fundAccount(deployer, paymasterAddress, "3"); + // set allowance for the user wallet - const tx = await paymaster - .connect(wallet) - .setBatchAllowance([userWallet.address], [true]); - await tx.wait(); + const allowanceTx = await paymaster + .connect(deployer) + .setBatchAllowance([emptyWallet.address], [true]); + await allowanceTx.wait(); }); async function executeGreetingTransaction(user: Wallet) { - const gasPrice = await provider.getGasPrice(); + const gasPrice = await hre.ethers.provider.getGasPrice(); - const paymasterParams = utils.getPaymasterParams(paymaster.address, { + const paymasterParams = utils.getPaymasterParams(paymasterAddress, { type: "General", // empty bytes as paymaster does not use innerInput innerInput: new Uint8Array(), @@ -58,9 +57,9 @@ describe("AllowlistPaymaster", function () { const setGreetingTx = await greeter .connect(user) .setGreeting("Hola, mundo!", { - maxPriorityFeePerGas: ethers.BigNumber.from(0), + maxPriorityFeePerGas: 0n, maxFeePerGas: gasPrice, - // hardhcoded for testing + // hardcoded for testing gasLimit: 6000000, customData: { gasPerPubdata: utils.DEFAULT_GAS_PER_PUBDATA_LIMIT, @@ -69,39 +68,43 @@ describe("AllowlistPaymaster", function () { }); await setGreetingTx.wait(); - - return wallet.getBalance(); } it("allowed user can update message for free", async function () { - await executeGreetingTransaction(userWallet); - const newBalance = await userWallet.getBalance(); + await executeGreetingTransaction(emptyWallet); + const newBalance = await hre.ethers.provider.getBalance( + emptyWallet.address, + ); expect(await greeter.greet()).to.equal("Hola, mundo!"); expect(newBalance).to.eql(userInitialBalance); }); it("should allow owner to withdraw all funds", async function () { try { - const tx = await paymaster.connect(wallet).withdraw(userWallet.address); + const tx = await paymaster + .connect(deployer) + .withdraw(emptyWallet.address); await tx.wait(); } catch (e) { console.error("Error executing withdrawal:", e); } - const finalContractBalance = await provider.getBalance(paymaster.address); + const finalContractBalance = await hre.ethers.provider.getBalance( + paymasterAddress, + ); - expect(finalContractBalance).to.eql(ethers.BigNumber.from(0)); + expect(finalContractBalance).to.eql(0n); }); it("should prevent non-owners from withdrawing funds", async function () { try { - await paymaster.connect(userWallet).withdraw(userWallet.address); + await paymaster.connect(emptyWallet).withdraw(emptyWallet.address); } catch (e) { expect(e.message).to.include("Ownable: caller is not the owner"); } }); it("should prevent non-allowed user from calling Greeter", async function () { - const notAllowedWallet = Wallet.createRandom().connect(provider); + const notAllowedWallet = signers[1]; try { await executeGreetingTransaction(notAllowedWallet); } catch (e) { diff --git a/contracts/test/erc20fixed.test.ts b/contracts/test/erc20fixed.test.ts index 7aac261..a65944c 100644 --- a/contracts/test/erc20fixed.test.ts +++ b/contracts/test/erc20fixed.test.ts @@ -1,61 +1,50 @@ import { expect } from "chai"; -import { Wallet, Provider, Contract, utils } from "zksync-web3"; -import hardhatConfig from "../hardhat.config"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import * as ethers from "ethers"; +import { Wallet, Contract, utils, Signer } from "zksync-ethers"; +import * as hre from "hardhat"; -import { deployContract, fundAccount, setupDeployer } from "./utils"; +import { fundAccount, deployContract } from "../deploy/utils"; // load env file import dotenv from "dotenv"; dotenv.config(); -// load wallet private key from env file -const PRIVATE_KEY = - process.env.WALLET_PRIVATE_KEY || - "0x7726827caac94a7f9e1b160f7ea819f172f7b6f9d2a97f992c38edeab82d4110"; - describe("ERC20fixedPaymaster", function () { - let provider: Provider; - let wallet: Wallet; - let deployer: Deployer; - let userWallet: Wallet; - let ownerInitialBalance: ethers.BigNumber; + let randomWallet: any; + let emptyWallet: Wallet; let paymaster: Contract; + let paymasterAddress: string; let greeter: Contract; let token: Contract; + let tokenAddress: string; + let signers: Signer[]; + let deployer: Signer; before(async function () { - const deployUrl = hardhatConfig.networks.zkSyncInMemory.url; - // setup deployer - [provider, wallet, deployer] = setupDeployer(deployUrl, PRIVATE_KEY); - // setup new wallet - const emptyWallet = Wallet.createRandom(); - console.log(`Empty wallet's address: ${emptyWallet.address}`); - userWallet = new Wallet(emptyWallet.privateKey, provider); + // retrieve default signers + signers = await hre.ethers.getSigners(); + deployer = signers[0]; + + // setup new empty wallet + randomWallet = Wallet.createRandom(); + emptyWallet = new Wallet(randomWallet.privateKey, hre.ethers.provider); + // deploy contracts - token = await deployContract(deployer, "MyERC20", [ - "MyToken", - "MyToken", - 18, - ]); - paymaster = await deployContract(deployer, "ERC20fixedPaymaster", [ - token.address, - ]); - greeter = await deployContract(deployer, "Greeter", ["Hi"]); + token = await deployContract("MyERC20", ["MyToken", "MyToken", 18]); + tokenAddress = await token.getAddress(); + paymaster = await deployContract("ERC20fixedPaymaster", [tokenAddress]); + paymasterAddress = await paymaster.getAddress(); + greeter = await deployContract("Greeter", ["Hi"]); // fund paymaster - await fundAccount(wallet, paymaster.address, "3"); - ownerInitialBalance = await wallet.getBalance(); + await fundAccount(deployer, paymasterAddress, "3"); }); async function executeGreetingTransaction(user: Wallet) { - const gasPrice = await provider.getGasPrice(); - const token_address = token.address.toString(); + const gasPrice = await hre.ethers.provider.getGasPrice(); - const paymasterParams = utils.getPaymasterParams(paymaster.address, { + const paymasterParams = utils.getPaymasterParams(paymasterAddress, { type: "ApprovalBased", - token: token_address, - minimalAllowance: ethers.BigNumber.from(1), + token: tokenAddress, + minimalAllowance: 1n, // empty bytes as testnet paymaster does not use innerInput innerInput: new Uint8Array(), }); @@ -63,10 +52,10 @@ describe("ERC20fixedPaymaster", function () { const setGreetingTx = await greeter .connect(user) .setGreeting("Hola, mundo!", { - maxPriorityFeePerGas: ethers.BigNumber.from(0), + maxPriorityFeePerGas: 0n, maxFeePerGas: gasPrice, // hardcoded for testing - gasLimit: 6000000, + gasLimit: 9000000, customData: { gasPerPubdata: utils.DEFAULT_GAS_PER_PUBDATA_LIMIT, paymasterParams, @@ -74,49 +63,57 @@ describe("ERC20fixedPaymaster", function () { }); await setGreetingTx.wait(); - - return wallet.getBalance(); } it("user with MyERC20 token can update message for free", async function () { - const initialMintAmount = ethers.utils.parseEther("3"); - const success = await token.mint(userWallet.address, initialMintAmount); + const initialMintAmount = hre.ethers.parseEther("3"); + const success = await token.mint(emptyWallet.address, initialMintAmount); await success.wait(); - const userInitialTokenBalance = await token.balanceOf(userWallet.address); - const userInitialETHBalance = await userWallet.getBalance(); - const initialPaymasterBalance = await provider.getBalance( - paymaster.address, + const userInitialTokenBalance = await token.balanceOf(emptyWallet.address); + const userInitialETHBalance = await hre.ethers.provider.getBalance( + emptyWallet.address, + ); + const initialPaymasterBalance = await hre.ethers.provider.getBalance( + paymasterAddress, ); - await executeGreetingTransaction(userWallet); + await executeGreetingTransaction(emptyWallet); - const finalETHBalance = await userWallet.getBalance(); - const finalUserTokenBalance = await token.balanceOf(userWallet.address); - const finalPaymasterBalance = await provider.getBalance(paymaster.address); + const finalETHBalance = await hre.ethers.provider.getBalance( + emptyWallet.address, + ); + const finalUserTokenBalance = await token.balanceOf(emptyWallet.address); + const finalPaymasterBalance = await hre.ethers.provider.getBalance( + paymasterAddress, + ); expect(await greeter.greet()).to.equal("Hola, mundo!"); - expect(initialPaymasterBalance.gt(finalPaymasterBalance)).to.be.true; + expect(initialPaymasterBalance > finalPaymasterBalance).to.be.true; expect(userInitialETHBalance).to.eql(finalETHBalance); - expect(userInitialTokenBalance.gt(finalUserTokenBalance)).to.be.true; + expect(userInitialTokenBalance > finalUserTokenBalance).to.be.true; }); it("should allow owner to withdraw all funds", async function () { try { - const tx = await paymaster.connect(wallet).withdraw(userWallet.address); + const tx = await paymaster + .connect(deployer) + .withdraw(emptyWallet.address); await tx.wait(); } catch (e) { console.error("Error executing withdrawal:", e); } - const finalContractBalance = await provider.getBalance(paymaster.address); + const finalContractBalance = await hre.ethers.provider.getBalance( + paymasterAddress, + ); - expect(finalContractBalance).to.eql(ethers.BigNumber.from(0)); + expect(finalContractBalance).to.eql(0n); }); it("should prevent non-owners from withdrawing funds", async function () { try { - await paymaster.connect(userWallet).withdraw(userWallet.address); + await paymaster.connect(emptyWallet).withdraw(emptyWallet.address); } catch (e) { expect(e.message).to.include("Ownable: caller is not the owner"); } diff --git a/contracts/test/erc721gated.test.ts b/contracts/test/erc721gated.test.ts index 5dc7893..c1e997b 100644 --- a/contracts/test/erc721gated.test.ts +++ b/contracts/test/erc721gated.test.ts @@ -1,65 +1,61 @@ import { expect } from "chai"; -import { Wallet, Provider, Contract, utils } from "zksync-web3"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import * as ethers from "ethers"; -import hardhatConfig from "../hardhat.config"; +import { Wallet, Provider, Contract, utils, Signer } from "zksync-ethers"; +import * as hre from "hardhat"; -import { deployContract, fundAccount, setupDeployer } from "./utils"; +import { deployContract, fundAccount } from "../deploy/utils"; // load env file import dotenv from "dotenv"; dotenv.config(); -// load wallet private key from env file -const PRIVATE_KEY = - process.env.WALLET_PRIVATE_KEY || - "0x7726827caac94a7f9e1b160f7ea819f172f7b6f9d2a97f992c38edeab82d4110"; - describe("ERC721gatedPaymaster", function () { let provider: Provider; + let randomWallet: any; + let emptyWallet: Wallet; let wallet: Wallet; - let deployer: Deployer; - let userWallet: Wallet; - let initialBalance: ethers.BigNumber; - let otherBalance: ethers.BigNumber; + let initialBalance: bigint; + let otherBalance: bigint; let paymaster: Contract; + let paymasterAddress: string; let greeter: Contract; let erc721: Contract; + let erc721Address: string; + let signers: Signer[]; + let deployer: Signer; before(async function () { - const deployUrl = hardhatConfig.networks.zkSyncInMemory.url; - // setup deployer - [provider, wallet, deployer] = setupDeployer(deployUrl, PRIVATE_KEY); - // setup new wallet - userWallet = Wallet.createRandom(); - userWallet = new Wallet(userWallet.privateKey, provider); - initialBalance = await userWallet.getBalance(); + // retrieve default signers + signers = await hre.ethers.getSigners(); + deployer = signers[0]; + // setup new empty wallet + randomWallet = Wallet.createRandom(); + emptyWallet = new Wallet(randomWallet.privateKey, hre.ethers.provider); + initialBalance = await hre.ethers.provider.getBalance(emptyWallet.address); + // deploy contracts - erc721 = await deployContract(deployer, "MyNFT", []); - paymaster = await deployContract(deployer, "ERC721gatedPaymaster", [ - erc721.address, - ]); - greeter = await deployContract(deployer, "Greeter", ["Hi"]); + erc721 = await deployContract("MyNFT", []); + erc721Address = await erc721.getAddress(); + paymaster = await deployContract("ERC721gatedPaymaster", [erc721Address]); + paymasterAddress = await paymaster.getAddress(); + greeter = await deployContract("Greeter", ["Hi"]); // fund paymaster - await fundAccount(wallet, paymaster.address, "3"); - otherBalance = await wallet.getBalance(); + await fundAccount(deployer, paymasterAddress, "3"); }); async function executeGreetingTransaction(user: Wallet) { - const gasPrice = await provider.getGasPrice(); + const gasPrice = await hre.ethers.provider.getGasPrice(); - const paymasterParams = utils.getPaymasterParams(paymaster.address, { + const paymasterParams = utils.getPaymasterParams(paymasterAddress, { type: "General", // empty bytes as paymaster does not use innerInput innerInput: new Uint8Array(), }); - console.log("user: ", user.address); const setGreetingTx = await greeter .connect(user) .setGreeting("Hello World", { - maxPriorityFeePerGas: ethers.BigNumber.from(0), + maxPriorityFeePerGas: 0n, maxFeePerGas: gasPrice, - // hardhcoded for testing + // hardcoded for testing gasLimit: 6000000, customData: { gasPerPubdata: utils.DEFAULT_GAS_PER_PUBDATA_LIMIT, @@ -68,18 +64,18 @@ describe("ERC721gatedPaymaster", function () { }); await setGreetingTx.wait(); - - return wallet.getBalance(); } it("should not pay for gas fees when user has NFT", async function () { const tx = await erc721 - .connect(wallet) - .createCollectible(userWallet.address); + .connect(deployer) + .createCollectible(emptyWallet.address); await tx.wait(); - await executeGreetingTransaction(userWallet); - const newBalance = await userWallet.getBalance(); + await executeGreetingTransaction(emptyWallet); + const newBalance = await hre.ethers.provider.getBalance( + emptyWallet.address, + ); expect(await greeter.greet()).to.equal("Hello World"); expect(newBalance).to.eql(initialBalance); @@ -87,20 +83,24 @@ describe("ERC721gatedPaymaster", function () { it("should allow owner to withdraw all funds", async function () { try { - const tx = await paymaster.connect(wallet).withdraw(userWallet.address); + const tx = await paymaster + .connect(deployer) + .withdraw(emptyWallet.address); await tx.wait(); } catch (e) { console.error("Error executing withdrawal:", e); } - const finalContractBalance = await provider.getBalance(paymaster.address); + const finalContractBalance = await hre.ethers.provider.getBalance( + paymasterAddress, + ); - expect(finalContractBalance).to.eql(ethers.BigNumber.from(0)); + expect(finalContractBalance).to.eql(0n); }); it("should prevent non-owners from withdrawing funds", async function () { try { - await paymaster.connect(userWallet).withdraw(userWallet.address); + await paymaster.connect(emptyWallet).withdraw(emptyWallet.address); } catch (e) { expect(e.message).to.include("Ownable: caller is not the owner"); } diff --git a/contracts/test/gasless.test.ts b/contracts/test/gasless.test.ts index 05ce02e..824b6f8 100644 --- a/contracts/test/gasless.test.ts +++ b/contracts/test/gasless.test.ts @@ -1,50 +1,47 @@ import { expect } from "chai"; -import { Wallet, Provider, Contract, utils } from "zksync-web3"; -import hardhatConfig from "../hardhat.config"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import * as ethers from "ethers"; +import { Wallet, Provider, Contract, utils, Signer } from "zksync-ethers"; +import * as hre from "hardhat"; -import { deployContract, fundAccount, setupDeployer } from "./utils"; +import { deployContract, fundAccount } from "../deploy/utils"; // load env file import dotenv from "dotenv"; dotenv.config(); -// load wallet private key from env file -const PRIVATE_KEY = - process.env.WALLET_PRIVATE_KEY || - "0x7726827caac94a7f9e1b160f7ea819f172f7b6f9d2a97f992c38edeab82d4110"; - describe("GaslessPaymaster", function () { - let provider: Provider; - let wallet: Wallet; - let deployer: Deployer; + let randomWallet: any; let emptyWallet: Wallet; - let userWallet: Wallet; - let ownerInitialBalance: ethers.BigNumber; + let initialBalance: bigint; let paymaster: Contract; + let paymasterAddress: string; let greeter: Contract; + let greeterAddress: string; + let signers: Signer[]; + let deployer: Signer; before(async function () { - const deployUrl = hardhatConfig.networks.zkSyncInMemory.url; - // setup deployer - [provider, wallet, deployer] = setupDeployer(deployUrl, PRIVATE_KEY); - // setup new wallet - emptyWallet = Wallet.createRandom(); - console.log(`Empty wallet's address: ${emptyWallet.address}`); - userWallet = new Wallet(emptyWallet.privateKey, provider); + // retrieve default signers + signers = await hre.ethers.getSigners(); + deployer = signers[0]; + + // setup new empty wallet + randomWallet = Wallet.createRandom(); + emptyWallet = new Wallet(randomWallet.privateKey, hre.ethers.provider); + // deploy contracts - paymaster = await deployContract(deployer, "GaslessPaymaster", []); - greeter = await deployContract(deployer, "Greeter", ["Hi"]); + paymaster = await deployContract("GaslessPaymaster", []); + paymasterAddress = await paymaster.getAddress(); + greeter = await deployContract("Greeter", ["Hi"]); + greeterAddress = await greeter.getAddress(); // fund paymaster - await fundAccount(wallet, paymaster.address, "3"); - ownerInitialBalance = await wallet.getBalance(); + await fundAccount(deployer, paymasterAddress, "3"); + initialBalance = await hre.ethers.provider.getBalance(emptyWallet.address); }); async function executeGreetingTransaction(user: Wallet) { - const gasPrice = await provider.getGasPrice(); + const gasPrice = await hre.ethers.provider.getGasPrice(); - const paymasterParams = utils.getPaymasterParams(paymaster.address, { + const paymasterParams = utils.getPaymasterParams(paymasterAddress, { type: "General", // empty bytes as paymaster does not use innerInput innerInput: new Uint8Array(), @@ -53,9 +50,9 @@ describe("GaslessPaymaster", function () { const setGreetingTx = await greeter .connect(user) .setGreeting("Hola, mundo!", { - maxPriorityFeePerGas: ethers.BigNumber.from(0), + maxPriorityFeePerGas: 0n, maxFeePerGas: gasPrice, - // hardhcoded for testing + // hardcoded for testing gasLimit: 6000000, customData: { gasPerPubdata: utils.DEFAULT_GAS_PER_PUBDATA_LIMIT, @@ -64,33 +61,41 @@ describe("GaslessPaymaster", function () { }); await setGreetingTx.wait(); - - return wallet.getBalance(); } it("Owner can update message for free", async function () { - const newBalance = await executeGreetingTransaction(userWallet); - + const userInitialETHBalance = await hre.ethers.provider.getBalance( + emptyWallet.address, + ); + await executeGreetingTransaction(emptyWallet); + + const newBalance = await hre.ethers.provider.getBalance( + emptyWallet.address, + ); expect(await greeter.greet()).to.equal("Hola, mundo!"); - expect(newBalance).to.eql(ownerInitialBalance); + expect(newBalance).to.eql(userInitialETHBalance); }); it("should allow owner to withdraw all funds", async function () { try { - const tx = await paymaster.connect(wallet).withdraw(userWallet.address); + const tx = await paymaster + .connect(deployer) + .withdraw(emptyWallet.address); await tx.wait(); } catch (e) { console.error("Error executing withdrawal:", e); } - const finalContractBalance = await provider.getBalance(paymaster.address); + const finalContractBalance = await hre.ethers.provider.getBalance( + paymasterAddress, + ); - expect(finalContractBalance).to.eql(ethers.BigNumber.from(0)); + expect(finalContractBalance).to.eql(0n); }); it("should prevent non-owners from withdrawing funds", async function () { try { - await paymaster.connect(userWallet).withdraw(userWallet.address); + await paymaster.connect(emptyWallet).withdraw(emptyWallet.address); } catch (e) { expect(e.message).to.include("Ownable: caller is not the owner"); } diff --git a/contracts/test/signatureBased.test.ts b/contracts/test/signatureBased.test.ts index d294eb7..9dc1f24 100644 --- a/contracts/test/signatureBased.test.ts +++ b/contracts/test/signatureBased.test.ts @@ -1,44 +1,44 @@ import { expect } from "chai"; -import { Wallet, Provider, Contract, utils } from "zksync-web3"; -import hardhatConfig from "../hardhat.config"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import * as ethers from "ethers"; - -import { deployContract, fundAccount, setupDeployer } from "./utils"; +import { Wallet, Provider, Contract, utils, Signer } from "zksync-ethers"; +import * as hre from "hardhat"; +import { deployContract, fundAccount } from "../deploy/utils"; import dotenv from "dotenv"; -import { _TypedDataEncoder } from "ethers/lib/utils"; dotenv.config(); -const PRIVATE_KEY = - process.env.WALLET_PRIVATE_KEY || - "0x7726827caac94a7f9e1b160f7ea819f172f7b6f9d2a97f992c38edeab82d4110"; -const abiCoder = new ethers.utils.AbiCoder(); +const abiCoder = new hre.ethers.AbiCoder(); describe("SignatureBasedPaymaster", function () { let provider: Provider; - let wallet: Wallet; - let deployer: Deployer; - let userWallet: Wallet; + let randomWallet: any; + let emptyWallet: Wallet; let signerWallet: Wallet; let paymaster: Contract; + let paymasterAddress: string; let greeter: Contract; + let signers: Signer[]; + let deployer: Signer; before(async function () { - const deployUrl = hardhatConfig.networks.zkSyncInMemory.url; - [provider, wallet, deployer] = setupDeployer(deployUrl, PRIVATE_KEY); - const emptyWallet = Wallet.createRandom(); - console.log(`User wallet's address: ${emptyWallet.address}`); - userWallet = new Wallet(emptyWallet.privateKey, provider); - signerWallet = Wallet.createRandom(); - console.log(`Signer wallet's address: ${signerWallet.address}`); - signerWallet = new Wallet(signerWallet.privateKey, provider); - paymaster = await deployContract(deployer, "SignatureBasedPaymaster", [ + // retrieve default signers + signers = await hre.ethers.getSigners(); + deployer = signers[0]; + provider = hre.ethers.provider; + + // setup new empty wallet + randomWallet = Wallet.createRandom(); + emptyWallet = new Wallet(randomWallet.privateKey, hre.ethers.provider); + + const randomWallet2 = Wallet.createRandom(); + + signerWallet = new Wallet(randomWallet2.privateKey, provider); + paymaster = await deployContract("SignatureBasedPaymaster", [ signerWallet.address, ]); - greeter = await deployContract(deployer, "Greeter", ["Hi"]); - await fundAccount(wallet, paymaster.address, "3"); - console.log(`Paymaster current signer: ${signerWallet.address}`); + paymasterAddress = await paymaster.getAddress(); + + greeter = await deployContract("Greeter", ["Hi"]); + await fundAccount(deployer, paymasterAddress, "3"); }); async function createSignatureData( @@ -75,7 +75,8 @@ describe("SignatureBasedPaymaster", function () { nonces: nonce, }; - const signature = await signer._signTypedData(domain, types, values); + const signature = await signer.signTypedData(domain, types, values); + return [signature, lastTimestamp]; } @@ -85,7 +86,7 @@ describe("SignatureBasedPaymaster", function () { ) { const gasPrice = await provider.getGasPrice(); - const paymasterParams = utils.getPaymasterParams(paymaster.address, { + const paymasterParams = utils.getPaymasterParams(paymasterAddress, { type: "General", innerInput: _innerInput, }); @@ -93,7 +94,7 @@ describe("SignatureBasedPaymaster", function () { const setGreetingTx = await greeter .connect(user) .setGreeting("Hola, mundo!", { - maxPriorityFeePerGas: ethers.BigNumber.from(0), + maxPriorityFeePerGas: 0n, maxFeePerGas: gasPrice, gasLimit: 6000000, customData: { @@ -107,19 +108,19 @@ describe("SignatureBasedPaymaster", function () { it("should allow user to use paymaster if signature valid and used before expiry and nonce should be updated", async function () { const expiryInSeconds = 300; - const beforeNonce = await paymaster.nonces(userWallet.address); + const beforeNonce = await paymaster.nonces(emptyWallet.address); const [sig, lastTimestamp] = await createSignatureData( signerWallet, - userWallet, + emptyWallet, expiryInSeconds, ); - const innerInput = ethers.utils.arrayify( + const innerInput = hre.ethers.getBytes( abiCoder.encode(["uint256", "bytes"], [lastTimestamp, sig]), ); - await executeGreetingTransaction(userWallet, innerInput); - const afterNonce = await paymaster.nonces(userWallet.address); - expect(afterNonce - beforeNonce).to.be.eq(1); + await executeGreetingTransaction(emptyWallet, innerInput); + const afterNonce = await paymaster.nonces(emptyWallet.address); + expect(afterNonce - beforeNonce).to.be.eq(1n); expect(await greeter.greet()).to.equal("Hola, mundo!"); }); @@ -130,16 +131,16 @@ describe("SignatureBasedPaymaster", function () { const invalidSigner = Wallet.createRandom(); const [sig, lastTimestamp] = await createSignatureData( invalidSigner, - userWallet, + emptyWallet, expiryInSeconds, ); - const innerInput = ethers.utils.arrayify( + const innerInput = hre.ethers.getBytes( abiCoder.encode(["uint256", "bytes"], [lastTimestamp, sig]), ); // Act try { - await executeGreetingTransaction(userWallet, innerInput); + await executeGreetingTransaction(emptyWallet, innerInput); } catch (error) { errorOccurred = true; expect(error.message).to.include("Paymaster: Invalid signer"); @@ -155,11 +156,11 @@ describe("SignatureBasedPaymaster", function () { const expiryInSeconds = 300; const [sig, lastTimestamp] = await createSignatureData( signerWallet, - userWallet, + emptyWallet, expiryInSeconds, ); - const innerInput = ethers.utils.arrayify( + const innerInput = hre.ethers.getBytes( abiCoder.encode(["uint256", "bytes"], [lastTimestamp, sig]), ); let newTimestamp: number = +lastTimestamp + 1; @@ -169,7 +170,7 @@ describe("SignatureBasedPaymaster", function () { // Act try { - await executeGreetingTransaction(userWallet, innerInput); + await executeGreetingTransaction(emptyWallet, innerInput); } catch (error) { errorOccurred = true; expect(error.message).to.include("Paymaster: Signature expired"); @@ -185,18 +186,18 @@ describe("SignatureBasedPaymaster", function () { const expiryInSeconds = 300; const [sig, lastTimestamp] = await createSignatureData( signerWallet, - userWallet, + emptyWallet, expiryInSeconds, ); - const innerInput = ethers.utils.arrayify( + const innerInput = hre.ethers.getBytes( abiCoder.encode(["uint256", "bytes"], [lastTimestamp, sig]), ); // Act - await paymaster.cancelNonce(userWallet.address); + await paymaster.cancelNonce(emptyWallet.address); try { - await executeGreetingTransaction(userWallet, innerInput); + await executeGreetingTransaction(emptyWallet, innerInput); } catch (error) { errorOccurred = true; expect(error.message).to.include("Paymaster: Invalid signer"); @@ -212,16 +213,16 @@ describe("SignatureBasedPaymaster", function () { const expiryInSeconds = 300; const [sig, lastTimestamp] = await createSignatureData( signerWallet, - userWallet, + emptyWallet, expiryInSeconds, ); - const innerInput = ethers.utils.arrayify( + const innerInput = hre.ethers.getBytes( abiCoder.encode(["uint256", "bytes"], [lastTimestamp, sig]), ); // Act try { - await executeGreetingTransaction(wallet, innerInput); + await executeGreetingTransaction(deployer, innerInput); } catch (error) { errorOccurred = true; expect(error.message).to.include("Paymaster: Invalid signer"); @@ -240,16 +241,16 @@ describe("SignatureBasedPaymaster", function () { const expiryInSeconds = 300; const [sig, lastTimestamp] = await createSignatureData( newSigner, - userWallet, + emptyWallet, expiryInSeconds, ); - const innerInput = ethers.utils.arrayify( + const innerInput = hre.ethers.getBytes( abiCoder.encode(["uint256", "bytes"], [lastTimestamp, sig]), ); // Act try { - await executeGreetingTransaction(userWallet, innerInput); + await executeGreetingTransaction(emptyWallet, innerInput); } catch (error) { errorOccurred = true; } @@ -262,7 +263,7 @@ describe("SignatureBasedPaymaster", function () { it("should prevent non-owners from withdrawing funds", async function () { try { - await paymaster.connect(userWallet).withdraw(userWallet.address); + await paymaster.connect(emptyWallet).withdraw(emptyWallet.address); } catch (e) { expect(e.message).to.include("Ownable: caller is not the owner"); } @@ -270,14 +271,16 @@ describe("SignatureBasedPaymaster", function () { it("should allow owner to withdraw all funds", async function () { try { - const tx = await paymaster.connect(wallet).withdraw(userWallet.address); + const tx = await paymaster + .connect(deployer) + .withdraw(emptyWallet.address); await tx.wait(); } catch (e) { console.error("Error executing withdrawal:", e); } - const finalContractBalance = await provider.getBalance(paymaster.address); + const finalContractBalance = await provider.getBalance(paymasterAddress); - expect(finalContractBalance).to.eql(ethers.BigNumber.from(0)); + expect(finalContractBalance).to.eql(0n); }); }); diff --git a/contracts/test/timeBased.test.ts b/contracts/test/timeBased.test.ts index 0f54d90..9c68126 100644 --- a/contracts/test/timeBased.test.ts +++ b/contracts/test/timeBased.test.ts @@ -1,41 +1,44 @@ import { expect } from "chai"; -import { Wallet, Provider, Contract, utils } from "zksync-web3"; -import hardhatConfig from "../hardhat.config"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import * as ethers from "ethers"; +import { Wallet, Provider, Contract, utils } from "zksync-ethers"; +import * as hre from "hardhat"; -import { deployContract, fundAccount, setupDeployer } from "./utils"; +import { deployContract, fundAccount } from "../deploy/utils"; import dotenv from "dotenv"; dotenv.config(); -const PRIVATE_KEY = - process.env.WALLET_PRIVATE_KEY || - "0x7726827caac94a7f9e1b160f7ea819f172f7b6f9d2a97f992c38edeab82d4110"; - describe("TimeBasedPaymaster", function () { let provider: Provider; - let wallet: Wallet; - let deployer: Deployer; - let userWallet: Wallet; + let randomWallet: any; + let emptyWallet: Wallet; let paymaster: Contract; let greeter: Contract; + let paymasterAddress: string; + let signers: Signer[]; + let deployer: Signer; before(async function () { - const deployUrl = hardhatConfig.networks.zkSyncInMemory.url; - [provider, wallet, deployer] = setupDeployer(deployUrl, PRIVATE_KEY); - userWallet = Wallet.createRandom(); - console.log(`User wallet's address: ${userWallet.address}`); - userWallet = new Wallet(userWallet.privateKey, provider); - paymaster = await deployContract(deployer, "TimeBasedPaymaster", []); - greeter = await deployContract(deployer, "Greeter", ["Hi"]); - await fundAccount(wallet, paymaster.address, "3"); + // retrieve default signers + signers = await hre.ethers.getSigners(); + deployer = signers[0]; + provider = hre.ethers.provider; + + // setup new empty wallet + randomWallet = Wallet.createRandom(); + emptyWallet = new Wallet(randomWallet.privateKey, hre.ethers.provider); + + // deploy contracts + paymaster = await deployContract("TimeBasedPaymaster", []); + greeter = await deployContract("Greeter", ["Hi"]); + paymasterAddress = await paymaster.getAddress(); + + await fundAccount(deployer, paymasterAddress, "3"); }); async function executeGreetingTransaction(user: Wallet) { const gasPrice = await provider.getGasPrice(); - const paymasterParams = utils.getPaymasterParams(paymaster.address, { + const paymasterParams = utils.getPaymasterParams(paymasterAddress, { type: "General", innerInput: new Uint8Array(), }); @@ -43,7 +46,7 @@ describe("TimeBasedPaymaster", function () { const setGreetingTx = await greeter .connect(user) .setGreeting("Hola, mundo!", { - maxPriorityFeePerGas: ethers.BigNumber.from(0), + maxPriorityFeePerGas: 0n, maxFeePerGas: gasPrice, gasLimit: 6000000, customData: { @@ -58,10 +61,20 @@ describe("TimeBasedPaymaster", function () { it("should fail due to Paymaster validation error outside the time window", async function () { // Arrange let errorOccurred = false; + const currentDate = new Date(); + currentDate.setUTCHours(10); + currentDate.setUTCMinutes(1); + currentDate.setUTCSeconds(0); + currentDate.setUTCMilliseconds(0); + const targetTime = Math.floor(currentDate.getTime() / 1000); + const newTimestampHex = `0x${targetTime.toString(16)}`; + + await provider.send("evm_setNextBlockTimestamp", [newTimestampHex]); + await provider.send("evm_mine", []); // Act try { - await executeGreetingTransaction(wallet); + await executeGreetingTransaction(emptyWallet); } catch (error) { errorOccurred = true; expect(error.message).to.include("Paymaster validation error"); @@ -74,17 +87,20 @@ describe("TimeBasedPaymaster", function () { // Arrange const currentDate = new Date(); currentDate.setUTCHours(14); - currentDate.setUTCMinutes(1); + currentDate.setUTCMinutes(2); currentDate.setUTCSeconds(0); currentDate.setUTCMilliseconds(0); const targetTime = Math.floor(currentDate.getTime() / 1000); - await provider.send("evm_setNextBlockTimestamp", [targetTime]); + const newTimestampHex = `0x${targetTime.toString(16)}`; + + await provider.send("evm_setNextBlockTimestamp", [newTimestampHex]); + await provider.send("evm_mine", []); // Act - const initialBalance = await userWallet.getBalance(); - await executeGreetingTransaction(userWallet); + const initialBalance = await provider.getBalance(emptyWallet.address); + await executeGreetingTransaction(emptyWallet); await provider.send("evm_mine", []); - const newBalance = await userWallet.getBalance(); + const newBalance = await provider.getBalance(emptyWallet.address); // Assert expect(newBalance.toString()).to.equal(initialBalance.toString()); diff --git a/contracts/test/utils.ts b/contracts/test/utils.ts deleted file mode 100644 index 0511320..0000000 --- a/contracts/test/utils.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Contract, Wallet, Provider } from "zksync-web3"; -import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; -import * as hre from "hardhat"; -import * as ethers from "ethers"; - -async function deployContract( - deployer: Deployer, - contract: string, - params: any[], -): Promise { - const artifact = await deployer.loadArtifact(contract); - - const deploymentFee = await deployer.estimateDeployFee(artifact, params); - const parsedFee = ethers.utils.formatEther(deploymentFee.toString()); - console.log(`${contract} deployment is estimated to cost ${parsedFee} ETH`); - - return await deployer.deploy(artifact, params); -} - -async function fundAccount(wallet: Wallet, address: string, amount: string) { - // fund account - await ( - await wallet.sendTransaction({ - to: address, - value: ethers.utils.parseEther(amount), - }) - ).wait(); - - console.log(`Account ${address} funded with ${amount}`); -} - -function setupDeployer( - url: string, - privateKey: string, -): [Provider, Wallet, Deployer] { - // setup deployer - const provider = new Provider(url); - const wallet = new Wallet(privateKey, provider); - const deployer = new Deployer(hre, wallet); - - return [provider, wallet, deployer]; -} - -export { deployContract, fundAccount, setupDeployer }; diff --git a/yarn.lock b/yarn.lock index 870071c..a034ad1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,44 @@ # yarn lockfile v1 +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + +"@aws-crypto/sha256-js@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz#02acd1a1fda92896fc5a28ec7c6e164644ea32fc" + integrity sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g== + dependencies: + "@aws-crypto/util" "^1.2.2" + "@aws-sdk/types" "^3.1.0" + tslib "^1.11.1" + +"@aws-crypto/util@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-1.2.2.tgz#b28f7897730eb6538b21c18bd4de22d0ea09003c" + integrity sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg== + dependencies: + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/types@^3.1.0": + version "3.679.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.679.0.tgz#3737bb0f190add9e788b838a24cd5d8106dbed4f" + integrity sha512-NwVq8YvInxQdJ47+zz4fH3BRRLC6lL+WLkvr242PVBbUOLRyK/lkwHlfiKUoeVIMyK5NF+up6TRg71t/8Bny6Q== + dependencies: + "@smithy/types" "^3.5.0" + tslib "^2.6.2" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + "@babel/runtime@^7.20.7": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" @@ -414,6 +452,18 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -454,45 +504,129 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@matterlabs/hardhat-zksync-deploy@^0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-deploy/-/hardhat-zksync-deploy-0.6.5.tgz#fe56bf30850e71c8d328ac1a06a100c1a0af6e3e" - integrity sha512-EZpvn8pDslfO3UA2obT8FOi5jsHhxYS5ndIR7tjL2zXKbvkbpoJR5rgKoGTJJm0riaCud674sQcxMOybVQ+2gg== - dependencies: - "@matterlabs/hardhat-zksync-solc" "0.4.2" - chalk "4.1.2" - ts-morph "^19.0.0" - -"@matterlabs/hardhat-zksync-solc@0.3.17": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-0.3.17.tgz#72f199544dc89b268d7bfc06d022a311042752fd" - integrity sha512-aZgQ0yfXW5xPkfuEH1d44ncWV4T2LzKZd0VVPo4PL5cUrYs2/II1FaEDp5zsf3FxOR1xT3mBsjuSrtJkk4AL8Q== +"@matterlabs/hardhat-zksync-deploy@^1.5.0", "@matterlabs/hardhat-zksync-deploy@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-deploy/-/hardhat-zksync-deploy-1.6.0.tgz#005a02dc63fe3d64e4892de485d7c72c75cc1f4a" + integrity sha512-yaOfhw7hmLOriBc+TnHrFOVKyi79XFqJN5D1Z4T6CadaSNLeq7pgBV81kkgVzaCJVoA/La2RGxPowsG7riZGbw== + dependencies: + "@matterlabs/hardhat-zksync-solc" "^1.2.5" + chai "^4.3.4" + chalk "^4.1.2" + fs-extra "^11.2.0" + glob "^10.4.1" + lodash "^4.17.21" + sinon "^18.0.0" + sinon-chai "^3.7.0" + ts-morph "^22.0.0" + +"@matterlabs/hardhat-zksync-ethers@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-ethers/-/hardhat-zksync-ethers-1.2.1.tgz#2df547789c1a7d5b50e9714071e1ef23503ab055" + integrity sha512-J/ZpGx2Ig9AUxsKbE4IqpQ6hetqO7RPRFaSrdIcEWzurSYWb40Ih/HkQD03f5cSAjzhQEKaNlyVofefqLGkdZg== dependencies: - "@nomiclabs/hardhat-docker" "^2.0.0" - chalk "4.1.2" - dockerode "^3.3.4" + "@matterlabs/hardhat-zksync-deploy" "^1.5.0" + "@matterlabs/hardhat-zksync-solc" "^1.2.4" + "@nomicfoundation/hardhat-ethers" "^3.0.6" + chai "^4.3.4" + chalk "^4.1.2" + hardhat "^2.22.5" -"@matterlabs/hardhat-zksync-solc@0.4.2", "@matterlabs/hardhat-zksync-solc@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-0.4.2.tgz#64121082e88c5ab22eb4e9594d120e504f6af499" - integrity sha512-6NFWPSZiOAoo7wNuhMg4ztj7mMEH+tLrx09WuCbcURrHPijj/KxYNsJD6Uw5lapKr7G8H7SQISGid1/MTXVmXQ== - dependencies: - "@nomiclabs/hardhat-docker" "^2.0.0" - chalk "4.1.2" - dockerode "^3.3.4" - fs-extra "^11.1.1" +"@matterlabs/hardhat-zksync-node@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-node/-/hardhat-zksync-node-1.2.0.tgz#800b24d33ca3a35c92afdc75d1ab05a6a957b15f" + integrity sha512-cTL8FrsolQEJMn2K25Nj/78rydRs/YiQyUu3Q1Rn5axrtVWXWATUP4z7hE5qH2lWk3VZcC9GYFrewP5c1Q+A9Q== + dependencies: + "@matterlabs/hardhat-zksync-solc" "^1.2.5" + axios "^1.7.2" + chai "^4.3.4" + chalk "^4.1.2" + debug "^4.3.5" + fs-extra "^11.2.0" + proxyquire "^2.1.3" + sinon "^18.0.0" + sinon-chai "^3.7.0" + source-map-support "^0.5.21" + undici "^6.18.2" + +"@matterlabs/hardhat-zksync-solc@^1.2.1", "@matterlabs/hardhat-zksync-solc@^1.2.4", "@matterlabs/hardhat-zksync-solc@^1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-1.2.5.tgz#fbeeabc3fea0dd232fa3c8cb31bd93c103eba11a" + integrity sha512-iZyznWl1Hoe/Z46hnUe1s2drBZBjJOS/eN+Ql2lIBX9B6NevBl9DYzkKzH5HEIMCLGnX9sWpRAJqUQJWy9UB6w== + dependencies: + "@nomiclabs/hardhat-docker" "^2.0.2" + chai "^4.3.4" + chalk "^4.1.2" + debug "^4.3.5" + dockerode "^4.0.2" + fs-extra "^11.2.0" proper-lockfile "^4.1.2" - semver "^7.5.1" + semver "^7.6.2" + sinon "^18.0.0" + sinon-chai "^3.7.0" + undici "^6.18.2" + +"@matterlabs/hardhat-zksync-upgradable@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-upgradable/-/hardhat-zksync-upgradable-1.7.0.tgz#4e9a0e1db0784957e5696c9563de40294c262cda" + integrity sha512-ycBp/W/Xss5VWNBbpQyJnxUmkQrZ6ouYNVaKShB+L4hRrwXmM8bjh08JR8tZu/mZc9XcGtTYRP+7qS1yvqm2Tw== + dependencies: + "@matterlabs/hardhat-zksync-deploy" "^1.5.0" + "@matterlabs/hardhat-zksync-ethers" "^1.2.1" + "@matterlabs/hardhat-zksync-solc" "^1.2.5" + "@openzeppelin/contracts-hardhat-zksync-upgradable" "npm:@openzeppelin/contracts@^5.0.2" + "@openzeppelin/defender-sdk-base-client" "^1.10.0" + "@openzeppelin/defender-sdk-deploy-client" "^1.10.0" + "@openzeppelin/defender-sdk-network-client" "^1.10.0" + "@openzeppelin/hardhat-upgrades" "^3.2.1" + "@openzeppelin/upgrades-core" "^1.37.0" + chalk "^4.1.2" + compare-versions "^6.1.0" + ethereumjs-util "^7.1.5" + ethers "^6.12.2" + fs-extra "^11.2.0" + hardhat "^2.22.5" + proper-lockfile "^4.1.2" + semver "^7.6.2" + solidity-ast "^0.4.56" + zksync-ethers "^6.11.2" -"@matterlabs/hardhat-zksync-verify@^0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-verify/-/hardhat-zksync-verify-0.1.8.tgz#0f975bb6354c8762e6d2f5b683453e3dc11dbbab" - integrity sha512-Ss8smBeX/h58NOaGQwQCGdYjkcQE9C0BX+iak5fWt49E58mDunnMsVhVogkWqO1QWq0LsdKLAuQO3blbvgVzFQ== +"@matterlabs/hardhat-zksync-verify@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-verify/-/hardhat-zksync-verify-1.6.0.tgz#701ea2812c3a554bcc72e04e23a4af4b2ad0709c" + integrity sha512-RsWlQbI23BDXMsxTtvHXpzx1dBotI2p2trvdG+r1uN/KAmMJBOKIqxce2UNXl8skd5Gtysa4GPjXEp4yaf2KrA== dependencies: - "@matterlabs/hardhat-zksync-solc" "0.3.17" - axios "^1.4.0" - chalk "4.1.2" - dockerode "^3.3.4" + "@ethersproject/abi" "^5.7.0" + "@ethersproject/address" "5.7.0" + "@matterlabs/hardhat-zksync-solc" "^1.2.1" + "@nomicfoundation/hardhat-verify" "^2.0.8" + axios "^1.7.2" + cbor "^9.0.2" + chai "^4.3.4" + chalk "^4.1.2" + debug "^4.3.5" + semver "^7.6.2" + sinon "^18.0.0" + sinon-chai "^3.7.0" + +"@matterlabs/hardhat-zksync@^1.2.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync/-/hardhat-zksync-1.3.0.tgz#d40d3e0bc8b096ef003a52d1142ae4bea61a164a" + integrity sha512-iPnlvrEW5+Fm6tB+mt1KlbScG9qLWmtWWZAj812unLqdWRe/IEKf5b+m4/7lTCnnAH5rML/sQ5Xz7KpG/BNckg== + dependencies: + "@matterlabs/hardhat-zksync-deploy" "^1.6.0" + "@matterlabs/hardhat-zksync-ethers" "^1.2.1" + "@matterlabs/hardhat-zksync-node" "^1.2.0" + "@matterlabs/hardhat-zksync-solc" "^1.2.5" + "@matterlabs/hardhat-zksync-upgradable" "^1.7.0" + "@matterlabs/hardhat-zksync-verify" "^1.6.0" + "@nomicfoundation/hardhat-verify" "^2.0.0" + "@openzeppelin/upgrades-core" "^1.37.0" + chai "^4.3.4" + ethers "^6.12.2" + hardhat "^2.22.5" + sinon "^18.0.0" + sinon-chai "^3.7.0" + zksync-ethers "^6.11.2" "@matterlabs/zksync-contracts@^0.6.1": version "0.6.1" @@ -567,11 +701,23 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.3.0.tgz#db7b55fee834dc8c2c484c696469e65bae2ee770" integrity sha512-Reer6rkLLcoOvB0dd66+Y7WrWVFH7sEEkF/4bJCIfsSKnTStTYaHtwIJAwbqnt9I392Tqvku0KkoqZOryWV9LQ== +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + "@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + "@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" @@ -598,137 +744,166 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/ethereumjs-block@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz#fdd5c045e7baa5169abeed0e1202bf94e4481c49" - integrity sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-blockchain@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz#1a8c243a46d4d3691631f139bfb3a4a157187b0c" - integrity sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw== - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-ethash" "^2.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - abstract-level "^1.0.3" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - level "^8.0.0" - lru-cache "^5.1.1" - memory-level "^1.0.0" - -"@nomicfoundation/ethereumjs-common@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz#f6bcc7753994555e49ab3aa517fc8bcf89c280b9" - integrity sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA== - dependencies: - "@nomicfoundation/ethereumjs-util" "^8.0.0" - crc-32 "^1.2.0" - -"@nomicfoundation/ethereumjs-ethash@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz#11539c32fe0990e1122ff987d1b84cfa34774e81" - integrity sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew== - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - abstract-level "^1.0.3" - bigint-crypto-utils "^3.0.23" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-evm@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz#99cd173c03b59107c156a69c5e215409098a370b" - integrity sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/ethereumjs-rlp@^4.0.0", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz#d9a9c5f0f10310c8849b6525101de455a53e771d" - integrity sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw== - -"@nomicfoundation/ethereumjs-statemanager@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz#14a9d4e1c828230368f7ab520c144c34d8721e4b" - integrity sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - debug "^4.3.3" +"@nomicfoundation/edr-darwin-arm64@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.4.tgz#6eaa64a6ea5201e4c92b121f2b7fd197b26e450a" + integrity sha512-QNQErISLgssV9+qia8sIjRANqtbW8snSDvjspixT/kSQ5ZSGxxctTg7x72wPSrcu8+EBEveIe5uqENIp5GH8HQ== + +"@nomicfoundation/edr-darwin-x64@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.4.tgz#d15ca89e9deef7d0a710cf90e79f3cc270a5a999" + integrity sha512-cjVmREiwByyc9+oGfvAh49IAw+oVJHF9WWYRD+Tm/ZlSpnEVWxrGNBak2bd/JSYjn+mZE7gmWS4SMRi4nKaLUg== + +"@nomicfoundation/edr-linux-arm64-gnu@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.4.tgz#e73c41ca015dfddb5f4cb6cd3d9b2cbe5cc28989" + integrity sha512-96o9kRIVD6W5VkgKvUOGpWyUGInVQ5BRlME2Fa36YoNsRQMaKtmYJEU0ACosYES6ZTpYC8U5sjMulvPtVoEfOA== + +"@nomicfoundation/edr-linux-arm64-musl@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.4.tgz#90906f733e4ad26657baeb22d28855d934ab7541" + integrity sha512-+JVEW9e5plHrUfQlSgkEj/UONrIU6rADTEk+Yp9pbe+mzNkJdfJYhs5JYiLQRP4OjxH4QOrXI97bKU6FcEbt5Q== + +"@nomicfoundation/edr-linux-x64-gnu@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.4.tgz#11b8bd73df145a192e5a08199e5e81995fcde502" + integrity sha512-nzYWW+fO3EZItOeP4CrdMgDXfaGBIBkKg0Y/7ySpUxLqzut40O4Mb0/+quqLAFkacUSWMlFp8nsmypJfOH5zoA== + +"@nomicfoundation/edr-linux-x64-musl@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.4.tgz#a34b9a2c9e34853207824dc81622668a069ca642" + integrity sha512-QFRoE9qSQ2boRrVeQ1HdzU+XN7NUgwZ1SIy5DQt4d7jCP+5qTNsq8LBNcqhRBOATgO63nsweNUhxX/Suj5r1Sw== + +"@nomicfoundation/edr-win32-x64-msvc@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.4.tgz#ca035c6f66ae9f88fa3ef123a1f3a2099cce7a5a" + integrity sha512-2yopjelNkkCvIjUgBGhrn153IBPLwnsDeNiq6oA0WkeM8tGmQi4td+PGi9jAriUDAkc59Yoi2q9hYA6efiY7Zw== + +"@nomicfoundation/edr@^0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.6.4.tgz#1cd336c46a60f5af774e6cf0f1943f49f63dded6" + integrity sha512-YgrSuT3yo5ZQkbvBGqQ7hG+RDvz3YygSkddg4tb1Z0Y6pLXFzwrcEwWaJCFAVeeZxdxGfCgGMUYgRVneK+WXkw== + dependencies: + "@nomicfoundation/edr-darwin-arm64" "0.6.4" + "@nomicfoundation/edr-darwin-x64" "0.6.4" + "@nomicfoundation/edr-linux-arm64-gnu" "0.6.4" + "@nomicfoundation/edr-linux-arm64-musl" "0.6.4" + "@nomicfoundation/edr-linux-x64-gnu" "0.6.4" + "@nomicfoundation/edr-linux-x64-musl" "0.6.4" + "@nomicfoundation/edr-win32-x64-msvc" "0.6.4" + +"@nomicfoundation/ethereumjs-common@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb" + integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.4" + +"@nomicfoundation/ethereumjs-rlp@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" + integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== + +"@nomicfoundation/ethereumjs-tx@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" + integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" -"@nomicfoundation/ethereumjs-trie@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz#dcfbe3be53a94bc061c9767a396c16702bc2f5b7" - integrity sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A== +"@nomicfoundation/ethereumjs-util@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38" + integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q== dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" ethereum-cryptography "0.1.3" - readable-stream "^3.6.0" -"@nomicfoundation/ethereumjs-tx@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz#59dc7452b0862b30342966f7052ab9a1f7802f52" - integrity sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w== +"@nomicfoundation/hardhat-ethers@^3.0.6": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.8.tgz#af078f566373abeb77e11cbe69fe3dd47f8bfc27" + integrity sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA== dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - ethereum-cryptography "0.1.3" + debug "^4.1.1" + lodash.isequal "^4.5.0" -"@nomicfoundation/ethereumjs-util@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz#deb2b15d2c308a731e82977aefc4e61ca0ece6c5" - integrity sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A== +"@nomicfoundation/hardhat-verify@^2.0.0", "@nomicfoundation/hardhat-verify@^2.0.8": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.11.tgz#4ce12b592e01ee93a81933924609c233ed00d951" + integrity sha512-lGIo4dNjVQFdsiEgZp3KP6ntLiF7xJEJsbNHfSyIiFCyI0Yv0518ElsFtMC5uCuHEChiBBMrib9jWQvHHT+X3Q== dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" - ethereum-cryptography "0.1.3" + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^8.1.0" + chalk "^2.4.2" + debug "^4.1.1" + lodash.clonedeep "^4.5.0" + semver "^6.3.0" + table "^6.8.0" + undici "^5.14.0" -"@nomicfoundation/ethereumjs-vm@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz#2bb50d332bf41790b01a3767ffec3987585d1de6" - integrity sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w== - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-evm" "^1.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" +"@nomicfoundation/slang-darwin-arm64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.17.0.tgz#8cded3c24322624e3b6618760caba8e840bd1c1d" + integrity sha512-O0q94EUtoWy9A5kOTOa9/khtxXDYnLqmuda9pQELurSiwbQEVCPQL8kb34VbOW+ifdre66JM/05Xw9JWhIZ9sA== + +"@nomicfoundation/slang-darwin-x64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.17.0.tgz#6ebeb33a2ced89fc6023f6cda4af96403486038a" + integrity sha512-IaDbHzvT08sBK2HyGzonWhq1uu8IxdjmTqAWHr25Oh/PYnamdi8u4qchZXXYKz/DHLoYN3vIpBXoqLQIomhD/g== + +"@nomicfoundation/slang-linux-arm64-gnu@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.17.0.tgz#41c7e57a9b1a3aee6911f0cab22e683c149fb470" + integrity sha512-Lj4anvOsQZxs1SycG8VyT2Rl2oqIhyLSUCgGepTt3CiJ/bM+8r8bLJIgh8vKkki4BWz49YsYIgaJB2IPv8FFTw== + +"@nomicfoundation/slang-linux-arm64-musl@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.17.0.tgz#9c4b51689274ae75c2c8a4cddd2e1cc0a79c191d" + integrity sha512-/xkTCa9d5SIWUBQE3BmLqDFfJRr4yUBwbl4ynPiGUpRXrD69cs6pWKkwjwz/FdBpXqVo36I+zY95qzoTj/YhOA== + +"@nomicfoundation/slang-linux-x64-gnu@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.17.0.tgz#c3a3b6a7b775fc617832958d10e6664bf86d39d0" + integrity sha512-oe5IO5vntOqYvTd67deCHPIWuSuWm6aYtT2/0Kqz2/VLtGz4ClEulBSRwfnNzBVtw2nksWipE1w8BzhImI7Syg== + +"@nomicfoundation/slang-linux-x64-musl@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.17.0.tgz#725118ff99a7217b9f1d1bd84411d9442084077d" + integrity sha512-PpYCI5K/kgLAMXaPY0V4VST5gCDprEOh7z/47tbI8kJQumI5odjsj/Cs8MpTo7/uRH6flKYbVNgUzcocWVYrAQ== + +"@nomicfoundation/slang-win32-arm64-msvc@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.17.0.tgz#9c8bc4ccf21eaaac0cfcb6d3954ede4e2dea4c02" + integrity sha512-u/Mkf7OjokdBilP7QOJj6QYJU4/mjkbKnTX21wLyCIzeVWS7yafRPYpBycKIBj2pRRZ6ceAY5EqRpb0aiCq+0Q== + +"@nomicfoundation/slang-win32-ia32-msvc@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.17.0.tgz#3fc5d00a3f8c1d85a5e94146af78a5526a4f3d27" + integrity sha512-XJBVQfNnZQUv0tP2JSJ573S+pmgrLWgqSZOGaMllnB/TL1gRci4Z7dYRJUF2s82GlRJE+FHSI2Ro6JISKmlXCg== + +"@nomicfoundation/slang-win32-x64-msvc@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.17.0.tgz#f6a5e3250fa07cbda49151edeb80f09090e5b71a" + integrity sha512-zPGsAeiTfqfPNYHD8BfrahQmYzA78ZraoHKTGraq/1xwJwzBK4bu/NtvVA4pJjBV+B4L6DCxVhSbpn40q26JQA== + +"@nomicfoundation/slang@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang/-/slang-0.17.0.tgz#d9c25cd711ebf3490c9d0c99e9b4ca2481341a6b" + integrity sha512-1GlkGRcGpVnjFw9Z1vvDKOKo2mzparFt7qrl2pDxWp+jrVtlvej98yCMX52pVyrYE7ZeOSZFnx/DtsSgoukStQ== + dependencies: + "@nomicfoundation/slang-darwin-arm64" "0.17.0" + "@nomicfoundation/slang-darwin-x64" "0.17.0" + "@nomicfoundation/slang-linux-arm64-gnu" "0.17.0" + "@nomicfoundation/slang-linux-arm64-musl" "0.17.0" + "@nomicfoundation/slang-linux-x64-gnu" "0.17.0" + "@nomicfoundation/slang-linux-x64-musl" "0.17.0" + "@nomicfoundation/slang-win32-arm64-msvc" "0.17.0" + "@nomicfoundation/slang-win32-ia32-msvc" "0.17.0" + "@nomicfoundation/slang-win32-x64-msvc" "0.17.0" "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.0": version "0.1.0" @@ -796,7 +971,7 @@ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.0" "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.0" -"@nomiclabs/hardhat-docker@^2.0.0": +"@nomiclabs/hardhat-docker@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-docker/-/hardhat-docker-2.0.2.tgz#ae964be17951275a55859ff7358e9e7c77448846" integrity sha512-XgGEpRT3wlA1VslyB57zyAHV+oll8KnV1TjwnxxC1tpAL04/lbdwpdO5KxInVN8irMSepqFpsiSkqlcnvbE7Ng== @@ -821,11 +996,78 @@ table "^6.8.0" undici "^5.14.0" +"@openzeppelin/contracts-hardhat-zksync-upgradable@npm:@openzeppelin/contracts@^5.0.2": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.1.0.tgz#4e61162f2a2bf414c4e10c45eca98ce5f1aadbd4" + integrity sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA== + "@openzeppelin/contracts@^4.9.1": version "4.9.1" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.1.tgz#afa804d2c68398704b0175acc94d91a54f203645" integrity sha512-aLDTLu/If1qYIFW5g4ZibuQaUsFGWQPBq1mZKp/txaebUnGHDmmiBhRLY1tDNedN0m+fJtKZ1zAODS9Yk+V6uA== +"@openzeppelin/defender-sdk-base-client@^1.10.0", "@openzeppelin/defender-sdk-base-client@^1.14.4", "@openzeppelin/defender-sdk-base-client@^1.15.0": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.15.0.tgz#5c6af6929c399dd7ef9ca1eb4ca042ae7e772367" + integrity sha512-nuf/xegMIuKCO0hMrxI1KQKTzQw1iCl/9kew2nJM9MrFIohhfEXItc5rbJRoV/jehmK/Jhi9ATF9OHH09StEsQ== + dependencies: + amazon-cognito-identity-js "^6.3.6" + async-retry "^1.3.3" + +"@openzeppelin/defender-sdk-deploy-client@^1.10.0", "@openzeppelin/defender-sdk-deploy-client@^1.14.4": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-1.15.0.tgz#affbeb93bf633ab9914ae7ca6326ff9dcdbbb670" + integrity sha512-2ODMN4j5pPYWyIOvA/zRQmJ0tJyqi6NV3S/PyvufBXa3oj/MDnVO5bMGSQFH0M2VE3bg+i/rcUb0hdbX9Rtm5Q== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^1.15.0" + axios "^1.7.2" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-network-client@^1.10.0", "@openzeppelin/defender-sdk-network-client@^1.14.4": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-1.15.0.tgz#43eb2bb06fa69a127305f073089fa3201a65367c" + integrity sha512-tNynCqFB1XYancq/8yGuj0HCSIyNLSRSuH53Hp2Tl+DpM7W5vIkzSRfvJJxC+8Sld83bVavyNJzTN9xid992Ag== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^1.15.0" + axios "^1.7.2" + lodash "^4.17.21" + +"@openzeppelin/hardhat-upgrades@^3.2.1": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.5.0.tgz#90ed0508fed8415b7fa9ee1c04ade8ec57091d46" + integrity sha512-Ju/JnT7NRiOMi5m5Y0dGiz37d8wnjVBep1v5Vr7+6+MFNuQa1yddUEVWhWhoEw4udI3/mYwyw4Sfz3sq7vhicQ== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^1.14.4" + "@openzeppelin/defender-sdk-deploy-client" "^1.14.4" + "@openzeppelin/defender-sdk-network-client" "^1.14.4" + "@openzeppelin/upgrades-core" "^1.40.0" + chalk "^4.1.0" + debug "^4.1.1" + ethereumjs-util "^7.1.5" + proper-lockfile "^4.1.1" + undici "^6.11.1" + +"@openzeppelin/upgrades-core@^1.37.0", "@openzeppelin/upgrades-core@^1.40.0": + version "1.40.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.40.0.tgz#f01647afb99b46356b3e7b98e3b2c7f864d85add" + integrity sha512-4bPSXdEqHsNRL5T1ybPLneWGYjzGl6XWGWkv7aUoFFgz8mOdarstRBX1Wi4XJFw6IeHPUI7mMSQr2jdz8Y2ypQ== + dependencies: + "@nomicfoundation/slang" "^0.17.0" + cbor "^9.0.0" + chalk "^4.1.0" + compare-versions "^6.0.0" + debug "^4.1.1" + ethereumjs-util "^7.0.3" + minimatch "^9.0.5" + minimist "^1.2.7" + proper-lockfile "^4.1.1" + solidity-ast "^0.4.51" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@pkgr/utils@^2.3.1": version "2.4.1" resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.1.tgz#adf291d0357834c410ce80af16e711b56c7b1cd3" @@ -933,6 +1175,48 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" +"@sinonjs/commons@^3.0.0", "@sinonjs/commons@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@11.2.2": + version "11.2.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz#50063cc3574f4a27bd8453180a04171c85cc9699" + integrity sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@sinonjs/fake-timers@^13.0.1": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-13.0.4.tgz#cacb89257e650f3214f9da5d9236f72c9658a607" + integrity sha512-wpUq+QiKxrWk7U2pdvNSY9fNX62/k+7eEdlQMO0A3rU8tQ+vvzY/WzBhMz+GbQlATXZlXWYQqFWNFcn1SVvThA== + dependencies: + "@sinonjs/commons" "^3.0.1" + +"@sinonjs/samsam@^8.0.0": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-8.0.2.tgz#e4386bf668ff36c95949e55a38dc5f5892fc2689" + integrity sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw== + dependencies: + "@sinonjs/commons" "^3.0.1" + lodash.get "^4.4.2" + type-detect "^4.1.0" + +"@sinonjs/text-encoding@^0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz#282046f03e886e352b2d5f5da5eb755e01457f3f" + integrity sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA== + +"@smithy/types@^3.5.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.6.0.tgz#03a52bfd62ee4b7b2a1842c8ae3ada7a0a5ff3a4" + integrity sha512-8VXK/KzOHefoC65yRgCn5vG1cysPJjHnOVt9d0ybFQSmJgQj152vMn4EkYhGuaOmnnZvCPav/KnYyE6/KsNZ2w== + dependencies: + tslib "^2.6.2" + "@swc/helpers@0.4.14": version "0.4.14" resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" @@ -940,14 +1224,14 @@ dependencies: tslib "^2.4.0" -"@ts-morph/common@~0.20.0": - version "0.20.0" - resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.20.0.tgz#3f161996b085ba4519731e4d24c35f6cba5b80af" - integrity sha512-7uKjByfbPpwuzkstL3L5MQyuXPSKdoNG93Fmi2JoDcTf3pEP731JdRFAduRVkOs8oqxPsXKA+ScrWkdQ8t/I+Q== +"@ts-morph/common@~0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.23.0.tgz#bd4ddbd3f484f29476c8bd985491592ae5fc147e" + integrity sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA== dependencies: - fast-glob "^3.2.12" - minimatch "^7.4.3" - mkdirp "^2.1.6" + fast-glob "^3.3.2" + minimatch "^9.0.3" + mkdirp "^3.0.1" path-browserify "^1.0.1" "@tsconfig/node10@^1.0.7": @@ -970,11 +1254,6 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== -"@types/async-eventemitter@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" - integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== - "@types/bn.js@^4.11.3": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" @@ -1014,6 +1293,13 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.13.0.tgz#0400d1e6ce87e9d3032c19eb6c58205b0d3f7850" integrity sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg== +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" + "@types/pbkdf2@^3.0.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" @@ -1080,26 +1366,6 @@ JSONStream@1.3.2: jsonparse "^1.2.0" through ">=2.2.7 <3" -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" - integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== - dependencies: - buffer "^6.0.3" - catering "^2.1.0" - is-buffer "^2.0.5" - level-supports "^4.0.0" - level-transcoder "^1.0.1" - module-error "^1.0.1" - queue-microtask "^1.2.3" - acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -1130,6 +1396,11 @@ aes-js@3.0.0: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -1165,6 +1436,24 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" +amazon-cognito-identity-js@^6.3.6: + version "6.3.12" + resolved "https://registry.yarnpkg.com/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.12.tgz#af73df033094ad4c679c19cf6122b90058021619" + integrity sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg== + dependencies: + "@aws-crypto/sha256-js" "1.2.2" + buffer "4.9.2" + fast-base64-decode "^1.0.0" + isomorphic-unfetch "^3.0.0" + js-cookie "^2.2.1" + +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -1187,6 +1476,11 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -1201,6 +1495,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -1291,7 +1590,7 @@ array.prototype.tosorted@^1.1.1: es-shim-unscopables "^1.0.0" get-intrinsic "^1.1.3" -asn1@^0.2.4: +asn1@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== @@ -1313,19 +1612,12 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-eventemitter@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== +async-retry@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== dependencies: - async "^2.4.0" - -async@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" + retry "0.13.1" asynckit@^0.4.0: version "0.4.0" @@ -1354,12 +1646,12 @@ axe-core@^4.6.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== -axios@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" - integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== +axios@^1.7.2: + version "1.7.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" + integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -1382,7 +1674,7 @@ base-x@^3.0.2: dependencies: safe-buffer "^5.0.1" -base64-js@^1.3.1: +base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -1404,18 +1696,6 @@ big-integer@^1.6.44: resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== -bigint-crypto-utils@^3.0.23: - version "3.1.8" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.1.8.tgz#e2e0f40cf45488f9d7f0e32ff84152aa73819d5d" - integrity sha512-+VMV9Laq8pXLBKKKK49nOoq9bfR3j7NNQAtbA617a4nw9bVLo8rsqkKMBgM2AJWlNX9fEIyYaYX+d0laqYV4tw== - dependencies: - bigint-mod-arith "^3.1.0" - -bigint-mod-arith@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz#658e416bc593a463d97b59766226d0a3021a76b1" - integrity sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ== - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -1448,11 +1728,25 @@ bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.2.0, bn.js@^5.2.1: +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + bplist-parser@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" @@ -1487,16 +1781,6 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browser-level@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" - integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.1" - module-error "^1.0.2" - run-parallel-limit "^1.1.0" - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -1568,6 +1852,15 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -1576,18 +1869,10 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -buildcheck@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.3.tgz#70451897a95d80f7807e68fc412eb2e7e35ff4d5" - integrity sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA== +buildcheck@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238" + integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A== bundle-name@^3.0.0: version "3.0.0" @@ -1626,7 +1911,7 @@ camelcase-css@^2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== -camelcase@^6.0.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== @@ -1636,11 +1921,6 @@ caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.300015 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001508.tgz#4461bbc895c692a96da399639cc1e146e7302a33" integrity sha512-sdQZOJdmt3GJs1UMNpCCCyeuS2IEGLXnHyAo9yIO5JJDjbjoVRij4M1qep6P6gFpptD1PqIYgzM+gwJbOi92mw== -catering@^2.1.0, catering@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - cbor@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" @@ -1648,6 +1928,26 @@ cbor@^8.1.0: dependencies: nofilter "^3.1.0" +cbor@^9.0.0, cbor@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-9.0.2.tgz#536b4f2d544411e70ec2b19a2453f10f83cd9fdb" + integrity sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ== + dependencies: + nofilter "^3.1.0" + +chai@^4.3.4: + version "4.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.1.0" + chai@^4.3.7: version "4.3.7" resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" @@ -1661,14 +1961,6 @@ chai@^4.3.7: pathval "^1.1.1" type-detect "^4.0.5" -chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1678,12 +1970,27 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== -chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.3: +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@3.5.3, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -1698,6 +2005,13 @@ chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +chokidar@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.1.tgz#4a6dff66798fb0f72a94f616abbd7e1a19f31d41" + integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== + dependencies: + readdirp "^4.0.1" + chownr@^1.0.1, chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -1716,22 +2030,16 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -classic-level@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.2.0.tgz#2d52bdec8e7a27f534e67fdeb890abef3e643c27" - integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.0" - module-error "^1.0.1" - napi-macros "~2.0.0" - node-gyp-build "^4.3.0" - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + client-only@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" @@ -1746,10 +2054,10 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -code-block-writer@^12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-12.0.0.tgz#4dd58946eb4234105aff7f0035977b2afdc2a770" - integrity sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w== +code-block-writer@^13.0.1: + version "13.0.3" + resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-13.0.3.tgz#90f8a84763a5012da7af61319dd638655ae90b5b" + integrity sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg== color-convert@^1.9.0: version "1.9.3" @@ -1787,16 +2095,21 @@ command-exists@^1.2.8: resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== -commander@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^8.1.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +compare-versions@^6.0.0, compare-versions@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" + integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1822,18 +2135,13 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cpu-features@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.4.tgz#0023475bb4f4c525869c162e4108099e35bf19d8" - integrity sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A== +cpu-features@~0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.10.tgz#9aae536db2710c7254d7ed67cb3cbc7d29ad79c5" + integrity sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA== dependencies: - buildcheck "0.0.3" - nan "^2.15.0" - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + buildcheck "~0.0.6" + nan "^2.19.0" create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" @@ -1863,7 +2171,7 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1882,7 +2190,7 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== -debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1896,6 +2204,13 @@ debug@^3.2.6, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.5: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + decamelize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" @@ -1908,6 +2223,13 @@ deep-eql@^4.1.2: dependencies: type-detect "^4.0.0" +deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== + dependencies: + type-detect "^4.0.0" + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -1974,6 +2296,11 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -1996,15 +2323,15 @@ docker-modem@^1.0.8: readable-stream "~1.0.26-4" split-ca "^1.0.0" -docker-modem@^3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-3.0.6.tgz#8c76338641679e28ec2323abb65b3276fb1ce597" - integrity sha512-h0Ow21gclbYsZ3mkHDfsYNDqtRhXS8fXr51bU0qr1dxgTMJj0XufbzX+jhNOvA8KuEEzn6JbvLVhXyv+fny9Uw== +docker-modem@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-5.0.3.tgz#50c06f11285289f58112b5c4c4d89824541c41d0" + integrity sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg== dependencies: debug "^4.1.1" readable-stream "^3.5.0" split-ca "^1.0.1" - ssh2 "^1.11.0" + ssh2 "^1.15.0" dockerode@^2.5.8: version "2.5.8" @@ -2015,13 +2342,13 @@ dockerode@^2.5.8: docker-modem "^1.0.8" tar-fs "~1.16.3" -dockerode@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-3.3.4.tgz#875de614a1be797279caa9fe27e5637cf0e40548" - integrity sha512-3EUwuXnCU+RUlQEheDjmBE0B7q66PV9Rw5NiH1sXwINq0M9c5ERP9fxgkw36ZHOtzf4AGEEYySnkx/sACC9EgQ== +dockerode@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-4.0.2.tgz#dedc8529a1db3ac46d186f5912389899bc309f7d" + integrity sha512-9wM1BVpVMFr2Pw3eJNXrYYt6DT9k0xMcsSCjtPvyQ+xa1iPg/Mo3T/gUcwI0B2cczqCeCYRPF8yFYDwtFXT0+w== dependencies: "@balena/dockerignore" "^1.0.2" - docker-modem "^3.0.0" + docker-modem "^5.0.3" tar-fs "~2.0.1" doctrine@^2.1.0: @@ -2043,6 +2370,11 @@ dotenv@^16.0.3: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + electron-to-chromium@^1.4.431: version "1.4.441" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.441.tgz#94dd9c1cbf081d83f032a4f1cd9f787e21fc24ce" @@ -2436,6 +2768,17 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" +ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + ethers@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" @@ -2472,6 +2815,19 @@ ethers@^5.7.2: "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" +ethers@^6.12.2, ethers@^6.7.2: + version "6.13.4" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.4.tgz#bd3e1c3dc1e7dc8ce10f9ffb4ee40967a651b53c" + integrity sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "22.7.5" + aes-js "4.0.0-beta.5" + tslib "2.7.0" + ws "8.17.1" + ethjs-util@0.1.6, ethjs-util@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" @@ -2480,11 +2836,6 @@ ethjs-util@0.1.6, ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -2523,6 +2874,11 @@ execa@^7.1.1: signal-exit "^3.0.7" strip-final-newline "^3.0.0" +fast-base64-decode@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418" + integrity sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -2539,6 +2895,17 @@ fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -2563,6 +2930,14 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +fill-keys@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fill-keys/-/fill-keys-1.0.2.tgz#9a8fa36f4e8ad634e3bf6b4f3c8882551452eb20" + integrity sha512-tcgI872xXjwFF4xgQmLxi76GnwJG3g/3isB1l4/G5Z4zrbddGpBjqZCO9oEAcB5wX0Hj/5iQB3toxfO7in1hHA== + dependencies: + is-object "~1.0.1" + merge-descriptors "~1.0.0" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -2603,11 +2978,16 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -follow-redirects@^1.12.1, follow-redirects@^1.15.0: +follow-redirects@^1.12.1: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -2615,6 +2995,14 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +foreground-child@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -2644,21 +3032,10 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== +fs-extra@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -2688,6 +3065,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + function.prototype.name@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" @@ -2698,11 +3080,6 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" @@ -2718,6 +3095,11 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + get-intrinsic@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" @@ -2807,6 +3189,18 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^10.4.1: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -2863,7 +3257,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -2878,33 +3272,27 @@ grapheme-splitter@^1.0.4: resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== -hardhat@^2.12.4: - version "2.12.6" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.12.6.tgz#ea3c058bbd81850867389d10f76037cfa52a0019" - integrity sha512-0Ent1O5DsPgvaVb5sxEgsQ3bJRt/Ex92tsoO+xjoNH2Qc4bFmhI5/CHVlFikulalxOPjNmw5XQ2vJFuVQFESAA== +hardhat@^2.16.0, hardhat@^2.22.5: + version "2.22.15" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.15.tgz#319b4948f875968fde3f0d09a7edfe74e16b1365" + integrity sha512-BpTGa9PE/sKAaHi4s/S1e9WGv63DR1m7Lzfd60C8gSEchDPfAJssVRSq0MZ2v2k76ig9m0kHAwVLf5teYwu/Mw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-evm" "^1.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@nomicfoundation/ethereumjs-vm" "^6.0.0" + "@nomicfoundation/edr" "^0.6.4" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" adm-zip "^0.4.16" aggregate-error "^3.0.0" ansi-escapes "^4.3.0" + boxen "^5.1.2" chalk "^2.4.2" - chokidar "^3.4.0" + chokidar "^4.0.0" ci-info "^2.0.0" debug "^4.1.1" enquirer "^2.3.0" @@ -2917,16 +3305,16 @@ hardhat@^2.12.4: glob "7.2.0" immutable "^4.0.0-rc.12" io-ts "1.10.4" + json-stream-stringify "^3.1.4" keccak "^3.0.2" lodash "^4.17.11" mnemonist "^0.38.0" mocha "^10.0.0" p-map "^4.0.0" - qs "^6.7.0" raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" - solc "0.7.3" + solc "0.8.26" source-map-support "^0.5.13" stacktrace-parser "^0.1.10" tsort "0.0.1" @@ -2997,6 +3385,13 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + he@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -3047,7 +3442,7 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.13, ieee754@^1.2.1: +ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -3140,11 +3535,6 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" @@ -3157,6 +3547,13 @@ is-core-module@^2.11.0, is-core-module@^2.9.0: dependencies: has "^1.0.3" +is-core-module@^2.13.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== + dependencies: + hasown "^2.0.2" + is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -3220,6 +3617,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-object@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" @@ -3304,7 +3706,7 @@ isarray@0.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== -isarray@~1.0.0: +isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== @@ -3314,11 +3716,33 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isomorphic-unfetch@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" + integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== + dependencies: + node-fetch "^2.6.1" + unfetch "^4.2.0" + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jiti@^1.17.2: version "1.18.2" resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd" integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== +js-cookie@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== + js-sdsl@^4.1.4: version "4.4.1" resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.1.tgz#9e3c7b566d8d9a7e1fe8fc26d00b5ab0f8918ab3" @@ -3356,6 +3780,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stream-stringify@^3.1.4: + version "3.1.6" + resolved "https://registry.yarnpkg.com/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz#ebe32193876fb99d4ec9f612389a8d8e2b5d54d4" + integrity sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog== + json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -3363,13 +3792,6 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -3399,6 +3821,11 @@ jsonparse@^1.2.0: array-includes "^3.1.5" object.assign "^4.1.3" +just-extend@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-6.2.0.tgz#b816abfb3d67ee860482e7401564672558163947" + integrity sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw== + keccak@^3.0.0, keccak@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" @@ -3408,13 +3835,6 @@ keccak@^3.0.0, keccak@^3.0.2: node-gyp-build "^4.2.0" readable-stream "^3.6.0" -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== - optionalDependencies: - graceful-fs "^4.1.9" - language-subtag-registry@~0.3.2: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" @@ -3427,27 +3847,6 @@ language-tags@=1.0.5: dependencies: language-subtag-registry "~0.3.2" -level-supports@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" - integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== - -level-transcoder@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" - integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== - dependencies: - buffer "^6.0.3" - module-error "^1.0.1" - -level@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" - integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== - dependencies: - browser-level "^1.0.1" - classic-level "^1.2.0" - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -3481,6 +3880,21 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -3491,7 +3905,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.11, lodash@^4.17.14: +lodash@^4.17.11, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3518,12 +3932,17 @@ loupe@^2.3.1: dependencies: get-func-name "^2.0.0" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== dependencies: - yallist "^3.0.2" + get-func-name "^2.0.1" + +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^6.0.0: version "6.0.0" @@ -3542,11 +3961,6 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -3556,20 +3970,16 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -memory-level@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" - integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== - dependencies: - abstract-level "^1.0.0" - functional-red-black-tree "^1.0.1" - module-error "^1.0.1" - memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== +merge-descriptors@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -3634,14 +4044,14 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^7.4.3: - version "7.4.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" - integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== +minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0: +minimist@^1.2.0, minimist@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -3651,6 +4061,11 @@ minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + mkdirp-classic@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" @@ -3663,10 +4078,10 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.6" -mkdirp@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" - integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== mnemonist@^0.38.0: version "0.38.5" @@ -3702,17 +4117,17 @@ mocha@^10.0.0, mocha@^10.2.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" -module-error@^1.0.1, module-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" - integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== +module-not-found-error@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/module-not-found-error/-/module-not-found-error-1.0.1.tgz#cf8b4ff4f29640674d6cdd02b0e3bc523c2bbdc0" + integrity sha512-pEk4ECWQXV6z2zjhRZUongnLJNUeGQJ3w6OQ5ctGwD+i5o93qjRQUk2Rt6VdNeu3sEP0AB4LcfvdebpxBRVr4g== ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -3726,10 +4141,10 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.15.0, nan@^2.16.0: - version "2.17.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" - integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== +nan@^2.19.0, nan@^2.20.0: + version "2.22.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.22.0.tgz#31bc433fc33213c97bad36404bb68063de604de3" + integrity sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw== nanoid@3.3.3: version "3.3.3" @@ -3741,11 +4156,6 @@ nanoid@^3.3.4, nanoid@^3.3.6: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -3778,6 +4188,17 @@ next@13.3.0: "@next/swc-win32-ia32-msvc" "13.3.0" "@next/swc-win32-x64-msvc" "13.3.0" +nise@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/nise/-/nise-6.1.1.tgz#78ea93cc49be122e44cb7c8fdf597b0e8778b64a" + integrity sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g== + dependencies: + "@sinonjs/commons" "^3.0.1" + "@sinonjs/fake-timers" "^13.0.1" + "@sinonjs/text-encoding" "^0.7.3" + just-extend "^6.2.0" + path-to-regexp "^8.1.0" + node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" @@ -3790,7 +4211,14 @@ node-fetch@^2.6.0: dependencies: whatwg-url "^5.0.0" -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: +node-fetch@^2.6.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@^4.2.0: version "4.6.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== @@ -3987,6 +4415,11 @@ p-try@^1.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -4029,6 +4462,19 @@ path-parse@^1.0.6, path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@^8.1.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz#73990cc29e57a3ff2a0d914095156df5db79e8b4" + integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -4165,7 +4611,7 @@ prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" -proper-lockfile@^4.1.2: +proper-lockfile@^4.1.1, proper-lockfile@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== @@ -4179,6 +4625,15 @@ proxy-from-env@^1.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== +proxyquire@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/proxyquire/-/proxyquire-2.1.3.tgz#2049a7eefa10a9a953346a18e54aab2b4268df39" + integrity sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg== + dependencies: + fill-keys "^1.0.2" + module-not-found-error "^1.0.1" + resolve "^1.11.1" + pump@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" @@ -4200,14 +4655,7 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -qs@^6.7.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -queue-microtask@^1.2.2, queue-microtask@^1.2.3: +queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== @@ -4298,6 +4746,11 @@ readable-stream@~1.0.26-4: isarray "0.0.1" string_decoder "~0.10.x" +readdirp@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" + integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -4324,7 +4777,7 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-from-string@^2.0.0, require-from-string@^2.0.2: +require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== @@ -4355,6 +4808,15 @@ resolve@^1.1.7, resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.11.1: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -4364,6 +4826,11 @@ resolve@^2.0.0-next.4: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -4374,13 +4841,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^2.2.8: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -4396,7 +4856,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.2.3: +rlp@^2.2.3, rlp@^2.2.4: version "2.2.7" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== @@ -4410,13 +4870,6 @@ run-applescript@^5.0.0: dependencies: execa "^5.0.0" -run-parallel-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" - integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== - dependencies: - queue-microtask "^1.2.2" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -4424,11 +4877,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -4491,12 +4939,10 @@ semver@^7.3.7: dependencies: lru-cache "^6.0.0" -semver@^7.5.1: - version "7.5.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" - integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== - dependencies: - lru-cache "^6.0.0" +semver@^7.6.2: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== serialize-javascript@6.0.0: version "6.0.0" @@ -4549,6 +4995,28 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sinon-chai@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.7.0.tgz#cfb7dec1c50990ed18c153f1840721cf13139783" + integrity sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g== + +sinon@^18.0.0: + version "18.0.1" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-18.0.1.tgz#464334cdfea2cddc5eda9a4ea7e2e3f0c7a91c5e" + integrity sha512-a2N2TDY1uGviajJ6r4D1CyRAkzE9NNVlYOV1wX5xQDuAk0ONgzgRl0EjCQuRCPxOwp13ghsMwt9Gdldujs39qw== + dependencies: + "@sinonjs/commons" "^3.0.1" + "@sinonjs/fake-timers" "11.2.2" + "@sinonjs/samsam" "^8.0.0" + diff "^5.2.0" + nise "^6.0.0" + supports-color "^7" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -4568,27 +5036,30 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -solc@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== +solc@0.8.26: + version "0.8.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.26.tgz#afc78078953f6ab3e727c338a2fefcd80dd5b01a" + integrity sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g== dependencies: command-exists "^1.2.8" - commander "3.0.2" + commander "^8.1.0" follow-redirects "^1.12.1" - fs-extra "^0.30.0" js-sha3 "0.8.0" memorystream "^0.3.1" - require-from-string "^2.0.0" semver "^5.5.0" tmp "0.0.33" +solidity-ast@^0.4.51, solidity-ast@^0.4.56: + version "0.4.59" + resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.59.tgz#290a2815aef70a61092591ab3e991da080ae5931" + integrity sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g== + source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-support@^0.5.13: +source-map-support@^0.5.13, source-map-support@^0.5.21: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -4606,16 +5077,16 @@ split-ca@^1.0.0, split-ca@^1.0.1: resolved "https://registry.yarnpkg.com/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6" integrity sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ== -ssh2@^1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.11.0.tgz#ce60186216971e12f6deb553dcf82322498fe2e4" - integrity sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw== +ssh2@^1.15.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.16.0.tgz#79221d40cbf4d03d07fe881149de0a9de928c9f0" + integrity sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg== dependencies: - asn1 "^0.2.4" + asn1 "^0.2.6" bcrypt-pbkdf "^1.0.2" optionalDependencies: - cpu-features "~0.0.4" - nan "^2.16.0" + cpu-features "~0.0.10" + nan "^2.20.0" stacktrace-parser@^0.1.10: version "0.1.10" @@ -4634,7 +5105,7 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4643,6 +5114,15 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string.prototype.matchall@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" @@ -4703,13 +5183,20 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -4771,7 +5258,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -4949,13 +5436,13 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -ts-morph@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-19.0.0.tgz#43e95fb0156c3fe3c77c814ac26b7d0be2f93169" - integrity sha512-D6qcpiJdn46tUqV45vr5UGM2dnIEuTGNxVhg0sk5NX11orcouwj6i1bMqZIz2mZTZB1Hcgy7C3oEVhAT+f6mbQ== +ts-morph@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-22.0.0.tgz#5532c592fb6dddae08846f12c9ab0fc590b1d42e" + integrity sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw== dependencies: - "@ts-morph/common" "~0.20.0" - code-block-writer "^12.0.0" + "@ts-morph/common" "~0.23.0" + code-block-writer "^13.0.1" ts-node@^10.9.1: version "10.9.1" @@ -4986,11 +5473,21 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1, tslib@^1.9.3: +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.3.1, tslib@^2.6.2: + version "2.8.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" + integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== + tslib@^2.4.0, tslib@^2.5.0: version "2.5.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" @@ -5030,11 +5527,16 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-detect@^4.0.0, type-detect@^4.0.5: +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -5079,6 +5581,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + undici@^5.14.0: version "5.18.0" resolved "https://registry.yarnpkg.com/undici/-/undici-5.18.0.tgz#e88a77a74d991a30701e9a6751e4193a26fabda9" @@ -5086,6 +5593,16 @@ undici@^5.14.0: dependencies: busboy "^1.6.0" +undici@^6.11.1, undici@^6.18.2: + version "6.20.1" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.20.1.tgz#fbb87b1e2b69d963ff2d5410a40ffb4c9e81b621" + integrity sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA== + +unfetch@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" + integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -5179,6 +5696,13 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -5189,7 +5713,7 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -5198,6 +5722,15 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -5208,6 +5741,11 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + ws@^7.4.6: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" @@ -5223,11 +5761,6 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -5281,6 +5814,11 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +zksync-ethers@^6.11.2, zksync-ethers@^6.14.3: + version "6.14.0" + resolved "https://registry.yarnpkg.com/zksync-ethers/-/zksync-ethers-6.14.0.tgz#44fd522eefa02008f2d8498756b883178ca13146" + integrity sha512-wP30kYCB45L8NNWChj+EWbN6lesecMGtVvoPpqPIoSsCLYDDSGCZ2snZ8zI9zAyOQ8AcVyvH8hjQScAJjpXtzg== + zksync-web3@^0.14.3: version "0.14.3" resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.14.3.tgz#64ac2a16d597464c3fc4ae07447a8007631c57c9"