From 232e71b737bad9b0573665a9a40d5437dd267048 Mon Sep 17 00:00:00 2001 From: Nicholas Rodrigues Lordello Date: Mon, 18 Mar 2024 15:28:11 +0100 Subject: [PATCH] Move 4337 Testing Utilies To Local Bundler Package (#315) This PR moves the TS testing utility code for 4337 local bundler tests into the package introduced in #314. This is done in an effort to avoid duplicating the `test/utils/e2e.ts` file that contains setup functions for the local bundler setup that gets deployed from the `safe-4337-local-bundler` package. --- .github/workflows/certora_4337.yml | 8 +- examples/4337-gas-metering/package.json | 3 +- modules/4337/package.json | 11 +- modules/4337/src/utils/safe.ts | 60 +- modules/4337/src/utils/userOp.ts | 21 +- modules/4337/test/e2e/4337NestedSafe.spec.ts | 4 +- modules/4337/test/e2e/LocalBundler.spec.ts | 2 +- .../4337/test/e2e/SingletonSigners.spec.ts | 3 +- modules/4337/test/e2e/UniqueSigner.spec.ts | 2 +- modules/4337/test/e2e/WebAuthnSigner.spec.ts | 2 +- .../test/e2e/WebAuthnSingletonSigner.spec.ts | 3 +- modules/4337/test/utils/encoding.ts | 16 + modules/allowances/package.json | 1 - modules/passkey/package.json | 9 +- .../passkey/test/4337/WebAuthnSigner.spec.ts | 9 +- modules/passkey/test/utils/e2e.ts | 56 - modules/passkey/test/utils/encoding.ts | 5 - .../test/{ => webauthn}/WebAuthnShim.spec.ts | 2 +- package-lock.json | 992 ++++++++---------- package.json | 5 +- packages/4337-local-bundler/package.json | 9 +- packages/4337-local-bundler/src/index.ts | 4 +- .../4337-local-bundler/src/testing.ts | 33 +- .../4337-local-bundler/src/types/hardhat.ts | 2 + packages/4337-provider/.eslintignore | 1 + packages/4337-provider/.gitignore | 1 + packages/4337-provider/README.md | 3 + packages/4337-provider/package.json | 16 + packages/4337-provider/src/index.ts | 74 ++ packages/4337-provider/tsconfig.json | 13 + 30 files changed, 610 insertions(+), 760 deletions(-) delete mode 100644 modules/passkey/test/utils/e2e.ts delete mode 100644 modules/passkey/test/utils/encoding.ts rename modules/passkey/test/{ => webauthn}/WebAuthnShim.spec.ts (98%) rename modules/4337/test/utils/e2e.ts => packages/4337-local-bundler/src/testing.ts (68%) create mode 100644 packages/4337-local-bundler/src/types/hardhat.ts create mode 100644 packages/4337-provider/.eslintignore create mode 100644 packages/4337-provider/.gitignore create mode 100644 packages/4337-provider/README.md create mode 100644 packages/4337-provider/package.json create mode 100644 packages/4337-provider/src/index.ts create mode 100644 packages/4337-provider/tsconfig.json diff --git a/.github/workflows/certora_4337.yml b/.github/workflows/certora_4337.yml index 349917c22..cb6f1c011 100644 --- a/.github/workflows/certora_4337.yml +++ b/.github/workflows/certora_4337.yml @@ -20,9 +20,6 @@ jobs: strategy: matrix: rule: ['verify4337Module.sh', 'verifyTransactionExecutionMethods.sh', 'verifyValidationData.sh'] - defaults: - run: - working-directory: ./modules/4337 steps: - uses: actions/checkout@v3 @@ -30,10 +27,6 @@ jobs: uses: actions/setup-python@v4 with: { python-version: 3.11 } - - name: Install java - uses: actions/setup-java@v3 - with: { java-version: '17', java-package: jre, distribution: semeru } - - name: Install certora cli run: pip install -Iv certora-cli==6.1.3 @@ -47,6 +40,7 @@ jobs: run: npm ci - name: Verify rule ${{ matrix.rule }} + working-directory: ./modules/4337 run: | echo "key length" ${#CERTORAKEY} chmod +x ./certora/scripts/${{ matrix.rule }} diff --git a/examples/4337-gas-metering/package.json b/examples/4337-gas-metering/package.json index 822429fe7..927337374 100644 --- a/examples/4337-gas-metering/package.json +++ b/examples/4337-gas-metering/package.json @@ -16,7 +16,7 @@ "alchemy:erc721": "tsx ./alchemy/alchemy.ts erc721", "alchemy:erc721:paymaster": "tsx ./alchemy/alchemy.ts erc721 paymaster=true", "alchemy": "tsx ./alchemy/alchemy.ts", - "build": "npx rimraf dist && tsc", + "build": "rimraf dist && tsc", "fmt": "prettier --ignore-path .gitignore --write .", "fmt:check": "prettier --check .", "lint": "eslint ./alchemy && eslint ./gelato && eslint ./pimlico && eslint ./utils", @@ -60,7 +60,6 @@ }, "devDependencies": { "@types/node": "20.11.18", - "rimraf": "^5.0.5", "tsx": "4.7.1", "typescript": "^5.3.3" } diff --git a/modules/4337/package.json b/modules/4337/package.json index c02830625..cec30279d 100644 --- a/modules/4337/package.json +++ b/modules/4337/package.json @@ -15,8 +15,8 @@ ], "scripts": { "build": "npm run build:sol && npm run build:ts", - "build:ts": "npx rimraf dist && tsc", - "build:sol": "npx rimraf build && hardhat compile", + "build:ts": "rimraf dist && tsc", + "build:sol": "rimraf build typechain-types && hardhat compile", "test": "hardhat test --deploy-fixture", "test:4337": "4337-local-bundler-test", "test:4337:upstream": "USE_UPSTREAM_BUNDLER=1 4337-local-bundler-test", @@ -31,9 +31,7 @@ "lint:ts": "eslint ./src --fix && eslint ./test --fix", "fmt": "prettier --write ./contracts/**/*.sol", "fmt:check": "prettier --check ./**/*.sol", - "prepack": "npm run build", - "prepublish": "npm run build", - "postinstall": "npm run build" + "prepare": "npm run build" }, "repository": { "type": "git", @@ -55,6 +53,7 @@ "@nomicfoundation/hardhat-toolbox": "^4.0.0", "@openzeppelin/contracts": "^5.0.2", "@safe-global/safe-4337-local-bundler": "^0.0.0", + "@safe-global/safe-4337-provider": "^0.0.0", "@simplewebauthn/server": "9.0.0", "@types/chai": "^4.3.11", "@types/mocha": "^10.0.6", @@ -75,7 +74,7 @@ }, "overrides": { "@safe-global/safe-contracts": { - "ethers": "^6.11.0" + "ethers": "^6.11.1" } }, "dependencies": { diff --git a/modules/4337/src/utils/safe.ts b/modules/4337/src/utils/safe.ts index b6d0fed16..ae0bd55b9 100644 --- a/modules/4337/src/utils/safe.ts +++ b/modules/4337/src/utils/safe.ts @@ -1,9 +1,12 @@ -import { AddressLike, JsonRpcProvider, Provider, Signer, ethers } from 'ethers' +import { MultiProvider4337, RpcProvider } from '@safe-global/safe-4337-provider' +import { Provider, Signer, ethers } from 'ethers' // Import from Safe contracts repo once it is upgraded to ethers v6 and can be installed via npm import { MetaTransaction, SafeSignature, SignedSafeTransaction, buildSignatureBytes } from './execution' import { PackedUserOperation, UserOperation, EIP712_SAFE_OPERATION_TYPE, packGasParameters, unpackUserOperation } from './userOp' +export { MultiProvider4337 } + const AddressOne = '0x0000000000000000000000000000000000000001' const INTERFACES = new ethers.Interface([ @@ -91,61 +94,6 @@ const actionCalldata = (action: MetaTransaction): string => { return INTERFACES.encodeFunctionData('executeUserOp', [action.to, action.value, action.data, action.operation]) } -export interface RpcProvider extends Provider { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - send(method: string, params: unknown[]): Promise -} - -export class MultiProvider4337 extends JsonRpcProvider { - generalProvider: RpcProvider - constructor(aaProviderUrl: string, generalProvider: RpcProvider) { - super(aaProviderUrl) - this.generalProvider = generalProvider - } - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - send(method: string, params: unknown[]): Promise { - if ( - [ - 'eth_supportedEntryPoints', - 'eth_estimateUserOperationGas', - 'eth_sendUserOperation', - 'eth_getUserOperationByHash', - 'eth_getUserOperationReceipt', - ].indexOf(method) >= 0 - ) { - return super.send(method, params) - } else { - return this.generalProvider.send(method, params) - } - } - - public async sendUserOperation(userOp: UserOperation, entryPoint: AddressLike): Promise { - const jsonUserOp = { - sender: ethers.getAddress(userOp.sender), - nonce: ethers.toBeHex(userOp.nonce), - callData: ethers.hexlify(userOp.callData), - callGasLimit: ethers.toBeHex(userOp.callGasLimit), - verificationGasLimit: ethers.toBeHex(userOp.verificationGasLimit), - preVerificationGas: ethers.toBeHex(userOp.preVerificationGas), - maxFeePerGas: ethers.toBeHex(userOp.maxFeePerGas), - maxPriorityFeePerGas: ethers.toBeHex(userOp.maxPriorityFeePerGas), - signature: ethers.hexlify(userOp.signature), - } as Record - if (userOp.factory) { - jsonUserOp.factory = ethers.getAddress(userOp.factory) - jsonUserOp.factoryData = ethers.hexlify(userOp.factoryData!) - } - if (userOp.paymaster) { - jsonUserOp.paymaster = ethers.getAddress(userOp.paymaster) - jsonUserOp.paymasterVerificationGasLimit = ethers.toBeHex(userOp.paymasterVerificationGasLimit!) - jsonUserOp.paymasterPostOpGasLimit = ethers.toBeHex(userOp.paymasterPostOpGasLimit!) - jsonUserOp.paymasterData = ethers.hexlify(userOp.paymasterData!) - } - return await super.send('eth_sendUserOperation', [jsonUserOp, await ethers.resolveAddress(entryPoint, this)]) - } -} - export class Safe4337Operation { private safe: Safe4337 private action: MetaTransaction diff --git a/modules/4337/src/utils/userOp.ts b/modules/4337/src/utils/userOp.ts index d2c7f1cf7..f9a16ccd8 100644 --- a/modules/4337/src/utils/userOp.ts +++ b/modules/4337/src/utils/userOp.ts @@ -1,8 +1,9 @@ +import { UserOperation } from '@safe-global/safe-4337-provider' import { BigNumberish, BytesLike, Contract, Signer, ethers } from 'ethers' import { PackedUserOperationStruct as PackedUserOperation } from '../../typechain-types/contracts/Safe4337Module' import { SafeSignature } from './execution' -export { PackedUserOperation } +export { PackedUserOperation, UserOperation } type OptionalExceptFor = Partial>> & Required> @@ -15,24 +16,6 @@ export type SafeUserOperation = { } & GasParameters & Omit -export type UserOperation = { - sender: string - nonce: BigNumberish - factory?: string - factoryData?: BytesLike - callData: BytesLike - callGasLimit: BigNumberish - verificationGasLimit: BigNumberish - preVerificationGas: BigNumberish - maxFeePerGas: BigNumberish - maxPriorityFeePerGas: BigNumberish - paymaster?: string - paymasterVerificationGasLimit?: BigNumberish - paymasterPostOpGasLimit?: BigNumberish - paymasterData?: BytesLike - signature: BytesLike -} - export const EIP712_SAFE_OPERATION_TYPE = { SafeOp: [ { type: 'address', name: 'safe' }, diff --git a/modules/4337/test/e2e/4337NestedSafe.spec.ts b/modules/4337/test/e2e/4337NestedSafe.spec.ts index 449068ba4..b9b738e17 100644 --- a/modules/4337/test/e2e/4337NestedSafe.spec.ts +++ b/modules/4337/test/e2e/4337NestedSafe.spec.ts @@ -1,3 +1,4 @@ +import { bundlerRpc, prepareAccounts, waitForUserOp } from '@safe-global/safe-4337-local-bundler' import { expect } from 'chai' import { deployments, ethers, network } from 'hardhat' import { @@ -20,7 +21,6 @@ import { } from '../../src/utils/userOp' import { chainId } from '../utils/encoding' import { Safe4337 } from '../../src/utils/safe' -import { BUNDLER_MNEMONIC, bundlerRpc, prepareAccounts, waitForUserOp } from '../utils/e2e' import { BigNumberish, Signer } from 'ethers' import { assert } from 'console' @@ -299,7 +299,7 @@ describe('Nested Safes With An Execution Initiated by a Leaf 4337 Safe [@4337]', const setupTests = async () => { const { SafeModuleSetup, EntryPoint, HariWillibaldToken, Safe4337Module, SafeL2, SafeProxyFactory } = await deployments.run() - const [user, user2, user3] = await prepareAccounts(BUNDLER_MNEMONIC, 3) + const [user, user2, user3] = await prepareAccounts({ count: 3 }) const bundler = bundlerRpc() const entryPoint = new ethers.Contract(EntryPoint.address, EntryPoint.abi, ethers.provider) diff --git a/modules/4337/test/e2e/LocalBundler.spec.ts b/modules/4337/test/e2e/LocalBundler.spec.ts index 7c7bdd158..87cad0108 100644 --- a/modules/4337/test/e2e/LocalBundler.spec.ts +++ b/modules/4337/test/e2e/LocalBundler.spec.ts @@ -1,10 +1,10 @@ +import { bundlerRpc, prepareAccounts, waitForUserOp } from '@safe-global/safe-4337-local-bundler' import { expect } from 'chai' import { deployments, ethers, network } from 'hardhat' import { buildSignatureBytes } from '../../src/utils/execution' import { buildRpcUserOperationFromSafeUserOperation, buildSafeUserOpTransaction, signSafeOp } from '../../src/utils/userOp' import { chainId, timestamp } from '../utils/encoding' import { Safe4337 } from '../../src/utils/safe' -import { bundlerRpc, prepareAccounts, waitForUserOp } from '../utils/e2e' describe('Local Bundler [@4337]', () => { before(function () { diff --git a/modules/4337/test/e2e/SingletonSigners.spec.ts b/modules/4337/test/e2e/SingletonSigners.spec.ts index d7b977918..803c2e7d9 100644 --- a/modules/4337/test/e2e/SingletonSigners.spec.ts +++ b/modules/4337/test/e2e/SingletonSigners.spec.ts @@ -1,3 +1,4 @@ +import { bundlerRpc, prepareAccounts, waitForUserOp } from '@safe-global/safe-4337-local-bundler' import { expect } from 'chai' import { deployments, ethers, network } from 'hardhat' import { buildSignatureBytes } from '../../src/utils/execution' @@ -6,7 +7,7 @@ import { buildRpcUserOperationFromSafeUserOperation, buildSafeUserOpTransaction, } from '../../src/utils/userOp' -import { bundlerRpc, encodeMultiSendTransactions, prepareAccounts, waitForUserOp } from '../utils/e2e' +import { encodeMultiSendTransactions } from '../utils/encoding' describe('Singleton Signers [@4337]', () => { before(function () { diff --git a/modules/4337/test/e2e/UniqueSigner.spec.ts b/modules/4337/test/e2e/UniqueSigner.spec.ts index dc923ded9..7b62e05da 100644 --- a/modules/4337/test/e2e/UniqueSigner.spec.ts +++ b/modules/4337/test/e2e/UniqueSigner.spec.ts @@ -1,6 +1,6 @@ +import { bundlerRpc, prepareAccounts, waitForUserOp } from '@safe-global/safe-4337-local-bundler' import { expect } from 'chai' import { deployments, ethers, network } from 'hardhat' -import { bundlerRpc, prepareAccounts, waitForUserOp } from '../utils/e2e' import { chainId } from '../utils/encoding' import { packGasParameters, unpackUserOperation } from '../../src/utils/userOp' diff --git a/modules/4337/test/e2e/WebAuthnSigner.spec.ts b/modules/4337/test/e2e/WebAuthnSigner.spec.ts index bdb51052b..b70edd512 100644 --- a/modules/4337/test/e2e/WebAuthnSigner.spec.ts +++ b/modules/4337/test/e2e/WebAuthnSigner.spec.ts @@ -1,6 +1,6 @@ +import { bundlerRpc, prepareAccounts, waitForUserOp } from '@safe-global/safe-4337-local-bundler' import { expect } from 'chai' import { deployments, ethers, network } from 'hardhat' -import { bundlerRpc, prepareAccounts, waitForUserOp } from '../utils/e2e' import { chainId } from '../utils/encoding' import { UserVerificationRequirement, diff --git a/modules/4337/test/e2e/WebAuthnSingletonSigner.spec.ts b/modules/4337/test/e2e/WebAuthnSingletonSigner.spec.ts index 50eb3d408..688212551 100644 --- a/modules/4337/test/e2e/WebAuthnSingletonSigner.spec.ts +++ b/modules/4337/test/e2e/WebAuthnSingletonSigner.spec.ts @@ -1,6 +1,7 @@ +import { bundlerRpc, prepareAccounts, waitForUserOp } from '@safe-global/safe-4337-local-bundler' import { expect } from 'chai' import { deployments, ethers, network } from 'hardhat' -import { bundlerRpc, encodeMultiSendTransactions, prepareAccounts, waitForUserOp } from '../utils/e2e' +import { encodeMultiSendTransactions } from '../utils/encoding' import { UserVerificationRequirement, WebAuthnCredentials, diff --git a/modules/4337/test/utils/encoding.ts b/modules/4337/test/utils/encoding.ts index 049e0971f..a1e602639 100644 --- a/modules/4337/test/utils/encoding.ts +++ b/modules/4337/test/utils/encoding.ts @@ -1,3 +1,4 @@ +import { AddressLike, BigNumberish, BytesLike } from 'ethers' import { ethers } from 'hardhat' export const Erc20 = [ @@ -25,3 +26,18 @@ export const timestamp = async () => { } return block.timestamp } + +export interface MultiSendTransaction { + op: 0 | 1 + to: AddressLike + value?: BigNumberish + data: BytesLike +} + +export function encodeMultiSendTransactions(transactions: MultiSendTransaction[]) { + return ethers.concat( + transactions.map(({ op, to, value, data }) => + ethers.solidityPacked(['uint8', 'address', 'uint256', 'uint256', 'bytes'], [op, to, value ?? 0, ethers.dataLength(data), data]), + ), + ) +} diff --git a/modules/allowances/package.json b/modules/allowances/package.json index e35e93616..c61c1b11a 100644 --- a/modules/allowances/package.json +++ b/modules/allowances/package.json @@ -45,7 +45,6 @@ "hardhat": "^2.21.0", "hardhat-deploy": "^0.12.1", "hardhat-gas-reporter": "^1.0.10", - "rimraf": "^5.0.5", "solhint": "4.1.1", "solidity-coverage": "^0.8.7", "ts-node": "^10.9.2", diff --git a/modules/passkey/package.json b/modules/passkey/package.json index 7eb510bcd..3c4148c7a 100644 --- a/modules/passkey/package.json +++ b/modules/passkey/package.json @@ -28,8 +28,8 @@ ], "scripts": { "build": "npm run build:sol && npm run build:ts", - "build:sol": "npx rimraf build && hardhat compile", - "build:ts": "npx rimraf dist && tsc", + "build:sol": "rimraf build typechain-types && hardhat compile", + "build:ts": "rimraf dist && tsc", "coverage": "hardhat coverage", "fmt": "prettier --write .", "fmt:check": "prettier --check .", @@ -38,7 +38,8 @@ "lint:ts": "eslint .", "test": "hardhat test", "test:4337": "4337-local-bundler-test", - "test:4337:upstream": "USE_UPSTREAM_BUNDLER=1 4337-local-bundler-test" + "test:4337:upstream": "USE_UPSTREAM_BUNDLER=1 4337-local-bundler-test", + "prepare": "npm run build -w ../4337 && npm run build" }, "devDependencies": { "@account-abstraction/contracts": "^0.7.0", @@ -55,7 +56,7 @@ }, "overrides": { "@safe-global/safe-contracts": { - "ethers": "^6.11.0" + "ethers": "^6.11.1" } }, "dependencies": { diff --git a/modules/passkey/test/4337/WebAuthnSigner.spec.ts b/modules/passkey/test/4337/WebAuthnSigner.spec.ts index 0ce600fe1..a236fc79c 100644 --- a/modules/passkey/test/4337/WebAuthnSigner.spec.ts +++ b/modules/passkey/test/4337/WebAuthnSigner.spec.ts @@ -1,8 +1,7 @@ import { expect } from 'chai' import { deployments, ethers, network } from 'hardhat' import { packGasParameters, unpackUserOperation } from '@safe-global/safe-4337/dist/src/utils/userOp' -import { bundlerRpc, prepareAccounts, waitForUserOp } from '../utils/e2e' -import { chainId } from '../utils/encoding' +import { bundlerRpc, prepareAccounts, waitForUserOp } from '@safe-global/safe-4337-local-bundler' import { WebAuthnCredentials, decodePublicKey, encodeWebAuthnSignature } from '../utils/webauthn' describe('WebAuthn Signers [@4337]', () => { @@ -64,6 +63,8 @@ describe('WebAuthn Signers [@4337]', () => { webAuthnVerifier, SafeL2, } = await setupTests() + + const { chainId } = await ethers.provider.getNetwork() const webAuthnVerifierAddress = await webAuthnVerifier.getAddress() const credential = navigator.credentials.create({ @@ -95,7 +96,7 @@ describe('WebAuthn Signers [@4337]', () => { fallbackHandler: module.target, } const safeInitHash = ethers.TypedDataEncoder.hash( - { verifyingContract: await signerLaunchpad.getAddress(), chainId: await chainId() }, + { verifyingContract: await signerLaunchpad.getAddress(), chainId }, { SafeInit: [ { type: 'address', name: 'singleton' }, @@ -171,7 +172,7 @@ describe('WebAuthn Signers [@4337]', () => { entryPoint: entryPoint.target, } const safeInitOpHash = ethers.TypedDataEncoder.hash( - { verifyingContract: await signerLaunchpad.getAddress(), chainId: await chainId() }, + { verifyingContract: await signerLaunchpad.getAddress(), chainId }, { SafeInitOp: [ { type: 'bytes32', name: 'userOpHash' }, diff --git a/modules/passkey/test/utils/e2e.ts b/modules/passkey/test/utils/e2e.ts deleted file mode 100644 index 8906b9d6c..000000000 --- a/modules/passkey/test/utils/e2e.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { deployments, ethers } from 'hardhat' -import { MultiProvider4337 } from '@safe-global/safe-4337/dist/src/utils/safe' -import { AddressLike, BigNumberish, BytesLike, HDNodeWallet } from 'ethers' -import { PackedUserOperationStruct } from '../../typechain-types/@account-abstraction/contracts/interfaces/IAccount' - -export const BUNDLER_URL = process.env.TEST_BUNLDER_URL || 'http://localhost:3000/rpc' -export const BUNDLER_MNEMONIC = process.env.TEST_BUNDLER_MNEMONIC || 'test test test test test test test test test test test junk' - -export async function prepareAccounts(mnemonic = BUNDLER_MNEMONIC, count = 1): Promise { - const bundler = ethers.HDNodeWallet.fromPhrase(mnemonic).connect(ethers.provider) - const accounts = [...Array(count)].map(() => ethers.Wallet.createRandom(ethers.provider)) - - const [deployer] = await ethers.getSigners() - const fund = ethers.parseEther('1.337') - for (const account of [bundler, ...accounts]) { - const balance = await ethers.provider.getBalance(account.address) - if (balance < fund) { - const transaction = await deployer.sendTransaction({ to: account.address, value: fund }) - await transaction.wait() - } - } - - return accounts -} - -export function bundlerRpc(url = BUNDLER_URL) { - return new MultiProvider4337(url, ethers.provider) -} - -export async function waitForUserOp({ sender, nonce }: Pick, timeout = 10_000) { - const { address: entryPointAddress } = await deployments.get('EntryPoint') - const entryPoint = await ethers.getContractAt('INonceManager', entryPointAddress) - const start = performance.now() - const key = BigInt(nonce) >> 64n - while ((await entryPoint.getNonce(sender, key)) <= BigInt(nonce)) { - if (performance.now() - start > timeout) { - throw new Error(`timeout waiting for user operation execution`) - } - await new Promise((resolve) => setTimeout(resolve, 10)) - } -} - -export interface MultiSendTransaction { - op: 0 | 1 - to: AddressLike - value?: BigNumberish - data: BytesLike -} - -export function encodeMultiSendTransactions(transactions: MultiSendTransaction[]) { - return ethers.concat( - transactions.map(({ op, to, value, data }) => - ethers.solidityPacked(['uint8', 'address', 'uint256', 'uint256', 'bytes'], [op, to, value ?? 0, ethers.dataLength(data), data]), - ), - ) -} diff --git a/modules/passkey/test/utils/encoding.ts b/modules/passkey/test/utils/encoding.ts deleted file mode 100644 index fde9528d0..000000000 --- a/modules/passkey/test/utils/encoding.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ethers } from 'hardhat' - -export async function chainId(): Promise { - return (await ethers.provider.getNetwork()).chainId -} diff --git a/modules/passkey/test/WebAuthnShim.spec.ts b/modules/passkey/test/webauthn/WebAuthnShim.spec.ts similarity index 98% rename from modules/passkey/test/WebAuthnShim.spec.ts rename to modules/passkey/test/webauthn/WebAuthnShim.spec.ts index 2d068d6cc..1ac405dd2 100644 --- a/modules/passkey/test/WebAuthnShim.spec.ts +++ b/modules/passkey/test/webauthn/WebAuthnShim.spec.ts @@ -11,7 +11,7 @@ import { import { expect } from 'chai' import CBOR from 'cbor' import { ethers } from 'ethers' -import { WebAuthnCredentials, base64UrlEncode } from './utils/webauthn' +import { WebAuthnCredentials, base64UrlEncode } from '../utils/webauthn' describe('WebAuthn Shim', () => { const navigator = { diff --git a/package-lock.json b/package-lock.json index a26ac5fe0..0b0fe11fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,10 +7,11 @@ "": { "name": "@safe-global/safe-modules", "version": "1.0.0", + "hasInstallScript": true, "license": "GPL-3.0", "workspaces": [ - "modules/*", "packages/*", + "modules/*", "examples/*" ], "devDependencies": { @@ -24,7 +25,8 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", "prettier": "^3.2.5", - "prettier-plugin-solidity": "^1.3.1" + "prettier-plugin-solidity": "^1.3.1", + "rimraf": "^5.0.5" } }, "examples/4337-gas-metering": { @@ -42,7 +44,6 @@ }, "devDependencies": { "@types/node": "20.11.18", - "rimraf": "^5.0.5", "tsx": "4.7.1", "typescript": "^5.3.3" } @@ -109,49 +110,6 @@ } } }, - "examples/4337-gas-metering/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "examples/4337-gas-metering/node_modules/glob": { - "version": "10.3.10", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "examples/4337-gas-metering/node_modules/minimatch": { - "version": "9.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "examples/4337-gas-metering/node_modules/permissionless": { "version": "0.0.35", "license": "MIT", @@ -159,23 +117,6 @@ "viem": "^2.0.0" } }, - "examples/4337-gas-metering/node_modules/rimraf": { - "version": "5.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "examples/4337-gas-metering/node_modules/viem": { "version": "2.7.9", "funding": [ @@ -558,7 +499,6 @@ "modules/4337": { "name": "@safe-global/safe-4337", "version": "0.3.0", - "hasInstallScript": true, "license": "GPL-3.0", "dependencies": { "@safe-global/safe-contracts": "^1.4.1-build.0" @@ -569,6 +509,7 @@ "@nomicfoundation/hardhat-toolbox": "^4.0.0", "@openzeppelin/contracts": "^5.0.2", "@safe-global/safe-4337-local-bundler": "^0.0.0", + "@safe-global/safe-4337-provider": "^0.0.0", "@simplewebauthn/server": "9.0.0", "@types/chai": "^4.3.11", "@types/mocha": "^10.0.6", @@ -912,7 +853,6 @@ "hardhat": "^2.21.0", "hardhat-deploy": "^0.12.1", "hardhat-gas-reporter": "^1.0.10", - "rimraf": "^5.0.5", "solhint": "4.1.1", "solidity-coverage": "^0.8.7", "ts-node": "^10.9.2", @@ -1029,14 +969,6 @@ "typechain": "^8.3.2" } }, - "modules/allowances/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "modules/allowances/node_modules/ethers": { "version": "6.11.1", "dev": true, @@ -1083,27 +1015,6 @@ "node": ">=10" } }, - "modules/allowances/node_modules/glob": { - "version": "10.3.10", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "modules/allowances/node_modules/jsonfile": { "version": "6.1.0", "dev": true, @@ -1115,37 +1026,6 @@ "graceful-fs": "^4.1.6" } }, - "modules/allowances/node_modules/minimatch": { - "version": "9.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "modules/allowances/node_modules/rimraf": { - "version": "5.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "modules/allowances/node_modules/tslib": { "version": "2.4.0", "dev": true, @@ -1545,7 +1425,6 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -2434,7 +2313,6 @@ }, "node_modules/@fastify/busboy": { "version": "2.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">=14" @@ -2481,8 +2359,9 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -2497,8 +2376,9 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -2508,8 +2388,9 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -2519,13 +2400,15 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -2540,8 +2423,9 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -2554,8 +2438,9 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -2570,7 +2455,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -2582,7 +2466,6 @@ }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -2619,7 +2502,6 @@ }, "node_modules/@metamask/eth-sig-util": { "version": "4.0.1", - "dev": true, "license": "ISC", "dependencies": { "ethereumjs-abi": "^0.6.8", @@ -2917,7 +2799,6 @@ }, "node_modules/@noble/hashes": { "version": "1.2.0", - "dev": true, "funding": [ { "type": "individual", @@ -2928,7 +2809,6 @@ }, "node_modules/@noble/secp256k1": { "version": "1.7.1", - "dev": true, "funding": [ { "type": "individual", @@ -2939,7 +2819,6 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -2951,7 +2830,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -2959,7 +2837,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -2971,7 +2848,6 @@ }, "node_modules/@nomicfoundation/edr": { "version": "0.2.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 18" @@ -2993,7 +2869,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3008,7 +2883,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3020,7 +2894,6 @@ }, "node_modules/@nomicfoundation/ethereumjs-common": { "version": "4.0.4", - "dev": true, "license": "MIT", "dependencies": { "@nomicfoundation/ethereumjs-util": "9.0.4" @@ -3028,7 +2901,6 @@ }, "node_modules/@nomicfoundation/ethereumjs-rlp": { "version": "5.0.4", - "dev": true, "license": "MPL-2.0", "bin": { "rlp": "bin/rlp.cjs" @@ -3039,7 +2911,6 @@ }, "node_modules/@nomicfoundation/ethereumjs-tx": { "version": "5.0.4", - "dev": true, "license": "MPL-2.0", "dependencies": { "@nomicfoundation/ethereumjs-common": "4.0.4", @@ -3061,7 +2932,6 @@ }, "node_modules/@nomicfoundation/ethereumjs-tx/node_modules/ethereum-cryptography": { "version": "0.1.3", - "dev": true, "license": "MIT", "dependencies": { "@types/pbkdf2": "^3.0.0", @@ -3083,7 +2953,6 @@ }, "node_modules/@nomicfoundation/ethereumjs-util": { "version": "9.0.4", - "dev": true, "license": "MPL-2.0", "dependencies": { "@nomicfoundation/ethereumjs-rlp": "5.0.4", @@ -3103,7 +2972,6 @@ }, "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": { "version": "0.1.3", - "dev": true, "license": "MIT", "dependencies": { "@types/pbkdf2": "^3.0.0", @@ -3125,7 +2993,6 @@ }, "node_modules/@nomicfoundation/hardhat-network-helpers": { "version": "1.0.10", - "dev": true, "license": "MIT", "dependencies": { "ethereumjs-util": "^7.1.4" @@ -3136,7 +3003,6 @@ }, "node_modules/@nomicfoundation/hardhat-network-helpers/node_modules/ethereum-cryptography": { "version": "0.1.3", - "dev": true, "license": "MIT", "dependencies": { "@types/pbkdf2": "^3.0.0", @@ -3158,7 +3024,6 @@ }, "node_modules/@nomicfoundation/hardhat-network-helpers/node_modules/ethereumjs-util": { "version": "7.1.5", - "dev": true, "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^5.1.0", @@ -3173,7 +3038,6 @@ }, "node_modules/@nomicfoundation/hardhat-verify": { "version": "2.0.4", - "dev": true, "license": "MIT", "dependencies": { "@ethersproject/abi": "^5.1.2", @@ -3192,7 +3056,6 @@ }, "node_modules/@nomicfoundation/hardhat-verify/node_modules/cbor": { "version": "8.1.0", - "dev": true, "license": "MIT", "dependencies": { "nofilter": "^3.1.0" @@ -3203,7 +3066,6 @@ }, "node_modules/@nomicfoundation/solidity-analyzer": { "version": "0.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 12" @@ -3226,7 +3088,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3241,7 +3102,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3445,8 +3305,9 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -3532,6 +3393,10 @@ "resolved": "packages/4337-local-bundler", "link": true }, + "node_modules/@safe-global/safe-4337-provider": { + "resolved": "packages/4337-provider", + "link": true + }, "node_modules/@safe-global/safe-allowance-module": { "resolved": "modules/allowances", "link": true @@ -3602,7 +3467,6 @@ }, "node_modules/@scure/bip32": { "version": "1.1.5", - "dev": true, "funding": [ { "type": "individual", @@ -3618,7 +3482,6 @@ }, "node_modules/@scure/bip39": { "version": "1.1.1", - "dev": true, "funding": [ { "type": "individual", @@ -3633,7 +3496,6 @@ }, "node_modules/@sentry/core": { "version": "5.30.0", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sentry/hub": "5.30.0", @@ -3648,7 +3510,6 @@ }, "node_modules/@sentry/hub": { "version": "5.30.0", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sentry/types": "5.30.0", @@ -3661,7 +3522,6 @@ }, "node_modules/@sentry/minimal": { "version": "5.30.0", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sentry/hub": "5.30.0", @@ -3674,7 +3534,6 @@ }, "node_modules/@sentry/node": { "version": "5.30.0", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sentry/core": "5.30.0", @@ -3693,7 +3552,6 @@ }, "node_modules/@sentry/tracing": { "version": "5.30.0", - "dev": true, "license": "MIT", "dependencies": { "@sentry/hub": "5.30.0", @@ -3708,7 +3566,6 @@ }, "node_modules/@sentry/types": { "version": "5.30.0", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=6" @@ -3716,7 +3573,6 @@ }, "node_modules/@sentry/utils": { "version": "5.30.0", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sentry/types": "5.30.0", @@ -3764,7 +3620,6 @@ }, "node_modules/@solidity-parser/parser": { "version": "0.14.5", - "dev": true, "license": "MIT", "dependencies": { "antlr4ts": "^0.5.0-alpha.4" @@ -3900,7 +3755,7 @@ }, "node_modules/@swc/core": { "version": "1.4.1", - "dev": true, + "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -3967,12 +3822,12 @@ }, "node_modules/@swc/counter": { "version": "0.1.2", - "dev": true, + "devOptional": true, "license": "Apache-2.0" }, "node_modules/@swc/types": { "version": "0.1.5", - "dev": true, + "devOptional": true, "license": "Apache-2.0" }, "node_modules/@szmarczak/http-timer": { @@ -3988,27 +3843,22 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.9", - "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "dev": true, "license": "MIT" }, "node_modules/@types/bn.js": { "version": "5.1.5", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -4016,12 +3866,10 @@ }, "node_modules/@types/chai": { "version": "4.3.11", - "dev": true, "license": "MIT" }, "node_modules/@types/chai-as-promised": { "version": "7.1.8", - "dev": true, "license": "MIT", "dependencies": { "@types/chai": "*" @@ -4029,7 +3877,6 @@ }, "node_modules/@types/concat-stream": { "version": "1.6.1", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -4049,7 +3896,6 @@ }, "node_modules/@types/form-data": { "version": "0.0.33", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -4057,7 +3903,6 @@ }, "node_modules/@types/glob": { "version": "7.2.0", - "dev": true, "license": "MIT", "dependencies": { "@types/minimatch": "*", @@ -4081,17 +3926,14 @@ }, "node_modules/@types/lru-cache": { "version": "5.1.1", - "dev": true, "license": "MIT" }, "node_modules/@types/minimatch": { "version": "5.1.2", - "dev": true, "license": "MIT" }, "node_modules/@types/mocha": { "version": "10.0.6", - "dev": true, "license": "MIT" }, "node_modules/@types/ms": { @@ -4100,7 +3942,6 @@ }, "node_modules/@types/node": { "version": "20.11.18", - "dev": true, "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -4108,7 +3949,6 @@ }, "node_modules/@types/pbkdf2": { "version": "3.1.2", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -4116,7 +3956,6 @@ }, "node_modules/@types/prettier": { "version": "2.7.3", - "dev": true, "license": "MIT" }, "node_modules/@types/prop-types": { @@ -4153,7 +3992,6 @@ }, "node_modules/@types/secp256k1": { "version": "4.0.6", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -4880,7 +4718,6 @@ }, "node_modules/abbrev": { "version": "1.0.9", - "dev": true, "license": "ISC" }, "node_modules/abitype": { @@ -4916,7 +4753,6 @@ }, "node_modules/acorn-walk": { "version": "8.3.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -4924,7 +4760,6 @@ }, "node_modules/adm-zip": { "version": "0.4.16", - "dev": true, "license": "MIT", "engines": { "node": ">=0.3.0" @@ -4936,7 +4771,6 @@ }, "node_modules/agent-base": { "version": "6.0.2", - "dev": true, "license": "MIT", "dependencies": { "debug": "4" @@ -4947,7 +4781,6 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "dev": true, "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", @@ -5179,7 +5012,6 @@ }, "node_modules/amdefine": { "version": "1.0.1", - "dev": true, "license": "BSD-3-Clause OR MIT", "optional": true, "peer": true, @@ -5189,7 +5021,6 @@ }, "node_modules/ansi-align": { "version": "3.0.1", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.1.0" @@ -5204,7 +5035,6 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -5225,7 +5055,6 @@ }, "node_modules/ansi-styles": { "version": "3.2.1", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -5244,7 +5073,6 @@ }, "node_modules/antlr4ts": { "version": "0.5.0-alpha.4", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/anymatch": { @@ -5260,17 +5088,14 @@ }, "node_modules/arg": { "version": "4.1.3", - "dev": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "dev": true, "license": "Python-2.0" }, "node_modules/array-back": { "version": "3.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5308,7 +5133,6 @@ }, "node_modules/array-union": { "version": "2.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5316,7 +5140,6 @@ }, "node_modules/array-uniq": { "version": "1.0.3", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5396,7 +5219,6 @@ }, "node_modules/asap": { "version": "2.0.6", - "dev": true, "license": "MIT" }, "node_modules/asn1js": { @@ -5419,7 +5241,6 @@ }, "node_modules/assertion-error": { "version": "1.1.0", - "dev": true, "license": "MIT", "engines": { "node": "*" @@ -5432,7 +5253,6 @@ }, "node_modules/astral-regex": { "version": "2.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5440,7 +5260,6 @@ }, "node_modules/async": { "version": "1.5.2", - "dev": true, "license": "MIT" }, "node_modules/async-mutex": { @@ -5460,7 +5279,6 @@ }, "node_modules/at-least-node": { "version": "1.0.0", - "dev": true, "license": "ISC", "engines": { "node": ">= 4.0.0" @@ -5493,12 +5311,10 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, "license": "MIT" }, "node_modules/base-x": { "version": "3.0.9", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "^5.0.1" @@ -5540,7 +5356,6 @@ }, "node_modules/blakejs": { "version": "1.2.1", - "dev": true, "license": "MIT" }, "node_modules/bn.js": { @@ -5549,7 +5364,6 @@ }, "node_modules/boxen": { "version": "5.1.2", - "dev": true, "license": "MIT", "dependencies": { "ansi-align": "^3.0.0", @@ -5570,7 +5384,6 @@ }, "node_modules/boxen/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -5584,7 +5397,6 @@ }, "node_modules/boxen/node_modules/chalk": { "version": "4.1.2", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -5599,7 +5411,6 @@ }, "node_modules/boxen/node_modules/color-convert": { "version": "2.0.1", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -5610,12 +5421,10 @@ }, "node_modules/boxen/node_modules/color-name": { "version": "1.1.4", - "dev": true, "license": "MIT" }, "node_modules/boxen/node_modules/has-flag": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5623,7 +5432,6 @@ }, "node_modules/boxen/node_modules/supports-color": { "version": "7.2.0", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -5634,7 +5442,6 @@ }, "node_modules/boxen/node_modules/type-fest": { "version": "0.20.2", - "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -5645,7 +5452,6 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -5668,12 +5474,10 @@ }, "node_modules/browser-stdout": { "version": "1.3.1", - "dev": true, "license": "ISC" }, "node_modules/browserify-aes": { "version": "1.2.0", - "dev": true, "license": "MIT", "dependencies": { "buffer-xor": "^1.0.3", @@ -5686,7 +5490,6 @@ }, "node_modules/bs58": { "version": "4.0.1", - "dev": true, "license": "MIT", "dependencies": { "base-x": "^3.0.2" @@ -5694,7 +5497,6 @@ }, "node_modules/bs58check": { "version": "2.1.2", - "dev": true, "license": "MIT", "dependencies": { "bs58": "^4.0.0", @@ -5726,12 +5528,10 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "dev": true, "license": "MIT" }, "node_modules/buffer-xor": { "version": "1.0.3", - "dev": true, "license": "MIT" }, "node_modules/bufferutil": { @@ -5747,7 +5547,6 @@ }, "node_modules/bytes": { "version": "3.1.2", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -5800,7 +5599,6 @@ }, "node_modules/camelcase": { "version": "6.3.0", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -5811,7 +5609,6 @@ }, "node_modules/caseless": { "version": "0.12.0", - "dev": true, "license": "Apache-2.0" }, "node_modules/cbor": { @@ -5856,7 +5653,6 @@ }, "node_modules/chai": { "version": "4.4.0", - "dev": true, "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", @@ -5873,7 +5669,6 @@ }, "node_modules/chai-as-promised": { "version": "7.1.1", - "dev": true, "license": "WTFPL", "dependencies": { "check-error": "^1.0.2" @@ -5884,7 +5679,6 @@ }, "node_modules/chalk": { "version": "2.4.2", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -5897,7 +5691,6 @@ }, "node_modules/charenc": { "version": "0.0.2", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": "*" @@ -5905,7 +5698,6 @@ }, "node_modules/check-error": { "version": "1.0.3", - "dev": true, "license": "MIT", "dependencies": { "get-func-name": "^2.0.2" @@ -5941,12 +5733,10 @@ }, "node_modules/ci-info": { "version": "2.0.0", - "dev": true, "license": "MIT" }, "node_modules/cipher-base": { "version": "1.0.4", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.1", @@ -5962,7 +5752,6 @@ }, "node_modules/clean-stack": { "version": "2.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5970,7 +5759,6 @@ }, "node_modules/cli-boxes": { "version": "2.2.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5981,7 +5769,6 @@ }, "node_modules/cli-table3": { "version": "0.5.1", - "dev": true, "license": "MIT", "dependencies": { "object-assign": "^4.1.0", @@ -5996,7 +5783,6 @@ }, "node_modules/cli-table3/node_modules/ansi-regex": { "version": "3.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -6004,7 +5790,6 @@ }, "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -6012,7 +5797,6 @@ }, "node_modules/cli-table3/node_modules/string-width": { "version": "2.1.1", - "dev": true, "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", @@ -6024,7 +5808,6 @@ }, "node_modules/cli-table3/node_modules/strip-ansi": { "version": "4.0.0", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" @@ -6050,7 +5833,6 @@ }, "node_modules/cliui": { "version": "7.0.4", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -6074,7 +5856,6 @@ }, "node_modules/color-convert": { "version": "1.9.3", - "dev": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -6082,12 +5863,10 @@ }, "node_modules/color-name": { "version": "1.1.3", - "dev": true, "license": "MIT" }, "node_modules/colors": { "version": "1.4.0", - "dev": true, "license": "MIT", "engines": { "node": ">=0.1.90" @@ -6105,12 +5884,10 @@ }, "node_modules/command-exists": { "version": "1.2.9", - "dev": true, "license": "MIT" }, "node_modules/command-line-args": { "version": "5.2.1", - "dev": true, "license": "MIT", "dependencies": { "array-back": "^3.1.0", @@ -6124,7 +5901,6 @@ }, "node_modules/command-line-usage": { "version": "6.1.3", - "dev": true, "license": "MIT", "dependencies": { "array-back": "^4.0.2", @@ -6138,7 +5914,6 @@ }, "node_modules/command-line-usage/node_modules/array-back": { "version": "4.0.2", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6146,7 +5921,6 @@ }, "node_modules/command-line-usage/node_modules/typical": { "version": "5.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6154,17 +5928,14 @@ }, "node_modules/commander": { "version": "3.0.2", - "dev": true, "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, "license": "MIT" }, "node_modules/concat-stream": { "version": "1.6.2", - "dev": true, "engines": [ "node >= 0.8" ], @@ -6178,12 +5949,10 @@ }, "node_modules/concat-stream/node_modules/isarray": { "version": "1.0.0", - "dev": true, "license": "MIT" }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.8", - "dev": true, "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -6197,7 +5966,6 @@ }, "node_modules/concat-stream/node_modules/string_decoder": { "version": "1.1.1", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -6221,7 +5989,6 @@ }, "node_modules/cookie": { "version": "0.4.2", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -6233,7 +6000,6 @@ }, "node_modules/core-util-is": { "version": "1.0.3", - "dev": true, "license": "MIT" }, "node_modules/cosmiconfig": { @@ -6273,7 +6039,6 @@ }, "node_modules/create-hash": { "version": "1.2.0", - "dev": true, "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", @@ -6285,7 +6050,6 @@ }, "node_modules/create-hmac": { "version": "1.1.7", - "dev": true, "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", @@ -6298,7 +6062,6 @@ }, "node_modules/create-require": { "version": "1.1.1", - "dev": true, "license": "MIT" }, "node_modules/cross-fetch": { @@ -6327,7 +6090,6 @@ }, "node_modules/crypt": { "version": "0.0.2", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": "*" @@ -6350,8 +6112,7 @@ "license": "MIT" }, "node_modules/death": { - "version": "1.1.0", - "dev": true + "version": "1.1.0" }, "node_modules/debug": { "version": "4.3.4", @@ -6370,7 +6131,6 @@ }, "node_modules/decamelize": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -6413,7 +6173,6 @@ }, "node_modules/deep-eql": { "version": "4.1.3", - "dev": true, "license": "MIT", "dependencies": { "type-detect": "^4.0.0" @@ -6424,7 +6183,6 @@ }, "node_modules/deep-extend": { "version": "0.6.0", - "dev": true, "license": "MIT", "engines": { "node": ">=4.0.0" @@ -6432,7 +6190,6 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "dev": true, "license": "MIT" }, "node_modules/defer-to-connect": { @@ -6491,7 +6248,6 @@ }, "node_modules/depd": { "version": "2.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -6516,7 +6272,6 @@ }, "node_modules/diff": { "version": "5.0.0", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -6524,7 +6279,6 @@ }, "node_modules/difflib": { "version": "0.2.4", - "dev": true, "dependencies": { "heap": ">= 0.2.0" } @@ -6535,7 +6289,6 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "dev": true, "license": "MIT", "dependencies": { "path-type": "^4.0.0" @@ -6577,8 +6330,9 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/elliptic": { "version": "6.5.4", @@ -6635,7 +6389,6 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6808,7 +6561,6 @@ }, "node_modules/escalade": { "version": "3.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6816,7 +6568,6 @@ }, "node_modules/escape-string-regexp": { "version": "1.0.5", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -6824,7 +6575,6 @@ }, "node_modules/escodegen": { "version": "1.8.1", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "esprima": "^2.7.1", @@ -6845,14 +6595,12 @@ }, "node_modules/escodegen/node_modules/estraverse": { "version": "1.9.3", - "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/escodegen/node_modules/levn": { "version": "0.3.0", - "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2", @@ -6864,7 +6612,6 @@ }, "node_modules/escodegen/node_modules/optionator": { "version": "0.8.3", - "dev": true, "license": "MIT", "dependencies": { "deep-is": "~0.1.3", @@ -6880,14 +6627,12 @@ }, "node_modules/escodegen/node_modules/prelude-ls": { "version": "1.1.2", - "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/escodegen/node_modules/source-map": { "version": "0.2.0", - "dev": true, "optional": true, "peer": true, "dependencies": { @@ -6899,7 +6644,6 @@ }, "node_modules/escodegen/node_modules/type-check": { "version": "0.3.2", - "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2" @@ -7348,7 +7092,6 @@ }, "node_modules/esprima": { "version": "2.7.3", - "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -7394,7 +7137,6 @@ }, "node_modules/esutils": { "version": "2.0.3", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -7423,7 +7165,6 @@ }, "node_modules/eth-gas-reporter": { "version": "0.2.27", - "dev": true, "license": "MIT", "dependencies": { "@solidity-parser/parser": "^0.14.0", @@ -7451,7 +7192,6 @@ }, "node_modules/eth-gas-reporter/node_modules/@ethersproject/contracts": { "version": "5.7.0", - "dev": true, "funding": [ { "type": "individual", @@ -7478,7 +7218,6 @@ }, "node_modules/eth-gas-reporter/node_modules/@ethersproject/hdnode": { "version": "5.7.0", - "dev": true, "funding": [ { "type": "individual", @@ -7507,7 +7246,6 @@ }, "node_modules/eth-gas-reporter/node_modules/@ethersproject/json-wallets": { "version": "5.7.0", - "dev": true, "funding": [ { "type": "individual", @@ -7537,7 +7275,6 @@ }, "node_modules/eth-gas-reporter/node_modules/@ethersproject/pbkdf2": { "version": "5.7.0", - "dev": true, "funding": [ { "type": "individual", @@ -7556,7 +7293,6 @@ }, "node_modules/eth-gas-reporter/node_modules/@ethersproject/solidity": { "version": "5.7.0", - "dev": true, "funding": [ { "type": "individual", @@ -7579,7 +7315,6 @@ }, "node_modules/eth-gas-reporter/node_modules/@ethersproject/units": { "version": "5.7.0", - "dev": true, "funding": [ { "type": "individual", @@ -7599,7 +7334,6 @@ }, "node_modules/eth-gas-reporter/node_modules/@ethersproject/wallet": { "version": "5.7.0", - "dev": true, "funding": [ { "type": "individual", @@ -7631,7 +7365,6 @@ }, "node_modules/eth-gas-reporter/node_modules/@ethersproject/wordlists": { "version": "5.7.0", - "dev": true, "funding": [ { "type": "individual", @@ -7653,12 +7386,10 @@ }, "node_modules/eth-gas-reporter/node_modules/aes-js": { "version": "3.0.0", - "dev": true, "license": "MIT" }, "node_modules/eth-gas-reporter/node_modules/axios": { "version": "1.6.5", - "dev": true, "license": "MIT", "dependencies": { "follow-redirects": "^1.15.4", @@ -7668,7 +7399,6 @@ }, "node_modules/eth-gas-reporter/node_modules/ethers": { "version": "5.7.2", - "dev": true, "funding": [ { "type": "individual", @@ -7754,7 +7484,6 @@ }, "node_modules/ethereum-bloom-filters": { "version": "1.0.10", - "dev": true, "license": "MIT", "dependencies": { "js-sha3": "^0.8.0" @@ -7762,7 +7491,6 @@ }, "node_modules/ethereum-cryptography": { "version": "1.2.0", - "dev": true, "license": "MIT", "dependencies": { "@noble/hashes": "1.2.0", @@ -7773,7 +7501,6 @@ }, "node_modules/ethereumjs-abi": { "version": "0.6.8", - "dev": true, "license": "MIT", "dependencies": { "bn.js": "^4.11.8", @@ -7782,12 +7509,10 @@ }, "node_modules/ethereumjs-abi/node_modules/bn.js": { "version": "4.12.0", - "dev": true, "license": "MIT" }, "node_modules/ethereumjs-util": { "version": "6.2.1", - "dev": true, "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^4.11.3", @@ -7801,7 +7526,6 @@ }, "node_modules/ethereumjs-util/node_modules/@types/bn.js": { "version": "4.11.6", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -7809,12 +7533,10 @@ }, "node_modules/ethereumjs-util/node_modules/bn.js": { "version": "4.12.0", - "dev": true, "license": "MIT" }, "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { "version": "0.1.3", - "dev": true, "license": "MIT", "dependencies": { "@types/pbkdf2": "^3.0.0", @@ -8380,7 +8102,6 @@ }, "node_modules/ethjs-unit": { "version": "0.1.6", - "dev": true, "license": "MIT", "dependencies": { "bn.js": "4.11.6", @@ -8393,12 +8114,10 @@ }, "node_modules/ethjs-unit/node_modules/bn.js": { "version": "4.11.6", - "dev": true, "license": "MIT" }, "node_modules/ethjs-util": { "version": "0.1.6", - "dev": true, "license": "MIT", "dependencies": { "is-hex-prefixed": "1.0.0", @@ -8430,7 +8149,6 @@ }, "node_modules/evp_bytestokey": { "version": "1.0.3", - "dev": true, "license": "MIT", "dependencies": { "md5.js": "^1.3.4", @@ -8481,7 +8199,6 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "dev": true, "license": "MIT" }, "node_modules/fast-diff": { @@ -8491,7 +8208,6 @@ }, "node_modules/fast-glob": { "version": "3.3.2", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -8511,7 +8227,6 @@ }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "dev": true, "license": "MIT" }, "node_modules/fast-redact": { @@ -8527,7 +8242,6 @@ }, "node_modules/fastq": { "version": "1.16.0", - "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -8563,7 +8277,6 @@ }, "node_modules/find-replace": { "version": "3.0.0", - "dev": true, "license": "MIT", "dependencies": { "array-back": "^3.0.1" @@ -8574,7 +8287,6 @@ }, "node_modules/find-up": { "version": "2.1.0", - "dev": true, "license": "MIT", "dependencies": { "locate-path": "^2.0.0" @@ -8585,7 +8297,6 @@ }, "node_modules/flat": { "version": "5.0.2", - "dev": true, "license": "BSD-3-Clause", "bin": { "flat": "cli.js" @@ -8658,8 +8369,9 @@ }, "node_modules/foreground-child": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, - "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -8693,12 +8405,10 @@ }, "node_modules/fp-ts": { "version": "1.19.3", - "dev": true, "license": "MIT" }, "node_modules/fs-extra": { "version": "7.0.1", - "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", @@ -8711,12 +8421,10 @@ }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", - "dev": true, "license": "MIT" }, "node_modules/fs.realpath": { "version": "1.0.0", - "dev": true, "license": "ISC" }, "node_modules/function-bind": { @@ -8760,7 +8468,6 @@ }, "node_modules/get-func-name": { "version": "2.0.2", - "dev": true, "license": "MIT", "engines": { "node": "*" @@ -8781,7 +8488,6 @@ }, "node_modules/get-port": { "version": "3.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -8830,7 +8536,6 @@ }, "node_modules/ghost-testrpc": { "version": "0.0.2", - "dev": true, "license": "ISC", "dependencies": { "chalk": "^2.4.2", @@ -8842,7 +8547,6 @@ }, "node_modules/glob": { "version": "7.2.0", - "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -8871,7 +8575,6 @@ }, "node_modules/global-modules": { "version": "2.0.0", - "dev": true, "license": "MIT", "dependencies": { "global-prefix": "^3.0.0" @@ -8882,7 +8585,6 @@ }, "node_modules/global-prefix": { "version": "3.0.0", - "dev": true, "license": "MIT", "dependencies": { "ini": "^1.3.5", @@ -8895,7 +8597,6 @@ }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -9022,7 +8723,6 @@ }, "node_modules/handlebars": { "version": "4.7.8", - "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.5", @@ -9044,7 +8744,6 @@ "version": "2.21.0", "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.21.0.tgz", "integrity": "sha512-8DlJAVJDEVHaV1sh9FLuKLLgCFv9EAJ+M+8IbjSIPgoeNo3ss5L1HgGBMfnI88c7OzMEZkdcuyGoobFeK3Orqw==", - "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", @@ -9480,7 +9179,6 @@ }, "node_modules/hardhat-gas-reporter": { "version": "1.0.10", - "dev": true, "license": "MIT", "dependencies": { "array-uniq": "1.0.3", @@ -9501,7 +9199,6 @@ }, "node_modules/has-flag": { "version": "3.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -9553,7 +9250,6 @@ }, "node_modules/hash-base": { "version": "3.1.0", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.4", @@ -9566,7 +9262,6 @@ }, "node_modules/hash-base/node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -9603,7 +9298,6 @@ }, "node_modules/he": { "version": "1.2.0", - "dev": true, "license": "MIT", "bin": { "he": "bin/he" @@ -9611,7 +9305,6 @@ }, "node_modules/heap": { "version": "0.2.7", - "dev": true, "license": "MIT" }, "node_modules/hey-listen": { @@ -9629,7 +9322,6 @@ }, "node_modules/http-basic": { "version": "8.1.3", - "dev": true, "license": "MIT", "dependencies": { "caseless": "^0.12.0", @@ -9648,7 +9340,6 @@ }, "node_modules/http-errors": { "version": "2.0.0", - "dev": true, "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -9663,7 +9354,6 @@ }, "node_modules/http-response-object": { "version": "3.0.2", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "^10.0.3" @@ -9671,7 +9361,6 @@ }, "node_modules/http-response-object/node_modules/@types/node": { "version": "10.17.60", - "dev": true, "license": "MIT" }, "node_modules/http-shutdown": { @@ -9696,7 +9385,6 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "dev": true, "license": "MIT", "dependencies": { "agent-base": "6", @@ -9729,7 +9417,6 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", - "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -9762,7 +9449,6 @@ }, "node_modules/ignore": { "version": "5.3.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -9770,7 +9456,6 @@ }, "node_modules/immutable": { "version": "4.3.4", - "dev": true, "license": "MIT" }, "node_modules/import-fresh": { @@ -9805,7 +9490,6 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9813,7 +9497,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -9826,7 +9509,6 @@ }, "node_modules/ini": { "version": "1.3.8", - "dev": true, "license": "ISC" }, "node_modules/internal-slot": { @@ -9844,7 +9526,6 @@ }, "node_modules/interpret": { "version": "1.4.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.10" @@ -9852,7 +9533,6 @@ }, "node_modules/io-ts": { "version": "1.10.4", - "dev": true, "license": "MIT", "dependencies": { "fp-ts": "^1.0.0" @@ -10024,7 +9704,6 @@ }, "node_modules/is-hex-prefixed": { "version": "1.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=6.5.0", @@ -10089,7 +9768,6 @@ }, "node_modules/is-plain-obj": { "version": "2.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10179,7 +9857,6 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -10257,8 +9934,9 @@ }, "node_modules/jackspeak": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -10289,7 +9967,6 @@ }, "node_modules/js-yaml": { "version": "4.1.0", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -10354,7 +10031,6 @@ }, "node_modules/jsonfile": { "version": "4.0.0", - "dev": true, "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" @@ -10362,7 +10038,6 @@ }, "node_modules/jsonschema": { "version": "1.4.1", - "dev": true, "license": "MIT", "engines": { "node": "*" @@ -10395,7 +10070,6 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10403,7 +10077,6 @@ }, "node_modules/klaw": { "version": "1.3.1", - "dev": true, "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.9" @@ -10495,7 +10168,6 @@ }, "node_modules/locate-path": { "version": "2.0.0", - "dev": true, "license": "MIT", "dependencies": { "p-locate": "^2.0.0", @@ -10507,17 +10179,14 @@ }, "node_modules/lodash": { "version": "4.17.21", - "dev": true, "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "dev": true, "license": "MIT" }, "node_modules/lodash.clonedeep": { "version": "4.5.0", - "dev": true, "license": "MIT" }, "node_modules/lodash.defaults": { @@ -10539,12 +10208,10 @@ }, "node_modules/lodash.truncate": { "version": "4.4.2", - "dev": true, "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", - "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -10559,7 +10226,6 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -10573,7 +10239,6 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -10588,7 +10253,6 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -10599,12 +10263,10 @@ }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", - "dev": true, "license": "MIT" }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10612,7 +10274,6 @@ }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -10633,7 +10294,6 @@ }, "node_modules/loupe": { "version": "2.3.7", - "dev": true, "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" @@ -10652,7 +10312,6 @@ }, "node_modules/lru_map": { "version": "0.3.3", - "dev": true, "license": "MIT" }, "node_modules/lru-cache": { @@ -10674,12 +10333,10 @@ }, "node_modules/make-error": { "version": "1.3.6", - "dev": true, "license": "ISC" }, "node_modules/markdown-table": { "version": "1.1.3", - "dev": true, "license": "MIT" }, "node_modules/match-all": { @@ -10688,7 +10345,6 @@ }, "node_modules/md5.js": { "version": "1.3.5", - "dev": true, "license": "MIT", "dependencies": { "hash-base": "^3.0.0", @@ -10698,7 +10354,6 @@ }, "node_modules/memorystream": { "version": "0.3.1", - "dev": true, "engines": { "node": ">= 0.10.0" } @@ -10709,7 +10364,6 @@ }, "node_modules/merge2": { "version": "1.4.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -10788,7 +10442,6 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -10799,7 +10452,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10807,15 +10459,15 @@ }, "node_modules/minipass": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mkdirp": { "version": "0.5.6", - "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.6" @@ -10836,7 +10488,6 @@ }, "node_modules/mnemonist": { "version": "0.38.5", - "dev": true, "license": "MIT", "dependencies": { "obliterator": "^2.0.0" @@ -10844,7 +10495,6 @@ }, "node_modules/mocha": { "version": "10.2.0", - "dev": true, "license": "MIT", "dependencies": { "ansi-colors": "4.1.1", @@ -10883,7 +10533,6 @@ }, "node_modules/mocha/node_modules/ansi-colors": { "version": "4.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -10891,7 +10540,6 @@ }, "node_modules/mocha/node_modules/brace-expansion": { "version": "2.0.1", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -10899,7 +10547,6 @@ }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -10910,7 +10557,6 @@ }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", - "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -10925,7 +10571,6 @@ }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10933,7 +10578,6 @@ }, "node_modules/mocha/node_modules/locate-path": { "version": "6.0.0", - "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -10947,7 +10591,6 @@ }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -10958,12 +10601,10 @@ }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", - "dev": true, "license": "MIT" }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", - "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -10977,7 +10618,6 @@ }, "node_modules/mocha/node_modules/p-locate": { "version": "5.0.0", - "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -10991,7 +10631,6 @@ }, "node_modules/mocha/node_modules/path-exists": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10999,7 +10638,6 @@ }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11049,7 +10687,6 @@ }, "node_modules/nanoid": { "version": "3.3.3", - "dev": true, "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" @@ -11065,7 +10702,6 @@ }, "node_modules/neo-async": { "version": "2.6.2", - "dev": true, "license": "MIT" }, "node_modules/next-tick": { @@ -11078,7 +10714,6 @@ }, "node_modules/node-emoji": { "version": "1.11.0", - "dev": true, "license": "MIT", "dependencies": { "lodash": "^4.17.21" @@ -11138,7 +10773,6 @@ }, "node_modules/nofilter": { "version": "3.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">=12.19" @@ -11146,7 +10780,6 @@ }, "node_modules/nopt": { "version": "3.0.6", - "dev": true, "license": "ISC", "dependencies": { "abbrev": "1" @@ -11198,7 +10831,6 @@ }, "node_modules/number-to-bn": { "version": "1.7.0", - "dev": true, "license": "MIT", "dependencies": { "bn.js": "4.11.6", @@ -11211,12 +10843,10 @@ }, "node_modules/number-to-bn/node_modules/bn.js": { "version": "4.11.6", - "dev": true, "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11299,7 +10929,6 @@ }, "node_modules/obliterator": { "version": "2.0.4", - "dev": true, "license": "MIT" }, "node_modules/ofetch": { @@ -11357,12 +10986,10 @@ }, "node_modules/ordinal": { "version": "1.0.3", - "dev": true, "license": "MIT" }, "node_modules/os-tmpdir": { "version": "1.0.2", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11378,7 +11005,6 @@ }, "node_modules/p-limit": { "version": "1.3.0", - "dev": true, "license": "MIT", "dependencies": { "p-try": "^1.0.0" @@ -11389,7 +11015,6 @@ }, "node_modules/p-locate": { "version": "2.0.0", - "dev": true, "license": "MIT", "dependencies": { "p-limit": "^1.1.0" @@ -11400,7 +11025,6 @@ }, "node_modules/p-map": { "version": "4.0.0", - "dev": true, "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" @@ -11414,7 +11038,6 @@ }, "node_modules/p-try": { "version": "1.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -11474,8 +11097,7 @@ } }, "node_modules/parse-cache-control": { - "version": "1.0.1", - "dev": true + "version": "1.0.1" }, "node_modules/parse-json": { "version": "5.2.0", @@ -11496,7 +11118,6 @@ }, "node_modules/path-exists": { "version": "3.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -11504,7 +11125,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11519,13 +11139,13 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -11539,7 +11159,6 @@ }, "node_modules/path-type": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11551,7 +11170,6 @@ }, "node_modules/pathval": { "version": "1.1.1", - "dev": true, "license": "MIT", "engines": { "node": "*" @@ -11559,7 +11177,6 @@ }, "node_modules/pbkdf2": { "version": "3.1.2", - "dev": true, "license": "MIT", "dependencies": { "create-hash": "^1.1.2", @@ -11588,7 +11205,6 @@ }, "node_modules/pify": { "version": "4.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -11788,7 +11404,6 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "dev": true, "license": "MIT" }, "node_modules/process-warning": { @@ -11797,7 +11412,6 @@ }, "node_modules/promise": { "version": "8.3.0", - "dev": true, "license": "MIT", "dependencies": { "asap": "~2.0.6" @@ -11818,7 +11432,6 @@ }, "node_modules/punycode": { "version": "2.3.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -12047,7 +11660,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "dev": true, "funding": [ { "type": "github", @@ -12085,7 +11697,6 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" @@ -12093,7 +11704,6 @@ }, "node_modules/raw-body": { "version": "2.5.2", - "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -12179,7 +11789,6 @@ }, "node_modules/rechoir": { "version": "0.6.2", - "dev": true, "dependencies": { "resolve": "^1.1.6" }, @@ -12189,7 +11798,6 @@ }, "node_modules/recursive-readdir": { "version": "2.2.3", - "dev": true, "license": "MIT", "dependencies": { "minimatch": "^3.0.5" @@ -12217,7 +11825,6 @@ }, "node_modules/reduce-flatten": { "version": "2.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -12266,7 +11873,6 @@ }, "node_modules/req-cwd": { "version": "2.0.0", - "dev": true, "license": "MIT", "dependencies": { "req-from": "^2.0.0" @@ -12277,7 +11883,6 @@ }, "node_modules/req-from": { "version": "2.0.0", - "dev": true, "license": "MIT", "dependencies": { "resolve-from": "^3.0.0" @@ -12288,7 +11893,6 @@ }, "node_modules/req-from/node_modules/resolve-from": { "version": "3.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -12303,7 +11907,6 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12315,7 +11918,6 @@ }, "node_modules/resolve": { "version": "1.17.0", - "dev": true, "license": "MIT", "dependencies": { "path-parse": "^1.0.6" @@ -12361,7 +11963,6 @@ }, "node_modules/reusify": { "version": "1.0.4", - "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -12369,19 +11970,71 @@ } }, "node_modules/rimraf": { - "version": "2.7.1", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", "dev": true, - "license": "ISC", "dependencies": { - "glob": "^7.1.3" + "glob": "^10.3.7" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ripemd160": { "version": "2.0.2", - "dev": true, "license": "MIT", "dependencies": { "hash-base": "^3.0.0", @@ -12390,7 +12043,6 @@ }, "node_modules/rlp": { "version": "2.2.7", - "dev": true, "license": "MPL-2.0", "dependencies": { "bn.js": "^5.2.0" @@ -12432,7 +12084,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "dev": true, "funding": [ { "type": "github", @@ -12495,12 +12146,10 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, "license": "MIT" }, "node_modules/sc-istanbul": { "version": "0.4.6", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "abbrev": "1.0.x", @@ -12524,7 +12173,6 @@ }, "node_modules/sc-istanbul/node_modules/argparse": { "version": "1.0.10", - "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -12532,7 +12180,6 @@ }, "node_modules/sc-istanbul/node_modules/glob": { "version": "5.0.15", - "dev": true, "license": "ISC", "dependencies": { "inflight": "^1.0.4", @@ -12547,7 +12194,6 @@ }, "node_modules/sc-istanbul/node_modules/has-flag": { "version": "1.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12555,7 +12201,6 @@ }, "node_modules/sc-istanbul/node_modules/js-yaml": { "version": "3.14.1", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -12567,7 +12212,6 @@ }, "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { "version": "4.0.1", - "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -12579,12 +12223,10 @@ }, "node_modules/sc-istanbul/node_modules/resolve": { "version": "1.1.7", - "dev": true, "license": "MIT" }, "node_modules/sc-istanbul/node_modules/supports-color": { "version": "3.2.3", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^1.0.0" @@ -12595,7 +12237,6 @@ }, "node_modules/sc-istanbul/node_modules/which": { "version": "1.3.1", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -12617,7 +12258,6 @@ }, "node_modules/secp256k1": { "version": "4.0.3", - "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -12631,7 +12271,6 @@ }, "node_modules/semver": { "version": "6.3.1", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -12639,7 +12278,6 @@ }, "node_modules/serialize-javascript": { "version": "6.0.0", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" @@ -12677,12 +12315,10 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "dev": true, "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", - "dev": true, "license": "ISC" }, "node_modules/sha.js": { @@ -12698,7 +12334,6 @@ }, "node_modules/sha1": { "version": "1.1.1", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "charenc": ">= 0.0.1", @@ -12727,7 +12362,6 @@ }, "node_modules/shelljs": { "version": "0.8.5", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "glob": "^7.0.0", @@ -12765,7 +12399,6 @@ }, "node_modules/slash": { "version": "3.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -12773,7 +12406,6 @@ }, "node_modules/slice-ansi": { "version": "4.0.0", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -12789,7 +12421,6 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -12803,7 +12434,6 @@ }, "node_modules/slice-ansi/node_modules/color-convert": { "version": "2.0.1", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -12814,12 +12444,10 @@ }, "node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.4", - "dev": true, "license": "MIT" }, "node_modules/solc": { "version": "0.7.3", - "dev": true, "license": "MIT", "dependencies": { "command-exists": "^1.2.8", @@ -12841,7 +12469,6 @@ }, "node_modules/solc/node_modules/fs-extra": { "version": "0.30.0", - "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", @@ -12853,15 +12480,24 @@ }, "node_modules/solc/node_modules/jsonfile": { "version": "2.4.0", - "dev": true, "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, + "node_modules/solc/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/solc/node_modules/semver": { "version": "5.7.2", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver" @@ -13062,7 +12698,6 @@ }, "node_modules/solidity-coverage": { "version": "0.8.7", - "dev": true, "license": "ISC", "dependencies": { "@ethersproject/abi": "^5.0.9", @@ -13094,12 +12729,10 @@ }, "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { "version": "0.18.0", - "dev": true, "license": "MIT" }, "node_modules/solidity-coverage/node_modules/fs-extra": { "version": "8.1.0", - "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -13112,7 +12745,6 @@ }, "node_modules/solidity-coverage/node_modules/globby": { "version": "10.0.2", - "dev": true, "license": "MIT", "dependencies": { "@types/glob": "^7.1.1", @@ -13130,7 +12762,6 @@ }, "node_modules/solidity-coverage/node_modules/lru-cache": { "version": "6.0.0", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -13141,7 +12772,6 @@ }, "node_modules/solidity-coverage/node_modules/semver": { "version": "7.5.4", - "dev": true, "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" @@ -13162,7 +12792,6 @@ }, "node_modules/source-map": { "version": "0.6.1", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -13177,7 +12806,6 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -13200,12 +12828,10 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/stacktrace-parser": { "version": "0.1.10", - "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.7.1" @@ -13216,7 +12842,6 @@ }, "node_modules/stacktrace-parser/node_modules/type-fest": { "version": "0.7.1", - "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" @@ -13228,7 +12853,6 @@ }, "node_modules/statuses": { "version": "2.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -13276,7 +12900,6 @@ }, "node_modules/string-format": { "version": "2.0.0", - "dev": true, "license": "WTFPL OR MIT" }, "node_modules/string-width": { @@ -13294,8 +12917,9 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13360,8 +12984,9 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13389,7 +13014,6 @@ }, "node_modules/strip-hex-prefix": { "version": "1.0.0", - "dev": true, "license": "MIT", "dependencies": { "is-hex-prefixed": "1.0.0" @@ -13401,7 +13025,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -13423,7 +13046,6 @@ }, "node_modules/supports-color": { "version": "5.5.0", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -13445,7 +13067,6 @@ }, "node_modules/sync-request": { "version": "6.1.0", - "dev": true, "license": "MIT", "dependencies": { "http-response-object": "^3.0.1", @@ -13458,7 +13079,6 @@ }, "node_modules/sync-rpc": { "version": "1.3.6", - "dev": true, "license": "MIT", "dependencies": { "get-port": "^3.1.0" @@ -13496,7 +13116,6 @@ }, "node_modules/table": { "version": "6.8.1", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", @@ -13511,7 +13130,6 @@ }, "node_modules/table-layout": { "version": "1.0.2", - "dev": true, "license": "MIT", "dependencies": { "array-back": "^4.0.1", @@ -13525,7 +13143,6 @@ }, "node_modules/table-layout/node_modules/array-back": { "version": "4.0.2", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -13533,7 +13150,6 @@ }, "node_modules/table-layout/node_modules/typical": { "version": "5.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -13541,7 +13157,6 @@ }, "node_modules/table/node_modules/ajv": { "version": "8.12.0", - "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -13556,7 +13171,6 @@ }, "node_modules/table/node_modules/json-schema-traverse": { "version": "1.0.0", - "dev": true, "license": "MIT" }, "node_modules/text-table": { @@ -13566,7 +13180,6 @@ }, "node_modules/then-request": { "version": "6.0.2", - "dev": true, "license": "MIT", "dependencies": { "@types/concat-stream": "^1.6.0", @@ -13587,12 +13200,10 @@ }, "node_modules/then-request/node_modules/@types/node": { "version": "8.10.66", - "dev": true, "license": "MIT" }, "node_modules/then-request/node_modules/form-data": { "version": "2.5.1", - "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -13612,7 +13223,6 @@ }, "node_modules/tmp": { "version": "0.0.33", - "dev": true, "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" @@ -13633,7 +13243,6 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.6" @@ -13656,7 +13265,6 @@ }, "node_modules/ts-command-line-args": { "version": "2.5.1", - "dev": true, "license": "ISC", "dependencies": { "chalk": "^4.1.0", @@ -13670,7 +13278,6 @@ }, "node_modules/ts-command-line-args/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -13684,7 +13291,6 @@ }, "node_modules/ts-command-line-args/node_modules/chalk": { "version": "4.1.2", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -13699,7 +13305,6 @@ }, "node_modules/ts-command-line-args/node_modules/color-convert": { "version": "2.0.1", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -13710,12 +13315,10 @@ }, "node_modules/ts-command-line-args/node_modules/color-name": { "version": "1.1.4", - "dev": true, "license": "MIT" }, "node_modules/ts-command-line-args/node_modules/has-flag": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -13723,7 +13326,6 @@ }, "node_modules/ts-command-line-args/node_modules/supports-color": { "version": "7.2.0", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -13734,7 +13336,6 @@ }, "node_modules/ts-essentials": { "version": "7.0.3", - "dev": true, "license": "MIT", "peerDependencies": { "typescript": ">=3.7.0" @@ -13742,7 +13343,6 @@ }, "node_modules/ts-node": { "version": "10.9.2", - "dev": true, "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -13784,7 +13384,6 @@ }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -13807,7 +13406,6 @@ }, "node_modules/tsort": { "version": "0.0.1", - "dev": true, "license": "MIT" }, "node_modules/tsx": { @@ -13830,12 +13428,10 @@ }, "node_modules/tweetnacl": { "version": "1.0.3", - "dev": true, "license": "Unlicense" }, "node_modules/tweetnacl-util": { "version": "0.15.1", - "dev": true, "license": "Unlicense" }, "node_modules/type": { @@ -13855,7 +13451,6 @@ }, "node_modules/type-detect": { "version": "4.0.8", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -13863,7 +13458,6 @@ }, "node_modules/type-fest": { "version": "0.21.3", - "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -13874,7 +13468,6 @@ }, "node_modules/typechain": { "version": "8.3.2", - "dev": true, "license": "MIT", "dependencies": { "@types/prettier": "^2.1.1", @@ -13897,7 +13490,6 @@ }, "node_modules/typechain/node_modules/glob": { "version": "7.1.7", - "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -13916,7 +13508,6 @@ }, "node_modules/typechain/node_modules/mkdirp": { "version": "1.0.4", - "dev": true, "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" @@ -13927,7 +13518,6 @@ }, "node_modules/typechain/node_modules/prettier": { "version": "2.8.8", - "dev": true, "license": "MIT", "bin": { "prettier": "bin-prettier.js" @@ -14002,7 +13592,6 @@ }, "node_modules/typedarray": { "version": "0.0.6", - "dev": true, "license": "MIT" }, "node_modules/typedarray-to-buffer": { @@ -14025,7 +13614,6 @@ }, "node_modules/typical": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -14037,7 +13625,6 @@ }, "node_modules/uglify-js": { "version": "3.17.4", - "dev": true, "license": "BSD-2-Clause", "optional": true, "peer": true, @@ -14075,7 +13662,6 @@ }, "node_modules/undici": { "version": "5.28.3", - "dev": true, "license": "MIT", "dependencies": { "@fastify/busboy": "^2.0.0" @@ -14086,7 +13672,6 @@ }, "node_modules/undici-types": { "version": "5.26.5", - "dev": true, "license": "MIT" }, "node_modules/unenv": { @@ -14106,7 +13691,6 @@ }, "node_modules/universalify": { "version": "0.1.2", - "dev": true, "license": "MIT", "engines": { "node": ">= 4.0.0" @@ -14114,7 +13698,6 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -14207,7 +13790,6 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" @@ -14233,7 +13815,6 @@ }, "node_modules/utf8": { "version": "3.0.0", - "dev": true, "license": "MIT" }, "node_modules/util-deprecate": { @@ -14242,7 +13823,6 @@ }, "node_modules/uuid": { "version": "8.3.2", - "dev": true, "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -14250,7 +13830,6 @@ }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "dev": true, "license": "MIT" }, "node_modules/valtio": { @@ -14463,7 +14042,6 @@ }, "node_modules/web3-utils": { "version": "1.10.3", - "dev": true, "license": "LGPL-3.0", "dependencies": { "@ethereumjs/util": "^8.1.0", @@ -14481,7 +14059,6 @@ }, "node_modules/web3-utils/node_modules/@noble/curves": { "version": "1.1.0", - "dev": true, "license": "MIT", "dependencies": { "@noble/hashes": "1.3.1" @@ -14492,7 +14069,6 @@ }, "node_modules/web3-utils/node_modules/@noble/hashes": { "version": "1.3.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 16" @@ -14503,7 +14079,6 @@ }, "node_modules/web3-utils/node_modules/@scure/bip32": { "version": "1.3.1", - "dev": true, "license": "MIT", "dependencies": { "@noble/curves": "~1.1.0", @@ -14516,7 +14091,6 @@ }, "node_modules/web3-utils/node_modules/@scure/bip39": { "version": "1.2.1", - "dev": true, "license": "MIT", "dependencies": { "@noble/hashes": "~1.3.0", @@ -14528,7 +14102,6 @@ }, "node_modules/web3-utils/node_modules/ethereum-cryptography": { "version": "2.1.2", - "dev": true, "license": "MIT", "dependencies": { "@noble/curves": "1.1.0", @@ -14627,7 +14200,6 @@ }, "node_modules/widest-line": { "version": "3.1.0", - "dev": true, "license": "MIT", "dependencies": { "string-width": "^4.0.0" @@ -14638,7 +14210,6 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -14646,12 +14217,10 @@ }, "node_modules/wordwrap": { "version": "1.0.0", - "dev": true, "license": "MIT" }, "node_modules/wordwrapjs": { "version": "4.0.1", - "dev": true, "license": "MIT", "dependencies": { "reduce-flatten": "^2.0.0", @@ -14663,7 +14232,6 @@ }, "node_modules/wordwrapjs/node_modules/typical": { "version": "5.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -14671,12 +14239,10 @@ }, "node_modules/workerpool": { "version": "6.2.1", - "dev": true, "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -14693,8 +14259,9 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -14709,8 +14276,9 @@ }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14723,8 +14291,9 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14734,12 +14303,12 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -14753,7 +14322,6 @@ }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -14764,7 +14332,6 @@ }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", - "dev": true, "license": "MIT" }, "node_modules/wrappy": { @@ -14799,7 +14366,6 @@ }, "node_modules/y18n": { "version": "5.0.8", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -14818,7 +14384,6 @@ }, "node_modules/yargs": { "version": "16.2.0", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^7.0.2", @@ -14835,7 +14400,6 @@ }, "node_modules/yargs-parser": { "version": "20.2.4", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -14843,7 +14407,6 @@ }, "node_modules/yargs-unparser": { "version": "2.0.0", - "dev": true, "license": "MIT", "dependencies": { "camelcase": "^6.0.0", @@ -14857,7 +14420,6 @@ }, "node_modules/yn": { "version": "3.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -14865,7 +14427,6 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -15138,13 +14699,314 @@ "packages/4337-local-bundler": { "name": "@safe-global/safe-4337-local-bundler", "version": "0.0.0", - "hasInstallScript": true, "license": "LGPL-3.0-only", "dependencies": { - "hardhat-deploy": "^0.12.1" + "@nomicfoundation/hardhat-toolbox": "^4.0.0", + "@safe-global/safe-4337-provider": "^0.0.0", + "ethers": "^6.11.1", + "hardhat-deploy": "^0.12.1", + "node-fetch": "^2.7.0" }, "bin": { - "local-bundler-test": "dist/bin/test.js" + "4337-local-bundler-test": "dist/bin/test.js" + } + }, + "packages/4337-local-bundler/node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" + }, + "packages/4337-local-bundler/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/4337-local-bundler/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/4337-local-bundler/node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.6.tgz", + "integrity": "sha512-Te1Uyo9oJcTCF0Jy9dztaLpshmlpjLf2yPtWXlXuLjMt3RRSmJLm/+rKVTW6gfadAEs12U/it6D0ZRnnRGiICQ==", + "peer": true, + "dependencies": { + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "chai": "^4.2.0", + "ethers": "^6.1.0", + "hardhat": "^2.9.4" + } + }, + "packages/4337-local-bundler/node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.5.tgz", + "integrity": "sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw==", + "peer": true, + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "ethers": "^6.1.0", + "hardhat": "^2.0.0" + } + }, + "packages/4337-local-bundler/node_modules/@nomicfoundation/hardhat-toolbox": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-4.0.0.tgz", + "integrity": "sha512-jhcWHp0aHaL0aDYj8IJl80v4SZXWMS1A2XxXa1CA6pBiFfJKuZinCkO6wb+POAt0LIfXB3gA3AgdcOccrcwBwA==", + "peerDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.0.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=16.0.0", + "chai": "^4.2.0", + "ethers": "^6.4.0", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.3.0", + "typescript": ">=4.5.0" + } + }, + "packages/4337-local-bundler/node_modules/@typechain/ethers-v6": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", + "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", + "peer": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.2", + "typescript": ">=4.7.0" + } + }, + "packages/4337-local-bundler/node_modules/@typechain/hardhat": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", + "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", + "peer": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@typechain/ethers-v6": "^0.5.1", + "ethers": "^6.1.0", + "hardhat": "^2.9.9", + "typechain": "^8.3.2" + } + }, + "packages/4337-local-bundler/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "packages/4337-local-bundler/node_modules/ethers": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.11.1.tgz", + "integrity": "sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/4337-local-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/4337-local-bundler/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "packages/4337-local-bundler/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "packages/4337-local-bundler/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "packages/4337-local-bundler/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "packages/4337-provider": { + "name": "@safe-global/safe-4337-provider", + "version": "0.0.0", + "license": "LGPL-3.0-only", + "dependencies": { + "ethers": "^6.11.1" + } + }, + "packages/4337-provider/node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" + }, + "packages/4337-provider/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/4337-provider/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/4337-provider/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "packages/4337-provider/node_modules/ethers": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.11.1.tgz", + "integrity": "sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/4337-provider/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "packages/4337-provider/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } } } diff --git a/package.json b/package.json index aa48f7437..edccf0ff0 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "description": "A monorepo for Safe modules", "main": "dist/index.js", "workspaces": [ - "modules/*", "packages/*", + "modules/*", "examples/*" ], "scripts": { @@ -39,6 +39,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", "prettier": "^3.2.5", - "prettier-plugin-solidity": "^1.3.1" + "prettier-plugin-solidity": "^1.3.1", + "rimraf": "^5.0.5" } } diff --git a/packages/4337-local-bundler/package.json b/packages/4337-local-bundler/package.json index ceaf6e913..d9d5f3e7a 100644 --- a/packages/4337-local-bundler/package.json +++ b/packages/4337-local-bundler/package.json @@ -9,14 +9,15 @@ "4337-local-bundler-test": "dist/bin/test.js" }, "scripts": { - "build": "npx rimraf dist && tsc && chmod +x dist/bin/*.js", + "build": "rimraf dist && tsc && chmod +x dist/bin/*.js", "lint": "eslint .", - "prepack": "npm run build", - "prepublish": "npm run build", - "postinstall": "npm run build" + "prepare": "npm run build -w ../4337-provider && npm run build" }, "dependencies": { + "@nomicfoundation/hardhat-toolbox": "^4.0.0", + "@safe-global/safe-4337-provider": "^0.0.0", "hardhat-deploy": "^0.12.1", + "ethers": "^6.11.1", "node-fetch": "^2.7.0" } } diff --git a/packages/4337-local-bundler/src/index.ts b/packages/4337-local-bundler/src/index.ts index 3d2da4d3a..ef730dc9b 100644 --- a/packages/4337-local-bundler/src/index.ts +++ b/packages/4337-local-bundler/src/index.ts @@ -1,6 +1,6 @@ -import 'hardhat-deploy' - import deployEntryPoint from './deploy/entrypoint' import deploySafe from './deploy/safe' +export * from './testing' + export { deployEntryPoint, deploySafe } diff --git a/modules/4337/test/utils/e2e.ts b/packages/4337-local-bundler/src/testing.ts similarity index 68% rename from modules/4337/test/utils/e2e.ts rename to packages/4337-local-bundler/src/testing.ts index 445deae4a..396ca4592 100644 --- a/modules/4337/test/utils/e2e.ts +++ b/packages/4337-local-bundler/src/testing.ts @@ -1,12 +1,22 @@ +import { MultiProvider4337, UserOperation } from '@safe-global/safe-4337-provider' +import { HDNodeWallet } from 'ethers' import { deployments, ethers } from 'hardhat' -import { MultiProvider4337 } from '../../src/utils/safe' -import { UserOperation } from '../../src/utils/userOp' -import { AddressLike, BigNumberish, BytesLike, HDNodeWallet } from 'ethers' export const BUNDLER_URL = process.env.TEST_BUNLDER_URL || 'http://localhost:3000/rpc' export const BUNDLER_MNEMONIC = process.env.TEST_BUNDLER_MNEMONIC || 'test test test test test test test test test test test junk' -export async function prepareAccounts(mnemonic = BUNDLER_MNEMONIC, count = 1): Promise { +export type PrepareAccountOptions = { + mnemonic: string + count: number +} + +export async function prepareAccounts(options: Partial = {}): Promise { + const { mnemonic, count } = { + mnemonic: BUNDLER_MNEMONIC, + count: 1, + ...options, + } + const bundler = ethers.HDNodeWallet.fromPhrase(mnemonic).connect(ethers.provider) const accounts = [...Array(count)].map(() => ethers.Wallet.createRandom(ethers.provider)) @@ -39,18 +49,3 @@ export async function waitForUserOp({ sender, nonce }: Pick setTimeout(resolve, 10)) } } - -export interface MultiSendTransaction { - op: 0 | 1 - to: AddressLike - value?: BigNumberish - data: BytesLike -} - -export function encodeMultiSendTransactions(transactions: MultiSendTransaction[]) { - return ethers.concat( - transactions.map(({ op, to, value, data }) => - ethers.solidityPacked(['uint8', 'address', 'uint256', 'uint256', 'bytes'], [op, to, value ?? 0, ethers.dataLength(data), data]), - ), - ) -} diff --git a/packages/4337-local-bundler/src/types/hardhat.ts b/packages/4337-local-bundler/src/types/hardhat.ts new file mode 100644 index 000000000..23e5ec22c --- /dev/null +++ b/packages/4337-local-bundler/src/types/hardhat.ts @@ -0,0 +1,2 @@ +import '@nomicfoundation/hardhat-ethers' +import 'hardhat-deploy' diff --git a/packages/4337-provider/.eslintignore b/packages/4337-provider/.eslintignore new file mode 100644 index 000000000..849ddff3b --- /dev/null +++ b/packages/4337-provider/.eslintignore @@ -0,0 +1 @@ +dist/ diff --git a/packages/4337-provider/.gitignore b/packages/4337-provider/.gitignore new file mode 100644 index 000000000..849ddff3b --- /dev/null +++ b/packages/4337-provider/.gitignore @@ -0,0 +1 @@ +dist/ diff --git a/packages/4337-provider/README.md b/packages/4337-provider/README.md new file mode 100644 index 000000000..d61f341c9 --- /dev/null +++ b/packages/4337-provider/README.md @@ -0,0 +1,3 @@ +# ERC-4337 Ethers Provider + +This package contains an Ethers.js RPC provider with support for interacting with ERC-4337 bundlers. diff --git a/packages/4337-provider/package.json b/packages/4337-provider/package.json new file mode 100644 index 000000000..01cd048d3 --- /dev/null +++ b/packages/4337-provider/package.json @@ -0,0 +1,16 @@ +{ + "name": "@safe-global/safe-4337-provider", + "version": "0.0.0", + "private": true, + "license": "LGPL-3.0-only", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "build": "rimraf dist && tsc", + "lint": "eslint .", + "prepare": "npm run build" + }, + "dependencies": { + "ethers": "^6.11.1" + } +} diff --git a/packages/4337-provider/src/index.ts b/packages/4337-provider/src/index.ts new file mode 100644 index 000000000..c17cea971 --- /dev/null +++ b/packages/4337-provider/src/index.ts @@ -0,0 +1,74 @@ +import { ethers, AddressLike, BigNumberish, BytesLike, Provider, JsonRpcProvider } from 'ethers' + +export interface RpcProvider extends Provider { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + send(method: string, params: unknown[]): Promise +} + +export type UserOperation = { + sender: string + nonce: BigNumberish + factory?: string + factoryData?: BytesLike + callData: BytesLike + callGasLimit: BigNumberish + verificationGasLimit: BigNumberish + preVerificationGas: BigNumberish + maxFeePerGas: BigNumberish + maxPriorityFeePerGas: BigNumberish + paymaster?: string + paymasterVerificationGasLimit?: BigNumberish + paymasterPostOpGasLimit?: BigNumberish + paymasterData?: BytesLike + signature: BytesLike +} + +export class MultiProvider4337 extends JsonRpcProvider { + generalProvider: RpcProvider + constructor(aaProviderUrl: string, generalProvider: RpcProvider) { + super(aaProviderUrl) + this.generalProvider = generalProvider + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + send(method: string, params: unknown[]): Promise { + if ( + [ + 'eth_supportedEntryPoints', + 'eth_estimateUserOperationGas', + 'eth_sendUserOperation', + 'eth_getUserOperationByHash', + 'eth_getUserOperationReceipt', + ].indexOf(method) >= 0 + ) { + return super.send(method, params) + } else { + return this.generalProvider.send(method, params) + } + } + + public async sendUserOperation(userOp: UserOperation, entryPoint: AddressLike): Promise { + const jsonUserOp = { + sender: ethers.getAddress(userOp.sender), + nonce: ethers.toBeHex(userOp.nonce), + callData: ethers.hexlify(userOp.callData), + callGasLimit: ethers.toBeHex(userOp.callGasLimit), + verificationGasLimit: ethers.toBeHex(userOp.verificationGasLimit), + preVerificationGas: ethers.toBeHex(userOp.preVerificationGas), + maxFeePerGas: ethers.toBeHex(userOp.maxFeePerGas), + maxPriorityFeePerGas: ethers.toBeHex(userOp.maxPriorityFeePerGas), + signature: ethers.hexlify(userOp.signature), + } as Record + if (userOp.factory) { + jsonUserOp.factory = ethers.getAddress(userOp.factory) + jsonUserOp.factoryData = ethers.hexlify(userOp.factoryData!) + } + if (userOp.paymaster) { + jsonUserOp.paymaster = ethers.getAddress(userOp.paymaster) + jsonUserOp.paymasterVerificationGasLimit = ethers.toBeHex(userOp.paymasterVerificationGasLimit!) + jsonUserOp.paymasterPostOpGasLimit = ethers.toBeHex(userOp.paymasterPostOpGasLimit!) + jsonUserOp.paymasterData = ethers.hexlify(userOp.paymasterData!) + } + return await super.send('eth_sendUserOperation', [jsonUserOp, await ethers.resolveAddress(entryPoint, this)]) + } +} diff --git a/packages/4337-provider/tsconfig.json b/packages/4337-provider/tsconfig.json new file mode 100644 index 000000000..0ae3997d0 --- /dev/null +++ b/packages/4337-provider/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "declaration": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "outDir": "./dist", + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true + } +}