diff --git a/.env.example b/.env.example
index c02030ac18..53fd0d8d31 100644
--- a/.env.example
+++ b/.env.example
@@ -1,14 +1,11 @@
-VITE_ANVIL_FORK_URL=
-VITE_ANVIL_FORK_URL_SEPOLIA=
-VITE_ANVIL_FORK_URL_OPTIMISM=
-VITE_ANVIL_FORK_URL_OPTIMISM_SEPOLIA=
-VITE_ANVIL_FORK_URL_GOERLI=
-VITE_ANVIL_FORK_URL_ZKSYNC=
+VITE_TEVM_FORK_URL=
+VITE_TEVM_FORK_URL_OPTIMISM=
+VITE_TEVM_FORK_URL_SEPOLIA=
+VITE_TEVM_FORK_URL_ZKSYNC=
VITE_BATCH_JSON_RPC=false
VITE_BATCH_MULTICALL=true
-VITE_NETWORK_TRANSPORT_MODE=http
VITE_TEMPO_ENV=localnet # node environment. values: localnet|devnet|testnet
VITE_TEMPO_LOG=false # whether to enable logs, if VITE_TEMPO_ENV=localnet. values: true|debug|error|trace|warn|info
VITE_TEMPO_TAG=latest # docker image tag, if VITE_TEMPO_ENV=localnet.
-VITE_TEMPO_HTTP_LOG=false # whether to enable logs on HTTP RPC requests. values: true|false
\ No newline at end of file
+VITE_TEMPO_HTTP_LOG=false # whether to enable logs on HTTP RPC requests. values: true|false
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index bc0d973b53..5449de1d4d 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -19,12 +19,11 @@ This guide is intended to help you get started with contributing. By following t
1. [Cloning the repository](#cloning-the-repository)
2. [Installing Node.js and pnpm](#installing-nodejs-and-pnpm)
-3. [Installing Foundry](#installing-foundry)
-4. [Installing dependencies](#installing-dependencies)
-5. [Running the test suite](#running-the-test-suite)
-6. [Writing documentation](#writing-documentation)
-7. [Submitting a pull request](#submitting-a-pull-request)
-8. [Versioning](#versioning)
+3. [Installing dependencies](#installing-dependencies)
+4. [Running the test suite](#running-the-test-suite)
+5. [Writing documentation](#writing-documentation)
+6. [Submitting a pull request](#submitting-a-pull-request)
+7. [Versioning](#versioning)
---
@@ -70,22 +69,6 @@ If the versions are not correct or you don't have Node.js or pnpm installed, dow
---
-### Installing Foundry
-
-Viem uses [Foundry](https://book.getfoundry.sh/) for testing. We run a local [Anvil](https://github.com/foundry-rs/foundry/tree/master/anvil) instance against a forked Ethereum node, where we can also use tools like [Forge](https://book.getfoundry.sh/forge/) to deploy test contracts to it.
-
-Install Foundry using the following command:
-
-```bash
-curl -L https://foundry.paradigm.xyz | bash
-```
-
-
-
----
-
### Installing dependencies
Once in the project's root directory, run the following command to install the project's dependencies:
@@ -107,16 +90,16 @@ After the install completes, pnpm links packages across the project for developm
First, add the following to your environment (recommended to use [`direnv`](https://github.com/direnv/direnv)):
```bash
-VITE_ANVIL_FORK_URL=
-VITE_ANVIL_FORK_URL_OPTIMISM=
-VITE_ANVIL_FORK_URL_OPTIMISM_SEPOLIA=
-VITE_ANVIL_FORK_URL_SEPOLIA=
-VITE_ANVIL_FORK_URL_ZKSYNC=
+VITE_TEVM_FORK_URL=
VITE_BATCH_MULTICALL=false
-VITE_NETWORK_TRANSPORT_MODE=http
```
-`VITE_ANVIL_FORK_URL` can be for any RPC service provider (e.g. Alchemy or Infura) for the mainnet. Now you are ready to run the tests!
+`VITE_TEVM_FORK_URL` can be any archive-capable mainnet RPC service (for
+example, Alchemy or Infura). Tevm forks the pinned test block into each Vitest
+worker and runs the EVM in-process. Tests that fork other networks use the
+optional `VITE_TEVM_FORK_URL_OPTIMISM`, `VITE_TEVM_FORK_URL_SEPOLIA`, and
+`VITE_TEVM_FORK_URL_ZKSYNC` variables. Their endpoints must also retain the
+historical state at the fixture's pinned block.
- `pnpm test` — runs tests in watch mode
@@ -124,6 +107,15 @@ Sometimes there may be some tests which fail unexpectedly – you can press `f`
When adding new features or fixing bugs, it's important to add test cases to cover the new/updated behavior.
+All core tests use the in-process Tevm harness. See
+[`test/README.md`](../test/README.md) for the fixture API, matcher catalog, and
+the WebSocket/IPC blocker that is intentionally excluded from CI until Tevm
+provides those servers.
+
+Foundry is not needed for the default build or test suite. Install it only to
+run the explicitly opt-in WebSocket/IPC blocker project documented in the test
+README.
+
diff --git a/.github/actions/install-dependencies/action.yml b/.github/actions/install-dependencies/action.yml
index 601ba72cc4..2f29fbe8d0 100644
--- a/.github/actions/install-dependencies/action.yml
+++ b/.github/actions/install-dependencies/action.yml
@@ -4,11 +4,6 @@ description: "Prepare repository and all dependencies"
runs:
using: "composite"
steps:
- - name: Set up foundry
- uses: foundry-rs/foundry-toolchain@v1
- with:
- version: nightly-a3d78b09bd0b7f5170368e6c0db794f2431dadae
-
- name: Set up pnpm
uses: wevm/actions/.github/actions/pnpm@main
with:
diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml
index 0713d3e889..9df3830bc3 100644
--- a/.github/workflows/verify.yml
+++ b/.github/workflows/verify.yml
@@ -80,10 +80,6 @@ jobs:
- run: pnpm i -d -w typescript@${{ matrix.version }}
- - name: Build contracts
- shell: bash
- run: pnpm contracts:build
-
- name: Check types
run: pnpm check:types
@@ -91,7 +87,7 @@ jobs:
run: pnpm bench:types
test:
- name: 'Test Local (transport: ${{ matrix.transport-mode }}, multicall: ${{ matrix.multicall }}, ${{ matrix.shard }}/${{ matrix.total-shards }})'
+ name: 'Test Local (Tevm, multicall: ${{ matrix.multicall }}, ${{ matrix.shard }}/${{ matrix.total-shards }})'
runs-on: ubuntu-latest
timeout-minutes: 20
permissions:
@@ -100,7 +96,6 @@ jobs:
max-parallel: 3
matrix:
multicall: ['true', 'false']
- transport-mode: ['http', 'webSocket']
shard: [1, 2, 3]
total-shards: [3]
steps:
@@ -112,10 +107,6 @@ jobs:
- name: Install dependencies
uses: ./.github/actions/install-dependencies
- - name: Build contracts
- shell: bash
- run: pnpm contracts:build
-
- name: Test Local
uses: nick-fields/retry@v3
with:
@@ -124,13 +115,8 @@ jobs:
command: pnpm test --bail=1 --shard=${{ matrix.shard }}/${{ matrix.total-shards }}
env:
CI: true
- VITE_ANVIL_FORK_URL: ${{ secrets.VITE_ANVIL_FORK_URL }}
- VITE_ANVIL_FORK_URL_OPTIMISM: ${{ secrets.VITE_ANVIL_FORK_URL_OPTIMISM }}
- VITE_ANVIL_FORK_URL_OPTIMISM_SEPOLIA: ${{ secrets.VITE_ANVIL_FORK_URL_OPTIMISM_SEPOLIA }}
- VITE_ANVIL_FORK_URL_SEPOLIA: ${{ secrets.VITE_ANVIL_FORK_URL_SEPOLIA }}
- VITE_ANVIL_FORK_URL_ZKSYNC: ${{ secrets.VITE_ANVIL_FORK_URL_ZKSYNC }}
+ VITE_TEVM_FORK_URL: ${{ secrets.VITE_TEVM_FORK_URL }}
VITE_BATCH_MULTICALL: ${{ matrix.multicall }}
- VITE_NETWORK_TRANSPORT_MODE: ${{ matrix.transport-mode }}
VITE_SHARD_ID: ${{ matrix.shard }}
VITE_TEMPO_ENV: localnet
VITE_TEMPO_TAG: https://rpc.testnet.tempo.xyz
@@ -200,9 +186,6 @@ jobs:
with:
submodules: 'recursive'
- - name: Set up foundry
- uses: foundry-rs/foundry-toolchain@v1
-
- name: Set up pnpm
uses: wevm/actions/.github/actions/pnpm@main
diff --git a/.gitignore b/.gitignore
index e0b753dcf7..7dc492f4ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,8 @@ src/node/trustedSetups_esm.ts
**/trusted-setups/**/*.txt
.idea
.pnpm-store
+.smithers/
+smithers.db*
# local env files
.env
@@ -26,7 +28,6 @@ src/node/trustedSetups_esm.ts
.envrc
# tests
-generated.ts
vectors/**/*.json
# docs
diff --git a/contracts/generated.ts b/contracts/generated.ts
new file mode 100644
index 0000000000..196ba4504c
--- /dev/null
+++ b/contracts/generated.ts
@@ -0,0 +1,8348 @@
+export const Receiver = {
+ "abi": [
+ {
+ "type": "fallback",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "receive",
+ "stateMutability": "payable"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const Ownable = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "cancelOwnershipHandover",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "completeOwnershipHandover",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "owner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ownershipHandoverExpiresAt",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "renounceOwnership",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "requestOwnershipHandover",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "transferOwnership",
+ "inputs": [
+ {
+ "name": "newOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "event",
+ "name": "OwnershipHandoverCanceled",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "OwnershipHandoverRequested",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "OwnershipTransferred",
+ "inputs": [
+ {
+ "name": "oldOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "newOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "AlreadyInitialized",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "NewOwnerIsZeroAddress",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "NoHandoverRequest",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "Unauthorized",
+ "inputs": []
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const INonceManager = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "getNonce",
+ "inputs": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "key",
+ "type": "uint192",
+ "internalType": "uint192"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "incrementNonce",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "uint192",
+ "internalType": "uint192"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const IStakeManager = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "addStake",
+ "inputs": [
+ {
+ "name": "_unstakeDelaySec",
+ "type": "uint32",
+ "internalType": "uint32"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "balanceOf",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "depositTo",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "getDepositInfo",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "info",
+ "type": "tuple",
+ "internalType": "struct IStakeManager.DepositInfo",
+ "components": [
+ {
+ "name": "deposit",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "staked",
+ "type": "bool",
+ "internalType": "bool"
+ },
+ {
+ "name": "stake",
+ "type": "uint112",
+ "internalType": "uint112"
+ },
+ {
+ "name": "unstakeDelaySec",
+ "type": "uint32",
+ "internalType": "uint32"
+ },
+ {
+ "name": "withdrawTime",
+ "type": "uint48",
+ "internalType": "uint48"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "unlockStake",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "withdrawStake",
+ "inputs": [
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "internalType": "address payable"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "withdrawTo",
+ "inputs": [
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "internalType": "address payable"
+ },
+ {
+ "name": "withdrawAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "Deposited",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "totalDeposit",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "StakeLocked",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "totalStaked",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "unstakeDelaySec",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "StakeUnlocked",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "withdrawTime",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "StakeWithdrawn",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "Withdrawn",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const IAggregator = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "aggregateSignatures",
+ "inputs": [
+ {
+ "name": "userOps",
+ "type": "tuple[]",
+ "internalType": "struct PackedUserOperation[]",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "aggregatedSignature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "validateSignatures",
+ "inputs": [
+ {
+ "name": "userOps",
+ "type": "tuple[]",
+ "internalType": "struct PackedUserOperation[]",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "validateUserOpSignature",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "sigForUserOp",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const IPaymaster = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "postOp",
+ "inputs": [
+ {
+ "name": "mode",
+ "type": "uint8",
+ "internalType": "enum IPaymaster.PostOpMode"
+ },
+ {
+ "name": "context",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "actualGasCost",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "actualUserOpFeePerGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "validatePaymasterUserOp",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "maxCost",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "context",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "validationData",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const IEntryPoint = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "addStake",
+ "inputs": [
+ {
+ "name": "_unstakeDelaySec",
+ "type": "uint32",
+ "internalType": "uint32"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "balanceOf",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "delegateAndRevert",
+ "inputs": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "depositTo",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "getDepositInfo",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "info",
+ "type": "tuple",
+ "internalType": "struct IStakeManager.DepositInfo",
+ "components": [
+ {
+ "name": "deposit",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "staked",
+ "type": "bool",
+ "internalType": "bool"
+ },
+ {
+ "name": "stake",
+ "type": "uint112",
+ "internalType": "uint112"
+ },
+ {
+ "name": "unstakeDelaySec",
+ "type": "uint32",
+ "internalType": "uint32"
+ },
+ {
+ "name": "withdrawTime",
+ "type": "uint48",
+ "internalType": "uint48"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getNonce",
+ "inputs": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "key",
+ "type": "uint192",
+ "internalType": "uint192"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getSenderAddress",
+ "inputs": [
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "getUserOpHash",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "handleAggregatedOps",
+ "inputs": [
+ {
+ "name": "opsPerAggregator",
+ "type": "tuple[]",
+ "internalType": "struct IEntryPoint.UserOpsPerAggregator[]",
+ "components": [
+ {
+ "name": "userOps",
+ "type": "tuple[]",
+ "internalType": "struct PackedUserOperation[]",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "aggregator",
+ "type": "address",
+ "internalType": "contract IAggregator"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "beneficiary",
+ "type": "address",
+ "internalType": "address payable"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "handleOps",
+ "inputs": [
+ {
+ "name": "ops",
+ "type": "tuple[]",
+ "internalType": "struct PackedUserOperation[]",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "beneficiary",
+ "type": "address",
+ "internalType": "address payable"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "incrementNonce",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "uint192",
+ "internalType": "uint192"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "unlockStake",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "withdrawStake",
+ "inputs": [
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "internalType": "address payable"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "withdrawTo",
+ "inputs": [
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "internalType": "address payable"
+ },
+ {
+ "name": "withdrawAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "AccountDeployed",
+ "inputs": [
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "indexed": true,
+ "internalType": "bytes32"
+ },
+ {
+ "name": "sender",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "factory",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ },
+ {
+ "name": "paymaster",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "BeforeExecution",
+ "inputs": [],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "Deposited",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "totalDeposit",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "PostOpRevertReason",
+ "inputs": [
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "indexed": true,
+ "internalType": "bytes32"
+ },
+ {
+ "name": "sender",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "revertReason",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "SignatureAggregatorChanged",
+ "inputs": [
+ {
+ "name": "aggregator",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "StakeLocked",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "totalStaked",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "unstakeDelaySec",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "StakeUnlocked",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "withdrawTime",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "StakeWithdrawn",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "UserOperationEvent",
+ "inputs": [
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "indexed": true,
+ "internalType": "bytes32"
+ },
+ {
+ "name": "sender",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "paymaster",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "success",
+ "type": "bool",
+ "indexed": false,
+ "internalType": "bool"
+ },
+ {
+ "name": "actualGasCost",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "actualGasUsed",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "UserOperationPrefundTooLow",
+ "inputs": [
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "indexed": true,
+ "internalType": "bytes32"
+ },
+ {
+ "name": "sender",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "UserOperationRevertReason",
+ "inputs": [
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "indexed": true,
+ "internalType": "bytes32"
+ },
+ {
+ "name": "sender",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "revertReason",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "Withdrawn",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "DelegateAndRevert",
+ "inputs": [
+ {
+ "name": "success",
+ "type": "bool",
+ "internalType": "bool"
+ },
+ {
+ "name": "ret",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "FailedOp",
+ "inputs": [
+ {
+ "name": "opIndex",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "reason",
+ "type": "string",
+ "internalType": "string"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "FailedOpWithRevert",
+ "inputs": [
+ {
+ "name": "opIndex",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "reason",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "inner",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "PostOpReverted",
+ "inputs": [
+ {
+ "name": "returnData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SenderAddressResult",
+ "inputs": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SignatureValidationFailed",
+ "inputs": [
+ {
+ "name": "aggregator",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const IERC1271 = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "isValidSignature",
+ "inputs": [
+ {
+ "name": "hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "magicValue",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const SignatureCheckerLib = {
+ "abi": [],
+ "bytecode": {
+ "object": "0x6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220088345d653e0066c54d9cc2eddb5ace8b3e2354dedee81b7939d47d0dbcec06064736f6c634300081c0033",
+ "sourceMap": "1438:23716:49:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const UUPSUpgradeable = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "proxiableUUID",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "upgradeToAndCall",
+ "inputs": [
+ {
+ "name": "newImplementation",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "event",
+ "name": "Upgraded",
+ "inputs": [
+ {
+ "name": "implementation",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "UnauthorizedCallContext",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "UpgradeFailed",
+ "inputs": []
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const Delegation = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [
+ {
+ "name": "calls",
+ "type": "tuple[]",
+ "internalType": "struct Delegation.Call[]",
+ "components": [
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "to",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "ping",
+ "inputs": [
+ {
+ "name": "message",
+ "type": "string",
+ "internalType": "string"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "string",
+ "internalType": "string"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "CallEmitted",
+ "inputs": [
+ {
+ "name": "to",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b506108ea8061001c5f395ff3fe608060405260043610610028575f3560e01c80633adb191b1461002c578063a6d0ad6114610068575b5f5ffd5b348015610037575f5ffd5b50610052600480360381019061004d919061035f565b610084565b60405161005f9190610406565b60405180910390f35b610082600480360381019061007d9190610483565b6100ad565b005b606081604051602001610097919061052e565b6040516020818303038152906040529050919050565b5f5f90505b8282905081101561020d575f8383838181106100d1576100d0610553565b5b90506020028101906100e39190610584565b6100ec9061075b565b90505f816020015173ffffffffffffffffffffffffffffffffffffffff168260400151835f015160405161012091906107b1565b5f6040518083038185875af1925050503d805f811461015a576040519150601f19603f3d011682016040523d82523d5f602084013e61015f565b606091505b50509050806101a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019a90610811565b60405180910390fd5b816020015173ffffffffffffffffffffffffffffffffffffffff167fc19ac7d6ae9cf23179402a936b770e247d2f9c1b36432936b14e4080146aaa3f8360400151845f01516040516101f6929190610886565b60405180910390a2505080806001019150506100b2565b505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6102718261022b565b810181811067ffffffffffffffff821117156102905761028f61023b565b5b80604052505050565b5f6102a2610212565b90506102ae8282610268565b919050565b5f67ffffffffffffffff8211156102cd576102cc61023b565b5b6102d68261022b565b9050602081019050919050565b828183375f83830152505050565b5f6103036102fe846102b3565b610299565b90508281526020810184848401111561031f5761031e610227565b5b61032a8482856102e3565b509392505050565b5f82601f83011261034657610345610223565b5b81356103568482602086016102f1565b91505092915050565b5f602082840312156103745761037361021b565b5b5f82013567ffffffffffffffff8111156103915761039061021f565b5b61039d84828501610332565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6103d8826103a6565b6103e281856103b0565b93506103f28185602086016103c0565b6103fb8161022b565b840191505092915050565b5f6020820190508181035f83015261041e81846103ce565b905092915050565b5f5ffd5b5f5ffd5b5f5f83601f84011261044357610442610223565b5b8235905067ffffffffffffffff8111156104605761045f610426565b5b60208301915083602082028301111561047c5761047b61042a565b5b9250929050565b5f5f602083850312156104995761049861021b565b5b5f83013567ffffffffffffffff8111156104b6576104b561021f565b5b6104c28582860161042e565b92509250509250929050565b7f706f6e673a200000000000000000000000000000000000000000000000000000815250565b5f81905092915050565b5f610508826103a6565b61051281856104f4565b93506105228185602086016103c0565b80840191505092915050565b5f610538826104ce565b60068201915061054882846104fe565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5ffd5b5f8235600160600383360303811261059f5761059e610580565b5b80830191505092915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156105cd576105cc61023b565b5b6105d68261022b565b9050602081019050919050565b5f6105f56105f0846105b3565b610299565b90508281526020810184848401111561061157610610610227565b5b61061c8482856102e3565b509392505050565b5f82601f83011261063857610637610223565b5b81356106488482602086016105e3565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61067a82610651565b9050919050565b61068a81610670565b8114610694575f5ffd5b50565b5f813590506106a581610681565b92915050565b5f819050919050565b6106bd816106ab565b81146106c7575f5ffd5b50565b5f813590506106d8816106b4565b92915050565b5f606082840312156106f3576106f26105ab565b5b6106fd6060610299565b90505f82013567ffffffffffffffff81111561071c5761071b6105af565b5b61072884828501610624565b5f83015250602061073b84828501610697565b602083015250604061074f848285016106ca565b60408301525092915050565b5f61076636836106de565b9050919050565b5f81519050919050565b5f81905092915050565b5f61078b8261076d565b6107958185610777565b93506107a58185602086016103c0565b80840191505092915050565b5f6107bc8284610781565b915081905092915050565b7f63616c6c207265766572746564000000000000000000000000000000000000005f82015250565b5f6107fb600d836103b0565b9150610806826107c7565b602082019050919050565b5f6020820190508181035f830152610828816107ef565b9050919050565b610838816106ab565b82525050565b5f82825260208201905092915050565b5f6108588261076d565b610862818561083e565b93506108728185602086016103c0565b61087b8161022b565b840191505092915050565b5f6040820190506108995f83018561082f565b81810360208301526108ab818461084e565b9050939250505056fea2646970667358221220b0cf0f7a6cee3e30b6620ea1d0b970e49bda7cb23bfa3eff7774a5d86175ea3664736f6c634300081c0033",
+ "sourceMap": "64:673:79:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const IERC165 = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "supportsInterface",
+ "inputs": [
+ {
+ "name": "interfaceId",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const Simple7702AccountV08 = {
+ "abi": [
+ {
+ "type": "fallback",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "receive",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "entryPoint",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract IEntryPoint"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "executeBatch",
+ "inputs": [
+ {
+ "name": "calls",
+ "type": "tuple[]",
+ "internalType": "struct BaseAccount.Call[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "getNonce",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "isValidSignature",
+ "inputs": [
+ {
+ "name": "hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "magicValue",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "onERC1155BatchReceived",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ },
+ {
+ "name": "",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ },
+ {
+ "name": "",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "onERC1155Received",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "onERC721Received",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "supportsInterface",
+ "inputs": [
+ {
+ "name": "id",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "validateUserOp",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "missingAccountFunds",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "validationData",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignature",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignatureLength",
+ "inputs": [
+ {
+ "name": "length",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignatureS",
+ "inputs": [
+ {
+ "name": "s",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ExecuteError",
+ "inputs": [
+ {
+ "name": "index",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "error",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b506119d68061001c5f395ff3fe608060405260043610610094575f3560e01c8063b0d691fe11610058578063b0d691fe146101af578063b61d27f6146101d9578063bc197c8114610201578063d087d2881461023d578063f23a6e611461026757610095565b806301ffc9a714610097578063150b7a02146100d35780631626ba7e1461010f57806319822f7c1461014b57806334fcd5be1461018757610095565b5b005b3480156100a2575f5ffd5b506100bd60048036038101906100b89190610d6d565b6102a3565b6040516100ca9190610db2565b60405180910390f35b3480156100de575f5ffd5b506100f960048036038101906100f49190610f94565b6104ac565b6040516101069190611023565b60405180910390f35b34801561011a575f5ffd5b506101356004803603810190610130919061106f565b6104bf565b6040516101429190611023565b60405180910390f35b348015610156575f5ffd5b50610171600480360381019061016c91906110ec565b6104ec565b60405161017e9190611167565b60405180910390f35b348015610192575f5ffd5b506101ad60048036038101906101a891906111dd565b61051e565b005b3480156101ba575f5ffd5b506101c361064e565b6040516101d09190611283565b60405180910390f35b3480156101e4575f5ffd5b506101ff60048036038101906101fa91906112f1565b610669565b005b34801561020c575f5ffd5b5061022760048036038101906102229190611422565b6106d8565b6040516102349190611023565b60405180910390f35b348015610248575f5ffd5b506102516106ec565b60405161025e9190611167565b60405180910390f35b348015610272575f5ffd5b5061028d600480360381019061028891906114ed565b610773565b60405161029a9190611023565b60405180910390f35b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061036d57507f19822f7c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103d557507f1626ba7e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061043d57507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104a557507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b5f63150b7a0260e01b9050949350505050565b5f6104ca8383610787565b6104db5763ffffffff60e01b6104e4565b631626ba7e60e01b5b905092915050565b5f6104f56107c8565b6104ff848461083f565b905061050e84602001356108b1565b610517826108b4565b9392505050565b610526610928565b5f8282905090505f5f90505b81811015610648573684848381811061054e5761054d611580565b5b905060200281019061056091906115b9565b90505f6105d5825f01602081019061057891906115e0565b836020013584806040019061058d919061160b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050505a6109d5565b90508061063957600184036105f1576105ec6109ec565b610638565b826105fb5f6109ff565b6040517f5a15467500000000000000000000000000000000000000000000000000000000815260040161062f9291906116cd565b60405180910390fd5b5b50508080600101915050610532565b50505050565b5f734337084d9e255ff0702461cf8895ce9e3b5ff108905090565b610671610928565b5f6106c1858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050505a6109d5565b9050806106d1576106d06109ec565b5b5050505050565b5f63bc197c8160e01b905095945050505050565b5f6106f561064e565b73ffffffffffffffffffffffffffffffffffffffff166335567e1a305f6040518363ffffffff1660e01b815260040161072f929190611766565b602060405180830381865afa15801561074a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061076e91906117a1565b905090565b5f63f23a6e6160e01b905095945050505050565b5f3073ffffffffffffffffffffffffffffffffffffffff166107a98484610a37565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6107d061064e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490611826565b60405180910390fd5b565b5f61089c8284806101000190610855919061160b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050610787565b6108a75760016108a9565b5f5b905092915050565b50565b5f8114610925575f3373ffffffffffffffffffffffffffffffffffffffff16826040516108e090611871565b5f6040518083038185875af1925050503d805f811461091a576040519150601f19603f3d011682016040523d82523d5f602084013e61091f565b606091505b50509050505b50565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610994575061096561064e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ca906118cf565b60405180910390fd5b565b5f5f5f845160208601878987f19050949350505050565b6109fd6109f85f6109ff565b610a61565b565b60603d5f831115610a175782811115610a16578290505b5b604051602082018101604052818152815f602083013e8092505050919050565b5f5f5f5f610a458686610a69565b925092509250610a558282610abe565b82935050505092915050565b805160208201fd5b5f5f5f6041845103610aa9575f5f5f602087015192506040870151915060608701515f1a9050610a9b88828585610c20565b955095509550505050610ab7565b5f600285515f1b9250925092505b9250925092565b5f6003811115610ad157610ad06118ed565b5b826003811115610ae457610ae36118ed565b5b0315610c1c5760016003811115610afe57610afd6118ed565b5b826003811115610b1157610b106118ed565b5b03610b48576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115610b5c57610b5b6118ed565b5b826003811115610b6f57610b6e6118ed565b5b03610bb357805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401610baa9190611167565b60405180910390fd5b600380811115610bc657610bc56118ed565b5b826003811115610bd957610bd86118ed565b5b03610c1b57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401610c129190611929565b60405180910390fd5b5b5050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115610c5c575f600385925092509250610cfd565b5f6001888888886040515f8152602001604052604051610c7f949392919061195d565b6020604051602081039080840390855afa158015610c9f573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cf0575f60015f5f1b93509350935050610cfd565b805f5f5f1b935093509350505b9450945094915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610d4c81610d18565b8114610d56575f5ffd5b50565b5f81359050610d6781610d43565b92915050565b5f60208284031215610d8257610d81610d10565b5b5f610d8f84828501610d59565b91505092915050565b5f8115159050919050565b610dac81610d98565b82525050565b5f602082019050610dc55f830184610da3565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610df482610dcb565b9050919050565b610e0481610dea565b8114610e0e575f5ffd5b50565b5f81359050610e1f81610dfb565b92915050565b5f819050919050565b610e3781610e25565b8114610e41575f5ffd5b50565b5f81359050610e5281610e2e565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610ea682610e60565b810181811067ffffffffffffffff82111715610ec557610ec4610e70565b5b80604052505050565b5f610ed7610d07565b9050610ee38282610e9d565b919050565b5f67ffffffffffffffff821115610f0257610f01610e70565b5b610f0b82610e60565b9050602081019050919050565b828183375f83830152505050565b5f610f38610f3384610ee8565b610ece565b905082815260208101848484011115610f5457610f53610e5c565b5b610f5f848285610f18565b509392505050565b5f82601f830112610f7b57610f7a610e58565b5b8135610f8b848260208601610f26565b91505092915050565b5f5f5f5f60808587031215610fac57610fab610d10565b5b5f610fb987828801610e11565b9450506020610fca87828801610e11565b9350506040610fdb87828801610e44565b925050606085013567ffffffffffffffff811115610ffc57610ffb610d14565b5b61100887828801610f67565b91505092959194509250565b61101d81610d18565b82525050565b5f6020820190506110365f830184611014565b92915050565b5f819050919050565b61104e8161103c565b8114611058575f5ffd5b50565b5f8135905061106981611045565b92915050565b5f5f6040838503121561108557611084610d10565b5b5f6110928582860161105b565b925050602083013567ffffffffffffffff8111156110b3576110b2610d14565b5b6110bf85828601610f67565b9150509250929050565b5f5ffd5b5f61012082840312156110e3576110e26110c9565b5b81905092915050565b5f5f5f6060848603121561110357611102610d10565b5b5f84013567ffffffffffffffff8111156111205761111f610d14565b5b61112c868287016110cd565b935050602061113d8682870161105b565b925050604061114e86828701610e44565b9150509250925092565b61116181610e25565b82525050565b5f60208201905061117a5f830184611158565b92915050565b5f5ffd5b5f5ffd5b5f5f83601f84011261119d5761119c610e58565b5b8235905067ffffffffffffffff8111156111ba576111b9611180565b5b6020830191508360208202830111156111d6576111d5611184565b5b9250929050565b5f5f602083850312156111f3576111f2610d10565b5b5f83013567ffffffffffffffff8111156112105761120f610d14565b5b61121c85828601611188565b92509250509250929050565b5f819050919050565b5f61124b61124661124184610dcb565b611228565b610dcb565b9050919050565b5f61125c82611231565b9050919050565b5f61126d82611252565b9050919050565b61127d81611263565b82525050565b5f6020820190506112965f830184611274565b92915050565b5f5f83601f8401126112b1576112b0610e58565b5b8235905067ffffffffffffffff8111156112ce576112cd611180565b5b6020830191508360018202830111156112ea576112e9611184565b5b9250929050565b5f5f5f5f6060858703121561130957611308610d10565b5b5f61131687828801610e11565b945050602061132787828801610e44565b935050604085013567ffffffffffffffff81111561134857611347610d14565b5b6113548782880161129c565b925092505092959194509250565b5f67ffffffffffffffff82111561137c5761137b610e70565b5b602082029050602081019050919050565b5f61139f61139a84611362565b610ece565b905080838252602082019050602084028301858111156113c2576113c1611184565b5b835b818110156113eb57806113d78882610e44565b8452602084019350506020810190506113c4565b5050509392505050565b5f82601f83011261140957611408610e58565b5b813561141984826020860161138d565b91505092915050565b5f5f5f5f5f60a0868803121561143b5761143a610d10565b5b5f61144888828901610e11565b955050602061145988828901610e11565b945050604086013567ffffffffffffffff81111561147a57611479610d14565b5b611486888289016113f5565b935050606086013567ffffffffffffffff8111156114a7576114a6610d14565b5b6114b3888289016113f5565b925050608086013567ffffffffffffffff8111156114d4576114d3610d14565b5b6114e088828901610f67565b9150509295509295909350565b5f5f5f5f5f60a0868803121561150657611505610d10565b5b5f61151388828901610e11565b955050602061152488828901610e11565b945050604061153588828901610e44565b935050606061154688828901610e44565b925050608086013567ffffffffffffffff81111561156757611566610d14565b5b61157388828901610f67565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f823560016060038336030381126115d4576115d36115ad565b5b80830191505092915050565b5f602082840312156115f5576115f4610d10565b5b5f61160284828501610e11565b91505092915050565b5f5f83356001602003843603038112611627576116266115ad565b5b80840192508235915067ffffffffffffffff821115611649576116486115b1565b5b602083019250600182023603831315611665576116646115b5565b5b509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61169f8261166d565b6116a98185611677565b93506116b9818560208601611687565b6116c281610e60565b840191505092915050565b5f6040820190506116e05f830185611158565b81810360208301526116f28184611695565b90509392505050565b61170481610dea565b82525050565b5f819050919050565b5f77ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61175061174b6117468461170a565b611228565b611713565b9050919050565b61176081611736565b82525050565b5f6040820190506117795f8301856116fb565b6117866020830184611757565b9392505050565b5f8151905061179b81610e2e565b92915050565b5f602082840312156117b6576117b5610d10565b5b5f6117c38482850161178d565b91505092915050565b5f82825260208201905092915050565b7f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000005f82015250565b5f611810601c836117cc565b915061181b826117dc565b602082019050919050565b5f6020820190508181035f83015261183d81611804565b9050919050565b5f81905092915050565b50565b5f61185c5f83611844565b91506118678261184e565b5f82019050919050565b5f61187b82611851565b9150819050919050565b7f6e6f742066726f6d2073656c66206f7220456e747279506f696e7400000000005f82015250565b5f6118b9601b836117cc565b91506118c482611885565b602082019050919050565b5f6020820190508181035f8301526118e6816118ad565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6119238161103c565b82525050565b5f60208201905061193c5f83018461191a565b92915050565b5f60ff82169050919050565b61195781611942565b82525050565b5f6080820190506119705f83018761191a565b61197d602083018661194e565b61198a604083018561191a565b611997606083018461191a565b9594505050505056fea26469706673582212202961a50f0a70792c50cd880ef89df3013bfbedca2750888ba6550e62363685d164736f6c634300081c0033",
+ "sourceMap": "151:53:69:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const BasePaymaster = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "acceptOwnership",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "addStake",
+ "inputs": [
+ {
+ "name": "unstakeDelaySec",
+ "type": "uint32",
+ "internalType": "uint32"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "deposit",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "entryPoint",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract IEntryPoint"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getDeposit",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "owner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "pendingOwner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "postOp",
+ "inputs": [
+ {
+ "name": "mode",
+ "type": "uint8",
+ "internalType": "enum IPaymaster.PostOpMode"
+ },
+ {
+ "name": "context",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "actualGasCost",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "actualUserOpFeePerGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "renounceOwnership",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "transferOwnership",
+ "inputs": [
+ {
+ "name": "newOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "unlockStake",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "validatePaymasterUserOp",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "maxCost",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "context",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "validationData",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "withdrawStake",
+ "inputs": [
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "internalType": "address payable"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "withdrawTo",
+ "inputs": [
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "internalType": "address payable"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "OwnershipTransferStarted",
+ "inputs": [
+ {
+ "name": "previousOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "newOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "OwnershipTransferred",
+ "inputs": [
+ {
+ "name": "previousOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "newOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "OwnableInvalidOwner",
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "OwnableUnauthorizedAccount",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const MessageHashUtils = {
+ "abi": [],
+ "bytecode": {
+ "object": "0x6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212209ac7ec59734e9dac5f5c67c99ff76a8e793914488138f64914ec727fcbfec60164736f6c634300081c0033",
+ "sourceMap": "521:3235:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const ERC165 = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "supportsInterface",
+ "inputs": [
+ {
+ "name": "interfaceId",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const SafeCast = {
+ "abi": [
+ {
+ "type": "error",
+ "name": "SafeCastOverflowedIntDowncast",
+ "inputs": [
+ {
+ "name": "bits",
+ "type": "uint8",
+ "internalType": "uint8"
+ },
+ {
+ "name": "value",
+ "type": "int256",
+ "internalType": "int256"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SafeCastOverflowedIntToUint",
+ "inputs": [
+ {
+ "name": "value",
+ "type": "int256",
+ "internalType": "int256"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SafeCastOverflowedUintDowncast",
+ "inputs": [
+ {
+ "name": "bits",
+ "type": "uint8",
+ "internalType": "uint8"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SafeCastOverflowedUintToInt",
+ "inputs": [
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220192c02f29fae4a0eb2d2a4319dbf9cc63d1de56e23071bf1e3e83008bd0869b964736f6c634300081c0033",
+ "sourceMap": "769:34200:39:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const IERC1271Wallet = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "isValidSignature",
+ "inputs": [
+ {
+ "name": "hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "magicValue",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const ERC6492SignatureVerifier = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "isValidSig",
+ "inputs": [
+ {
+ "name": "_signer",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "_hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "_signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b50610c628061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c806398ef1ed81461002d575b5f5ffd5b610047600480360381019061004291906106d0565b61005d565b6040516100549190610756565b60405180910390f35b5f7f64926492649264926492649264926492649264926492649264926492649264925f1b61008a836104b9565b03610246575f606080848060200190518101906100a79190610826565b8093508194508295505050505f8373ffffffffffffffffffffffffffffffffffffffff16836040516100d991906108f2565b5f604051808303815f865af19150503d805f8114610112576040519150601f19603f3d011682016040523d82523d5f602084013e610117565b606091505b505090505f8873ffffffffffffffffffffffffffffffffffffffff163b0361017a5780610179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017090610962565b60405180910390fd5b5b631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89856040518363ffffffff1660e01b81526004016101dc9291906109d7565b602060405180830381865afa1580156101f7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021b9190610a5a565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149450505050506104b2565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561032d57631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff16631626ba7e85856040518363ffffffff1660e01b81526004016102c79291906109d7565b602060405180830381865afa1580156102e2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103069190610a5a565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161490506104b2565b6041825114610371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036890610af5565b60405180910390fd5b6103796104d4565b8290505f8160016003811061039157610390610b13565b5b602002015190505f826002600381106103ad576103ac610b13565b5b602002015190505f856040815181106103c9576103c8610b13565b5b602001015160f81c60f81b60f81c9050601b8160ff16141580156103f15750601c8160ff1614155b15610431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042890610bb0565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166001888386866040515f815260200160405260405161046a9493929190610be9565b6020604051602081039080840390855afa15801561048a573d5f5f3e3d5ffd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16149450505050505b9392505050565b5f6020825110156104c8575f5ffd5b81518201519050919050565b6040518060600160405280600390602082028036833780820191505090505090565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61053082610507565b9050919050565b61054081610526565b811461054a575f5ffd5b50565b5f8135905061055b81610537565b92915050565b5f819050919050565b61057381610561565b811461057d575f5ffd5b50565b5f8135905061058e8161056a565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6105e28261059c565b810181811067ffffffffffffffff82111715610601576106006105ac565b5b80604052505050565b5f6106136104f6565b905061061f82826105d9565b919050565b5f67ffffffffffffffff82111561063e5761063d6105ac565b5b6106478261059c565b9050602081019050919050565b828183375f83830152505050565b5f61067461066f84610624565b61060a565b9050828152602081018484840111156106905761068f610598565b5b61069b848285610654565b509392505050565b5f82601f8301126106b7576106b6610594565b5b81356106c7848260208601610662565b91505092915050565b5f5f5f606084860312156106e7576106e66104ff565b5b5f6106f48682870161054d565b935050602061070586828701610580565b925050604084013567ffffffffffffffff81111561072657610725610503565b5b610732868287016106a3565b9150509250925092565b5f8115159050919050565b6107508161073c565b82525050565b5f6020820190506107695f830184610747565b92915050565b5f61077982610507565b9050919050565b6107898161076f565b8114610793575f5ffd5b50565b5f815190506107a481610780565b92915050565b8281835e5f83830152505050565b5f6107ca6107c584610624565b61060a565b9050828152602081018484840111156107e6576107e5610598565b5b6107f18482856107aa565b509392505050565b5f82601f83011261080d5761080c610594565b5b815161081d8482602086016107b8565b91505092915050565b5f5f5f6060848603121561083d5761083c6104ff565b5b5f61084a86828701610796565b935050602084015167ffffffffffffffff81111561086b5761086a610503565b5b610877868287016107f9565b925050604084015167ffffffffffffffff81111561089857610897610503565b5b6108a4868287016107f9565b9150509250925092565b5f81519050919050565b5f81905092915050565b5f6108cc826108ae565b6108d681856108b8565b93506108e68185602086016107aa565b80840191505092915050565b5f6108fd82846108c2565b915081905092915050565b5f82825260208201905092915050565b7f5369676e617475726556616c696461746f723a206465706c6f796d656e7400005f82015250565b5f61094c601e83610908565b915061095782610918565b602082019050919050565b5f6020820190508181035f83015261097981610940565b9050919050565b61098981610561565b82525050565b5f82825260208201905092915050565b5f6109a9826108ae565b6109b3818561098f565b93506109c38185602086016107aa565b6109cc8161059c565b840191505092915050565b5f6040820190506109ea5f830185610980565b81810360208301526109fc818461099f565b90509392505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610a3981610a05565b8114610a43575f5ffd5b50565b5f81519050610a5481610a30565b92915050565b5f60208284031215610a6f57610a6e6104ff565b5b5f610a7c84828501610a46565b91505092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e65725f8201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b5f610adf603a83610908565b9150610aea82610a85565b604082019050919050565b5f6020820190508181035f830152610b0c81610ad3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f5369676e617475726556616c696461746f72237265636f7665725369676e65725f8201527f3a20696e76616c6964207369676e617475726520762076616c75650000000000602082015250565b5f610b9a603b83610908565b9150610ba582610b40565b604082019050919050565b5f6020820190508181035f830152610bc781610b8e565b9050919050565b5f60ff82169050919050565b610be381610bce565b82525050565b5f608082019050610bfc5f830187610980565b610c096020830186610bda565b610c166040830185610980565b610c236060830184610980565b9594505050505056fea26469706673582212206e53be7e2bdf43c36511caba3bba403187f89c7a0ad0bff3a561792fd6c5e51564736f6c634300081c0033",
+ "sourceMap": "285:2522:64:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const Ownable2Step = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "acceptOwnership",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "owner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "pendingOwner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "renounceOwnership",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "transferOwnership",
+ "inputs": [
+ {
+ "name": "newOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "OwnershipTransferStarted",
+ "inputs": [
+ {
+ "name": "previousOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "newOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "OwnershipTransferred",
+ "inputs": [
+ {
+ "name": "previousOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "newOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "OwnableInvalidOwner",
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "OwnableUnauthorizedAccount",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const ISenderCreator = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "createSender",
+ "inputs": [
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "initEip7702Sender",
+ "inputs": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "initCallData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const UserOperationLib = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "PAYMASTER_DATA_OFFSET",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "PAYMASTER_POSTOP_GAS_OFFSET",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "PAYMASTER_VALIDATION_GAS_OFFSET",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x61010a61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106046575f3560e01c806325093e1b14604a578063b29a8ff4146064578063ede3150214607e575b5f5ffd5b60506098565b604051605b919060bd565b60405180910390f35b606a609d565b6040516075919060bd565b60405180910390f35b608460a2565b604051608f919060bd565b60405180910390f35b602481565b601481565b603481565b5f819050919050565b60b78160a7565b82525050565b5f60208201905060ce5f83018460b0565b9291505056fea2646970667358221220655ee0378d20e5415f798baea485b5beca1ab3de61d569470815d37a807ecdf464736f6c634300081c0033",
+ "sourceMap": "278:4766:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const BaseAccount = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "entryPoint",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract IEntryPoint"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "executeBatch",
+ "inputs": [
+ {
+ "name": "calls",
+ "type": "tuple[]",
+ "internalType": "struct BaseAccount.Call[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "getNonce",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "validateUserOp",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "missingAccountFunds",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "validationData",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "error",
+ "name": "ExecuteError",
+ "inputs": [
+ {
+ "name": "index",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "error",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const Payable = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "pay",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b50605f80601a5f395ff3fe608060405260043610601b575f3560e01c80631b9265b814601f575b5f5ffd5b60256027565b005b56fea2646970667358221220627d3afb5f0faa186bc5ecd68603a405641f8c2221faba325ebc2c066139f11564736f6c634300081c0033",
+ "sourceMap": "64:57:86:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const ERC4337Factory = {
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ {
+ "name": "erc4337",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "createAccount",
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "getAddress",
+ "inputs": [
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "implementation",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "initCodeHash",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x60a0604052604051610667380380610667833981810160405281019061002591906100bd565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506100e8565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61008c82610063565b9050919050565b61009c81610082565b81146100a6575f5ffd5b50565b5f815190506100b781610093565b92915050565b5f602082840312156100d2576100d161005f565b5b5f6100df848285016100a9565b91505092915050565b6080516105526101155f395f8181610108015281816101370152818161015f015261019b01526105525ff3fe60806040526004361061003e575f3560e01c806321f8a721146100425780635c60da1b1461007e578063db4c545e146100a8578063f14ddffc146100d2575b5f5ffd5b34801561004d575f5ffd5b5061006860048036038101906100639190610409565b610102565b6040516100759190610473565b60405180910390f35b348015610089575f5ffd5b50610092610135565b60405161009f9190610473565b60405180910390f35b3480156100b3575f5ffd5b506100bc610159565b6040516100c9919061049b565b60405180910390f35b6100ec60048036038101906100e791906104de565b610188565b6040516100f99190610473565b60405180910390f35b5f61012e7f00000000000000000000000000000000000000000000000000000000000000008330610206565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6101837f0000000000000000000000000000000000000000000000000000000000000000610228565b905090565b5f61019382846102a0565b5f5f6101c0347f0000000000000000000000000000000000000000000000000000000000000000866102c7565b91509150816101fb57846014526fc4d66de80000000000000000000000005f525f38602460105f855af16101fa573d5f6040513e3d604051fd5b5b809250505092915050565b5f5f61021185610228565b905061021e8185856103ad565b9150509392505050565b5f6040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205282601e5268603d3d8160223d3973600a52605f6021209150806040525f60605250919050565b8160601c8160601b60601c148260601c15176102c357630c4549ef5f526004601cfd5b5050565b5f5f6040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff815383601582015260558120915060011561039c57813b6103785783605f602188f59150816103735763301164255f526004601cfd5b61039c565b60019250851561039c575f385f3889865af161039b5763b12d13eb5f526004601cfd5b5b806040525f60605250935093915050565b5f60ff5f53836035528160601b6001528260155260555f2090505f6035529392505050565b5f5ffd5b5f819050919050565b6103e8816103d6565b81146103f2575f5ffd5b50565b5f81359050610403816103df565b92915050565b5f6020828403121561041e5761041d6103d2565b5b5f61042b848285016103f5565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61045d82610434565b9050919050565b61046d81610453565b82525050565b5f6020820190506104865f830184610464565b92915050565b610495816103d6565b82525050565b5f6020820190506104ae5f83018461048c565b92915050565b6104bd81610453565b81146104c7575f5ffd5b50565b5f813590506104d8816104b4565b92915050565b5f5f604083850312156104f4576104f36103d2565b5b5f610501858286016104ca565b9250506020610512858286016103f5565b915050925092905056fea2646970667358221220d7bc21f89cf5a36c2833860e4818ba67d2c6c6d662579785f6cc090880f2444164736f6c634300081c0033",
+ "sourceMap": "861:2867:43:-:0;;;1555:78;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1619:7;1602:24;;;;;;;;;;1555:78;861:2867;;88:117:87;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:351::-;915:6;964:2;952:9;943:7;939:23;935:32;932:119;;;970:79;;:::i;:::-;932:119;1090:1;1115:64;1171:7;1162:6;1151:9;1147:22;1115:64;:::i;:::-;1105:74;;1061:128;845:351;;;;:::o;861:2867:43:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const EoaOptional = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "isValidSignature",
+ "inputs": [
+ {
+ "name": "hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b506102bf8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c80631626ba7e1461002d575b5f5ffd5b610047600480360381019061004291906101d9565b61005d565b6040516100549190610270565b60405180910390f35b5f5f3073ffffffffffffffffffffffffffffffffffffffff166100818686866100b1565b73ffffffffffffffffffffffffffffffffffffffff1614905080155f03631626ba7e1760e01b9150509392505050565b5f6040516001156101355782604081146100d357604181146100f75750610128565b6020850135601b8160ff1c0160205285356040528060011b60011c60605250610108565b60408501355f1a6020526040856040375b50845f526020600160805f60015afa5191505f606052806040523d610135575b638baa579f5f526004601cfd5b509392505050565b5f5ffd5b5f5ffd5b5f819050919050565b61015781610145565b8114610161575f5ffd5b50565b5f813590506101728161014e565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261019957610198610178565b5b8235905067ffffffffffffffff8111156101b6576101b561017c565b5b6020830191508360018202830111156101d2576101d1610180565b5b9250929050565b5f5f5f604084860312156101f0576101ef61013d565b5b5f6101fd86828701610164565b935050602084013567ffffffffffffffff81111561021e5761021d610141565b5b61022a86828701610184565b92509250509250925092565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61026a81610236565b82525050565b5f6020820190506102835f830184610261565b9291505056fea264697066735822122056db1ec07c2336e54a3e7c2cc87c94213b8b88e5425d29ca933be162419cb58264736f6c634300081c0033",
+ "sourceMap": "182:709:68:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const EIP712 = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "eip712Domain",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "fields",
+ "type": "bytes1",
+ "internalType": "bytes1"
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "version",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "chainId",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "verifyingContract",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "extensions",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const GH434 = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "bar",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "string",
+ "internalType": "string"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "baz",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "foo",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "a",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "b",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "pure"
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b5061022c8061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c8063a7916fac14610043578063c298557814610061578063febb0f7e14610080575b5f5ffd5b61004b61009e565b604051610058919061010c565b60405180910390f35b6100696100a8565b60405161007792919061013f565b60405180910390f35b6100886100b7565b60405161009591906101d6565b60405180910390f35b5f62010f2c905090565b5f5f61a4556001915091509091565b60606040518060400160405280600281526020017f6869000000000000000000000000000000000000000000000000000000000000815250905090565b5f819050919050565b610106816100f4565b82525050565b5f60208201905061011f5f8301846100fd565b92915050565b5f8115159050919050565b61013981610125565b82525050565b5f6040820190506101525f8301856100fd565b61015f6020830184610130565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6101a882610166565b6101b28185610170565b93506101c2818560208601610180565b6101cb8161018e565b840191505092915050565b5f6020820190508181035f8301526101ee818461019e565b90509291505056fea264697066735822122031a0ecb545c6af663c9f3164cfcd9264bbf6373a9d24818f2716f4871840932764736f6c634300081c0033",
+ "sourceMap": "64:280:84:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const ERC1271 = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "eip712Domain",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "fields",
+ "type": "bytes1",
+ "internalType": "bytes1"
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "version",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "chainId",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "verifyingContract",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "extensions",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "isValidSignature",
+ "inputs": [
+ {
+ "name": "hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const Strings = {
+ "abi": [
+ {
+ "type": "error",
+ "name": "StringsInsufficientHexLength",
+ "inputs": [
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "length",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220e2d595ed7ad2dac534dcfc54f0364131efbf5ca545d98044648f2c6ba849c65564736f6c634300081c0033",
+ "sourceMap": "251:3746:33:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const ERC20InvalidTransferEvent = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "transfer",
+ "inputs": [
+ {
+ "name": "recipient",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "Transfer",
+ "inputs": [
+ {
+ "name": "from",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "to",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b506101e78061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063a9059cbb1461002d575b5f5ffd5b6100476004803603810190610042919061012e565b610049565b005b3373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838360405161009192919061018a565b60405180910390a25050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100ca826100a1565b9050919050565b6100da816100c0565b81146100e4575f5ffd5b50565b5f813590506100f5816100d1565b92915050565b5f819050919050565b61010d816100fb565b8114610117575f5ffd5b50565b5f8135905061012881610104565b92915050565b5f5f604083850312156101445761014361009d565b5b5f610151858286016100e7565b92505060206101628582860161011a565b9150509250929050565b610175816100c0565b82525050565b610184816100fb565b82525050565b5f60408201905061019d5f83018561016c565b6101aa602083018461017b565b939250505056fea26469706673582212207b16862b7e264a549c026ac1677258781619563046556a28cdb023376f1641ce64736f6c634300081c0033",
+ "sourceMap": "64:302:80:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const Math = {
+ "abi": [],
+ "bytecode": {
+ "object": "0x6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220f1800a67a59eef95209b295f5a1ebe8a622e4212841661bed24298f2ad99c36264736f6c634300081c0033",
+ "sourceMap": "281:28084:38:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const Context = {
+ "abi": [],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const DeploylessCallViaBytecode = {
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ {
+ "name": "bytecode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ }
+ ],
+ "bytecode": {
+ "object": "0x608060405234801561000f575f5ffd5b5060405161022b38038061022b833981810160405281019061003191906101b4565b5f5f8351602085015ff59050803b610047575f5ffd5b5f5f8351602085015f855af16040513d5f823e81610063573d81fd5b3d81f35b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6100c682610080565b810181811067ffffffffffffffff821117156100e5576100e4610090565b5b80604052505050565b5f6100f7610067565b905061010382826100bd565b919050565b5f67ffffffffffffffff82111561012257610121610090565b5b61012b82610080565b9050602081019050919050565b8281835e5f83830152505050565b5f61015861015384610108565b6100ee565b9050828152602081018484840111156101745761017361007c565b5b61017f848285610138565b509392505050565b5f82601f83011261019b5761019a610078565b5b81516101ab848260208601610146565b91505092915050565b5f5f604083850312156101ca576101c9610070565b5b5f83015167ffffffffffffffff8111156101e7576101e6610074565b5b6101f385828601610187565b925050602083015167ffffffffffffffff81111561021457610213610074565b5b61022085828601610187565b915050925092905056fe",
+ "sourceMap": "66:665:74:-:0;;;107:622;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;194:10;292:1;281:8;275:15;268:4;258:8;254:19;251:1;243:51;237:57;;329:2;317:15;307:71;;362:1;359;352:12;307:71;488:1;485;478:4;472:11;465:4;459;455:15;452:1;448:2;441:5;436:54;520:4;514:11;561:16;558:1;553:3;538:40;601:7;591:80;;640:16;635:3;628:29;591:80;696:16;691:3;684:29;7:75:87;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:102;621:6;672:2;668:7;663:2;656:5;652:14;648:28;638:38;;580:102;;;:::o;688:180::-;736:77;733:1;726:88;833:4;830:1;823:15;857:4;854:1;847:15;874:281;957:27;979:4;957:27;:::i;:::-;949:6;945:40;1087:6;1075:10;1072:22;1051:18;1039:10;1036:34;1033:62;1030:88;;;1098:18;;:::i;:::-;1030:88;1138:10;1134:2;1127:22;917:238;874:281;;:::o;1161:129::-;1195:6;1222:20;;:::i;:::-;1212:30;;1251:33;1279:4;1271:6;1251:33;:::i;:::-;1161:129;;;:::o;1296:307::-;1357:4;1447:18;1439:6;1436:30;1433:56;;;1469:18;;:::i;:::-;1433:56;1507:29;1529:6;1507:29;:::i;:::-;1499:37;;1591:4;1585;1581:15;1573:23;;1296:307;;;:::o;1609:139::-;1698:6;1693:3;1688;1682:23;1739:1;1730:6;1725:3;1721:16;1714:27;1609:139;;;:::o;1754:432::-;1842:5;1867:65;1883:48;1924:6;1883:48;:::i;:::-;1867:65;:::i;:::-;1858:74;;1955:6;1948:5;1941:21;1993:4;1986:5;1982:16;2031:3;2022:6;2017:3;2013:16;2010:25;2007:112;;;2038:79;;:::i;:::-;2007:112;2128:52;2173:6;2168:3;2163;2128:52;:::i;:::-;1848:338;1754:432;;;;;:::o;2205:353::-;2271:5;2320:3;2313:4;2305:6;2301:17;2297:27;2287:122;;2328:79;;:::i;:::-;2287:122;2438:6;2432:13;2463:89;2548:3;2540:6;2533:4;2525:6;2521:17;2463:89;:::i;:::-;2454:98;;2277:281;2205:353;;;;:::o;2564:849::-;2661:6;2669;2718:2;2706:9;2697:7;2693:23;2689:32;2686:119;;;2724:79;;:::i;:::-;2686:119;2865:1;2854:9;2850:17;2844:24;2895:18;2887:6;2884:30;2881:117;;;2917:79;;:::i;:::-;2881:117;3022:73;3087:7;3078:6;3067:9;3063:22;3022:73;:::i;:::-;3012:83;;2815:290;3165:2;3154:9;3150:18;3144:25;3196:18;3188:6;3185:30;3182:117;;;3218:79;;:::i;:::-;3182:117;3323:73;3388:7;3379:6;3368:9;3364:22;3323:73;:::i;:::-;3313:83;;3115:291;2564:849;;;;;:::o",
+ "linkReferences": {}
+ }
+} as const;
+
+export const VerifyingPaymaster_08 = {
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ {
+ "name": "_entryPoint",
+ "type": "address",
+ "internalType": "contract IEntryPoint"
+ },
+ {
+ "name": "_verifyingSigner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "acceptOwnership",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "addStake",
+ "inputs": [
+ {
+ "name": "unstakeDelaySec",
+ "type": "uint32",
+ "internalType": "uint32"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "deposit",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "entryPoint",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract IEntryPoint"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getDeposit",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getHash",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "validUntil",
+ "type": "uint48",
+ "internalType": "uint48"
+ },
+ {
+ "name": "validAfter",
+ "type": "uint48",
+ "internalType": "uint48"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "owner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "parsePaymasterAndData",
+ "inputs": [
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "validUntil",
+ "type": "uint48",
+ "internalType": "uint48"
+ },
+ {
+ "name": "validAfter",
+ "type": "uint48",
+ "internalType": "uint48"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "pendingOwner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "postOp",
+ "inputs": [
+ {
+ "name": "mode",
+ "type": "uint8",
+ "internalType": "enum IPaymaster.PostOpMode"
+ },
+ {
+ "name": "context",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "actualGasCost",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "actualUserOpFeePerGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "renounceOwnership",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "transferOwnership",
+ "inputs": [
+ {
+ "name": "newOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "unlockStake",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "validatePaymasterUserOp",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "maxCost",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "context",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "validationData",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "verifyingSigner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "withdrawStake",
+ "inputs": [
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "internalType": "address payable"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "withdrawTo",
+ "inputs": [
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "internalType": "address payable"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "OwnershipTransferStarted",
+ "inputs": [
+ {
+ "name": "previousOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "newOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "OwnershipTransferred",
+ "inputs": [
+ {
+ "name": "previousOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "newOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignature",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignatureLength",
+ "inputs": [
+ {
+ "name": "length",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignatureS",
+ "inputs": [
+ {
+ "name": "s",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "OwnableInvalidOwner",
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "OwnableUnauthorizedAccount",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x60c060405234801561000f575f5ffd5b506040516123b13803806123b18339818101604052810190610031919061039c565b81335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a3575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009a91906103e9565b60405180910390fd5b6100b28161013260201b60201c565b506100c28161016860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050505061052d565b60015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556101658161024260201b60201c565b50565b8073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77f989ccc58000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016101c1919061043c565b602060405180830381865afa1580156101dc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610200919061048a565b61023f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102369061050f565b60405180910390fd5b50565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61033082610307565b9050919050565b5f61034182610326565b9050919050565b61035181610337565b811461035b575f5ffd5b50565b5f8151905061036c81610348565b92915050565b61037b81610326565b8114610385575f5ffd5b50565b5f8151905061039681610372565b92915050565b5f5f604083850312156103b2576103b1610303565b5b5f6103bf8582860161035e565b92505060206103d085828601610388565b9150509250929050565b6103e381610326565b82525050565b5f6020820190506103fc5f8301846103da565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61043681610402565b82525050565b5f60208201905061044f5f83018461042d565b92915050565b5f8115159050919050565b61046981610455565b8114610473575f5ffd5b50565b5f8151905061048481610460565b92915050565b5f6020828403121561049f5761049e610303565b5b5f6104ac84828501610476565b91505092915050565b5f82825260208201905092915050565b7f49456e747279506f696e7420696e74657266616365206d69736d6174636800005f82015250565b5f6104f9601e836104b5565b9150610504826104c5565b602082019050919050565b5f6020820190508181035f830152610526816104ed565b9050919050565b60805160a051611e2b6105865f395f81816104bc0152610cfe01525f818161039d01528181610430015281816107bd015281816107e90152818161086e015281816108f8015281816109950152610b7a0152611e2b5ff3fe6080604052600436106100fd575f3560e01c80638da5cb5b11610094578063c23a5cea11610063578063c23a5cea146102e5578063c399ec881461030d578063d0e30db014610337578063e30c397814610341578063f2fde38b1461036b576100fd565b80638da5cb5b1461023c57806394d4ad6014610266578063b0d691fe146102a5578063bb9fe6bf146102cf576100fd565b80635829c5f5116100d05780635829c5f5146101ac578063715018a6146101e857806379ba5097146101fe5780637c627b2114610214576100fd565b80630396cb6014610101578063205c28781461011d57806323d9ac9b1461014557806352b7512c1461016f575b5f5ffd5b61011b60048036038101906101169190611232565b610393565b005b348015610128575f5ffd5b50610143600480360381019061013e91906112ea565b610426565b005b348015610150575f5ffd5b506101596104ba565b6040516101669190611348565b60405180910390f35b34801561017a575f5ffd5b50610195600480360381019061019091906113b7565b6104de565b6040516101a39291906114a2565b60405180910390f35b3480156101b7575f5ffd5b506101d260048036038101906101cd919061150b565b610500565b6040516101df9190611586565b60405180910390f35b3480156101f3575f5ffd5b506101fc61067f565b005b348015610209575f5ffd5b50610212610692565b005b34801561021f575f5ffd5b5061023a60048036038101906102359190611623565b610720565b005b348015610247575f5ffd5b5061025061073c565b60405161025d9190611348565b60405180910390f35b348015610271575f5ffd5b5061028c600480360381019061028791906116a7565b610763565b60405161029c949392919061173b565b60405180910390f35b3480156102b0575f5ffd5b506102b96107bb565b6040516102c691906117d4565b60405180910390f35b3480156102da575f5ffd5b506102e36107df565b005b3480156102f0575f5ffd5b5061030b600480360381019061030691906117ed565b610864565b005b348015610318575f5ffd5b506103216108f5565b60405161032e9190611818565b60405180910390f35b61033f610993565b005b34801561034c575f5ffd5b50610355610a1d565b6040516103629190611348565b60405180910390f35b348015610376575f5ffd5b50610391600480360381019061038c919061185b565b610a45565b005b61039b610af1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016103f59190611895565b5f604051808303818588803b15801561040c575f5ffd5b505af115801561041e573d5f5f3e3d5ffd5b505050505050565b61042e610af1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016104899291906118bd565b5f604051808303815f87803b1580156104a0575f5ffd5b505af11580156104b2573d5f5f3e3d5ffd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60605f6104e9610b78565b6104f4858585610c08565b91509150935093915050565b5f5f84806040019061051291906118f0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505090507fe9230dc38d653b7b6e0e001c6c094fe79d970d78865f73f3826d52ce2f23fa4b8180519060200120036105bd576040518060400160405280601481526020017f770200000000000000000000000000000000000000000000000000000000000081525090505b845f0160208101906105cf919061185b565b856020013582805190602001208780606001906105ec91906118f0565b6040516105fa929190611980565b60405180910390208860800135898060e0019061061791906118f0565b601490603492610629939291906119a0565b9061063491906119f0565b5f1c8a60a001358b60c0013546308d8d60405160200161065f9c9b9a99989796959493929190611a4e565b604051602081830303815290604052805190602001209150509392505050565b610687610af1565b6106905f610d8f565b565b5f61069b610dbf565b90508073ffffffffffffffffffffffffffffffffffffffff166106bc610a1d565b73ffffffffffffffffffffffffffffffffffffffff161461071457806040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161070b9190611348565b60405180910390fd5b61071d81610d8f565b50565b610728610b78565b6107358585858585610dc6565b5050505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f365f8585603490809261077a939291906119a0565b8101906107879190611b06565b809450819550505085856040603461079f9190611b71565b9080926107ae939291906119a0565b9150915092959194509250565b7f000000000000000000000000000000000000000000000000000000000000000081565b6107e7610af1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561084c575f5ffd5b505af115801561085e573d5f5f3e3d5ffd5b50505050565b61086c610af1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b81526004016108c59190611ba4565b5f604051808303815f87803b1580156108dc575f5ffd5b505af11580156108ee573d5f5f3e3d5ffd5b5050505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161094f9190611348565b602060405180830381865afa15801561096a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098e9190611bd1565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b81526004016109ed9190611348565b5f604051808303818588803b158015610a04575f5ffd5b505af1158015610a16573d5f5f3e3d5ffd5b5050505050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a4d610af1565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16610aac61073c565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610af9610dbf565b73ffffffffffffffffffffffffffffffffffffffff16610b1761073c565b73ffffffffffffffffffffffffffffffffffffffff1614610b7657610b3a610dbf565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b6d9190611348565b60405180910390fd5b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90611c56565b60405180910390fd5b565b60605f5f5f365f610c27898060e00190610c2291906118f0565b610763565b93509350935093506040828290501480610c445750604182829050145b610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90611ce4565b60405180910390fd5b5f610c97610c928b8787610500565b610e01565b9050610ce68184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050610e34565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d6257610d4460018686610e5e565b60405180602001604052805f81525090965096505050505050610d87565b610d6d5f8686610e5e565b60405180602001604052805f815250909650965050505050505b935093915050565b60015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055610dbc81610e92565b50565b5f33905090565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890611d4c565b60405180910390fd5b5f7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f5281601c52603c5f209050919050565b5f5f5f5f610e428686610f53565b925092509250610e528282610fa8565b82935050505092915050565b5f60d08265ffffffffffff16901b60a08465ffffffffffff16901b85610e84575f610e87565b60015b171790509392505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5f5f6041845103610f93575f5f5f602087015192506040870151915060608701515f1a9050610f858882858561110a565b955095509550505050610fa1565b5f600285515f1b9250925092505b9250925092565b5f6003811115610fbb57610fba611d6a565b5b826003811115610fce57610fcd611d6a565b5b03156111065760016003811115610fe857610fe7611d6a565b5b826003811115610ffb57610ffa611d6a565b5b03611032576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561104657611045611d6a565b5b82600381111561105957611058611d6a565b5b0361109d57805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016110949190611818565b60405180910390fd5b6003808111156110b0576110af611d6a565b5b8260038111156110c3576110c2611d6a565b5b0361110557806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016110fc9190611586565b60405180910390fd5b5b5050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611146575f6003859250925092506111e7565b5f6001888888886040515f81526020016040526040516111699493929190611db2565b6020604051602081039080840390855afa158015611189573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111da575f60015f5f1b935093509350506111e7565b805f5f5f1b935093509350505b9450945094915050565b5f5ffd5b5f5ffd5b5f63ffffffff82169050919050565b611211816111f9565b811461121b575f5ffd5b50565b5f8135905061122c81611208565b92915050565b5f60208284031215611247576112466111f1565b5b5f6112548482850161121e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6112868261125d565b9050919050565b6112968161127c565b81146112a0575f5ffd5b50565b5f813590506112b18161128d565b92915050565b5f819050919050565b6112c9816112b7565b81146112d3575f5ffd5b50565b5f813590506112e4816112c0565b92915050565b5f5f60408385031215611300576112ff6111f1565b5b5f61130d858286016112a3565b925050602061131e858286016112d6565b9150509250929050565b5f6113328261125d565b9050919050565b61134281611328565b82525050565b5f60208201905061135b5f830184611339565b92915050565b5f5ffd5b5f610120828403121561137b5761137a611361565b5b81905092915050565b5f819050919050565b61139681611384565b81146113a0575f5ffd5b50565b5f813590506113b18161138d565b92915050565b5f5f5f606084860312156113ce576113cd6111f1565b5b5f84013567ffffffffffffffff8111156113eb576113ea6111f5565b5b6113f786828701611365565b9350506020611408868287016113a3565b9250506040611419868287016112d6565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61146582611423565b61146f818561142d565b935061147f81856020860161143d565b6114888161144b565b840191505092915050565b61149c816112b7565b82525050565b5f6040820190508181035f8301526114ba818561145b565b90506114c96020830184611493565b9392505050565b5f65ffffffffffff82169050919050565b6114ea816114d0565b81146114f4575f5ffd5b50565b5f81359050611505816114e1565b92915050565b5f5f5f60608486031215611522576115216111f1565b5b5f84013567ffffffffffffffff81111561153f5761153e6111f5565b5b61154b86828701611365565b935050602061155c868287016114f7565b925050604061156d868287016114f7565b9150509250925092565b61158081611384565b82525050565b5f6020820190506115995f830184611577565b92915050565b600381106115ab575f5ffd5b50565b5f813590506115bc8161159f565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f8401126115e3576115e26115c2565b5b8235905067ffffffffffffffff811115611600576115ff6115c6565b5b60208301915083600182028301111561161c5761161b6115ca565b5b9250929050565b5f5f5f5f5f6080868803121561163c5761163b6111f1565b5b5f611649888289016115ae565b955050602086013567ffffffffffffffff81111561166a576116696111f5565b5b611676888289016115ce565b94509450506040611689888289016112d6565b925050606061169a888289016112d6565b9150509295509295909350565b5f5f602083850312156116bd576116bc6111f1565b5b5f83013567ffffffffffffffff8111156116da576116d96111f5565b5b6116e6858286016115ce565b92509250509250929050565b6116fb816114d0565b82525050565b828183375f83830152505050565b5f61171a838561142d565b9350611727838584611701565b6117308361144b565b840190509392505050565b5f60608201905061174e5f8301876116f2565b61175b60208301866116f2565b818103604083015261176e81848661170f565b905095945050505050565b5f819050919050565b5f61179c6117976117928461125d565b611779565b61125d565b9050919050565b5f6117ad82611782565b9050919050565b5f6117be826117a3565b9050919050565b6117ce816117b4565b82525050565b5f6020820190506117e75f8301846117c5565b92915050565b5f60208284031215611802576118016111f1565b5b5f61180f848285016112a3565b91505092915050565b5f60208201905061182b5f830184611493565b92915050565b61183a81611328565b8114611844575f5ffd5b50565b5f8135905061185581611831565b92915050565b5f602082840312156118705761186f6111f1565b5b5f61187d84828501611847565b91505092915050565b61188f816111f9565b82525050565b5f6020820190506118a85f830184611886565b92915050565b6118b78161127c565b82525050565b5f6040820190506118d05f8301856118ae565b6118dd6020830184611493565b9392505050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f8335600160200384360303811261190c5761190b6118e4565b5b80840192508235915067ffffffffffffffff82111561192e5761192d6118e8565b5b60208301925060018202360383131561194a576119496118ec565b5b509250929050565b5f81905092915050565b5f6119678385611952565b9350611974838584611701565b82840190509392505050565b5f61198c82848661195c565b91508190509392505050565b5f5ffd5b5f5ffd5b5f5f858511156119b3576119b2611998565b5b838611156119c4576119c361199c565b5b6001850283019150848603905094509492505050565b5f82905092915050565b5f82821b905092915050565b5f6119fb83836119da565b82611a068135611384565b92506020821015611a4657611a417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026119e4565b831692505b505092915050565b5f61018082019050611a625f83018f611339565b611a6f602083018e611493565b611a7c604083018d611577565b611a89606083018c611577565b611a96608083018b611577565b611aa360a083018a611493565b611ab060c0830189611493565b611abd60e0830188611577565b611acb610100830187611493565b611ad9610120830186611339565b611ae76101408301856116f2565b611af56101608301846116f2565b9d9c50505050505050505050505050565b5f5f60408385031215611b1c57611b1b6111f1565b5b5f611b29858286016114f7565b9250506020611b3a858286016114f7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611b7b826112b7565b9150611b86836112b7565b9250828201905080821115611b9e57611b9d611b44565b5b92915050565b5f602082019050611bb75f8301846118ae565b92915050565b5f81519050611bcb816112c0565b92915050565b5f60208284031215611be657611be56111f1565b5b5f611bf384828501611bbd565b91505092915050565b5f82825260208201905092915050565b7f53656e646572206e6f7420456e747279506f696e7400000000000000000000005f82015250565b5f611c40601583611bfc565b9150611c4b82611c0c565b602082019050919050565b5f6020820190508181035f830152611c6d81611c34565b9050919050565b7f566572696679696e675061796d61737465723a20696e76616c6964207369676e5f8201527f6174757265206c656e67746820696e207061796d6173746572416e6444617461602082015250565b5f611cce604083611bfc565b9150611cd982611c74565b604082019050919050565b5f6020820190508181035f830152611cfb81611cc2565b9050919050565b7f6d757374206f76657272696465000000000000000000000000000000000000005f82015250565b5f611d36600d83611bfc565b9150611d4182611d02565b602082019050919050565b5f6020820190508181035f830152611d6381611d2a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff82169050919050565b611dac81611d97565b82525050565b5f608082019050611dc55f830187611577565b611dd26020830186611da3565b611ddf6040830185611577565b611dec6060830184611577565b9594505050505056fea26469706673582212209d1e5ed66ea3d85fcbed7cc88ea8259705fff39ed8018d005dfba6391103b65364736f6c634300081c0033",
+ "sourceMap": "1008:4275:78:-:0;;;1318:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1417:11;956:10:12;1297:1:24;1273:26;;:12;:26;;;1269:95;;1350:1;1322:31;;;;;;;;;;;:::i;:::-;;;;;;;;1269:95;1373:32;1392:12;1373:18;;;:32;;:::i;:::-;1225:187;978:41:12::1;1007:11;978:28;;;:41;;:::i;:::-;1042:11;1029:24;;;;;;;;::::0;::::1;911:149:::0;1458:16:78::1;1440:34;;;;;;;;::::0;::::1;1318:163:::0;;1008:4275;;1886:153:25;1975:13;;1968:20;;;;;;;;;;;1998:34;2023:8;1998:24;;;:34;;:::i;:::-;1886:153;:::o;1180:218:12:-;1294:11;1278:47;;;1326:29;1278:78;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1270:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;1180:218;:::o;2912:187:24:-;2985:16;3004:6;;;;;;;;;;;2985:25;;3029:8;3020:6;;:17;;;;;;;;;;;;;;;;;;3083:8;3052:40;;3073:8;3052:40;;;;;;;;;;;;2975:124;2912:187;:::o;88:117:87:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:116::-;625:7;654:24;672:5;654:24;:::i;:::-;643:35;;568:116;;;:::o;690:162::-;783:44;821:5;783:44;:::i;:::-;776:5;773:55;763:83;;842:1;839;832:12;763:83;690:162;:::o;858:183::-;935:5;966:6;960:13;951:22;;982:53;1029:5;982:53;:::i;:::-;858:183;;;;:::o;1047:122::-;1120:24;1138:5;1120:24;:::i;:::-;1113:5;1110:35;1100:63;;1159:1;1156;1149:12;1100:63;1047:122;:::o;1175:143::-;1232:5;1263:6;1257:13;1248:22;;1279:33;1306:5;1279:33;:::i;:::-;1175:143;;;;:::o;1324:547::-;1423:6;1431;1480:2;1468:9;1459:7;1455:23;1451:32;1448:119;;;1486:79;;:::i;:::-;1448:119;1606:1;1631:84;1707:7;1698:6;1687:9;1683:22;1631:84;:::i;:::-;1621:94;;1577:148;1764:2;1790:64;1846:7;1837:6;1826:9;1822:22;1790:64;:::i;:::-;1780:74;;1735:129;1324:547;;;;;:::o;1877:118::-;1964:24;1982:5;1964:24;:::i;:::-;1959:3;1952:37;1877:118;;:::o;2001:222::-;2094:4;2132:2;2121:9;2117:18;2109:26;;2145:71;2213:1;2202:9;2198:17;2189:6;2145:71;:::i;:::-;2001:222;;;;:::o;2229:149::-;2265:7;2305:66;2298:5;2294:78;2283:89;;2229:149;;;:::o;2384:115::-;2469:23;2486:5;2469:23;:::i;:::-;2464:3;2457:36;2384:115;;:::o;2505:218::-;2596:4;2634:2;2623:9;2619:18;2611:26;;2647:69;2713:1;2702:9;2698:17;2689:6;2647:69;:::i;:::-;2505:218;;;;:::o;2729:90::-;2763:7;2806:5;2799:13;2792:21;2781:32;;2729:90;;;:::o;2825:116::-;2895:21;2910:5;2895:21;:::i;:::-;2888:5;2885:32;2875:60;;2931:1;2928;2921:12;2875:60;2825:116;:::o;2947:137::-;3001:5;3032:6;3026:13;3017:22;;3048:30;3072:5;3048:30;:::i;:::-;2947:137;;;;:::o;3090:345::-;3157:6;3206:2;3194:9;3185:7;3181:23;3177:32;3174:119;;;3212:79;;:::i;:::-;3174:119;3332:1;3357:61;3410:7;3401:6;3390:9;3386:22;3357:61;:::i;:::-;3347:71;;3303:125;3090:345;;;;:::o;3441:169::-;3525:11;3559:6;3554:3;3547:19;3599:4;3594:3;3590:14;3575:29;;3441:169;;;;:::o;3616:180::-;3756:32;3752:1;3744:6;3740:14;3733:56;3616:180;:::o;3802:366::-;3944:3;3965:67;4029:2;4024:3;3965:67;:::i;:::-;3958:74;;4041:93;4130:3;4041:93;:::i;:::-;4159:2;4154:3;4150:12;4143:19;;3802:366;;;:::o;4174:419::-;4340:4;4378:2;4367:9;4363:18;4355:26;;4427:9;4421:4;4417:20;4413:1;4402:9;4398:17;4391:47;4455:131;4581:4;4455:131;:::i;:::-;4447:139;;4174:419;;;:::o;1008:4275:78:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const ERC4337 = {
+ "abi": [
+ {
+ "type": "fallback",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "receive",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "addDeposit",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "cancelOwnershipHandover",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "completeOwnershipHandover",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "delegateExecute",
+ "inputs": [
+ {
+ "name": "delegate",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "eip712Domain",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "fields",
+ "type": "bytes1",
+ "internalType": "bytes1"
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "version",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "chainId",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "verifyingContract",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "extensions",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "entryPoint",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "executeBatch",
+ "inputs": [
+ {
+ "name": "calls",
+ "type": "tuple[]",
+ "internalType": "struct ERC4337.Call[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "results",
+ "type": "bytes[]",
+ "internalType": "bytes[]"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "getDeposit",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "initialize",
+ "inputs": [
+ {
+ "name": "newOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "isValidSignature",
+ "inputs": [
+ {
+ "name": "hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "owner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ownershipHandoverExpiresAt",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "proxiableUUID",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "renounceOwnership",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "requestOwnershipHandover",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "storageLoad",
+ "inputs": [
+ {
+ "name": "storageSlot",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "storageStore",
+ "inputs": [
+ {
+ "name": "storageSlot",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "storageValue",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "transferOwnership",
+ "inputs": [
+ {
+ "name": "newOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "upgradeToAndCall",
+ "inputs": [
+ {
+ "name": "newImplementation",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "validateUserOp",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct ERC4337.PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "missingAccountFunds",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "validationData",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "withdrawDepositTo",
+ "inputs": [
+ {
+ "name": "to",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "event",
+ "name": "OwnershipHandoverCanceled",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "OwnershipHandoverRequested",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "OwnershipTransferred",
+ "inputs": [
+ {
+ "name": "oldOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "newOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "Upgraded",
+ "inputs": [
+ {
+ "name": "implementation",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "AlreadyInitialized",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "FnSelectorNotRecognized",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "NewOwnerIsZeroAddress",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "NoHandoverRequest",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "Unauthorized",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "UnauthorizedCallContext",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "UpgradeFailed",
+ "inputs": []
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const ERC1155Holder = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "onERC1155BatchReceived",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ },
+ {
+ "name": "",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ },
+ {
+ "name": "",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "onERC1155Received",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "supportsInterface",
+ "inputs": [
+ {
+ "name": "interfaceId",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const ERC7821 = {
+ "abi": [
+ {
+ "type": "fallback",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "receive",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [
+ {
+ "name": "mode",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "executionData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "supportsExecutionMode",
+ "inputs": [
+ {
+ "name": "mode",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "error",
+ "name": "BatchOfBatchesDecodingError",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "FnSelectorNotRecognized",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "UnsupportedExecutionMode",
+ "inputs": []
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b506105398061001c5f395ff3fe60806040526004361061002c575f3560e01c8063d03c79141461008a578063e9ae5c53146100c657610033565b3661003357005b61003b6100e2565b6100436100e4565b15610075575f3560e01c63bc197c81811463f23a6e6182141763150b7a028214171561007357806020526020603cf35b505b61007d6100ec565b633c10b94e5f526004601cfd5b348015610095575f5ffd5b506100b060048036038101906100ab91906103e7565b6100ee565b6040516100bd919061042c565b60405180910390f35b6100e060048036038101906100db91906104a6565b610102565b005b565b5f6001905090565b565b5f5f6100f98361018b565b14159050919050565b5f61010c8461018b565b905060038103610127576101218484846101dc565b50610186565b365f365f8461013d57637f1812755f526004601cfd5b5f905086358701602081019450803593508735604011600287141115610170578760200135880160208101935080359250505b506101808888888787878761029e565b50505050505b505050565b5f69ffff00000000ffffffff8260086016021c16690100000000000000000081149150816901000000000078210001821460011b179150816901000000000078210002821460030217915050919050565b7603000000000000000000000000000000000000000000005f1b831892505f5f5f5f5f5f9250925092508435808601803594508060200193508587019250828560051b85011160208710178260401c171561023e57633995943b5f526004601cfd5b50505f5b83811461029557365f8260051b8501358086016020810193508035925085838501118260401c171561027b57633995943b5f526004601cfd5b5050610288898383610102565b5050806001019050610242565b50505050505050565b5f82829050036102f1573073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102df575f5ffd5b6102ec84845f5f1b6102fe565b6102f5565b5f5ffd5b50505050505050565b5f5f848490500361030f575061034a565b5b5f5f365f61031f88888761034f565b9350935093509350610334848484848a610389565b5050505083839050816001019150810361031057505b505050565b5f5f365f8460051b870135870180358135153002179450602081013593506040810135810160208101935080359250505093509350935093565b604051828482375f388483888a5af16103a4573d5f823e3d81fd5b505050505050565b5f5ffd5b5f5ffd5b5f819050919050565b6103c6816103b4565b81146103d0575f5ffd5b50565b5f813590506103e1816103bd565b92915050565b5f602082840312156103fc576103fb6103ac565b5b5f610409848285016103d3565b91505092915050565b5f8115159050919050565b61042681610412565b82525050565b5f60208201905061043f5f83018461041d565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261046657610465610445565b5b8235905067ffffffffffffffff81111561048357610482610449565b5b60208301915083600182028301111561049f5761049e61044d565b5b9250929050565b5f5f5f604084860312156104bd576104bc6103ac565b5b5f6104ca868287016103d3565b935050602084013567ffffffffffffffff8111156104eb576104ea6103b0565b5b6104f786828701610451565b9250925050925092509256fea26469706673582212204c8dd690253addf26ee688b360a32078e498b4356a1502375ea05d1b02ee729964736f6c634300081c0033",
+ "sourceMap": "879:11340:61:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const OffchainLookupExample = {
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ {
+ "name": "urls_",
+ "type": "string[]",
+ "internalType": "string[]"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "getAddress",
+ "inputs": [
+ {
+ "name": "name",
+ "type": "string",
+ "internalType": "string"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getAddressWithProof",
+ "inputs": [
+ {
+ "name": "result",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "extraData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "recoverSigner",
+ "inputs": [
+ {
+ "name": "_ethSignedMessageHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "_signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "splitSignature",
+ "inputs": [
+ {
+ "name": "sig",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "r",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "s",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "v",
+ "type": "uint8",
+ "internalType": "uint8"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "urls",
+ "inputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "string",
+ "internalType": "string"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "error",
+ "name": "OffchainLookup",
+ "inputs": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "urls",
+ "type": "string[]",
+ "internalType": "string[]"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callbackFunction",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ },
+ {
+ "name": "extraData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x608060405234801561000f575f5ffd5b506040516114903803806114908339818101604052810190610031919061034e565b805f908051906020019061004692919061004d565b5050610674565b828054828255905f5260205f20908101928215610093579160200282015b8281111561009257825182908161008291906105a5565b509160200191906001019061006b565b5b5090506100a091906100a4565b5090565b5b808211156100c3575f81816100ba91906100c7565b506001016100a5565b5090565b5080546100d3906103cc565b5f825580601f106100e45750610101565b601f0160209004905f5260205f20908101906101009190610104565b5b50565b5b8082111561011b575f815f905550600101610105565b5090565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61017a82610134565b810181811067ffffffffffffffff8211171561019957610198610144565b5b80604052505050565b5f6101ab61011f565b90506101b78282610171565b919050565b5f67ffffffffffffffff8211156101d6576101d5610144565b5b602082029050602081019050919050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561020957610208610144565b5b61021282610134565b9050602081019050919050565b8281835e5f83830152505050565b5f61023f61023a846101ef565b6101a2565b90508281526020810184848401111561025b5761025a6101eb565b5b61026684828561021f565b509392505050565b5f82601f83011261028257610281610130565b5b815161029284826020860161022d565b91505092915050565b5f6102ad6102a8846101bc565b6101a2565b905080838252602082019050602084028301858111156102d0576102cf6101e7565b5b835b8181101561031757805167ffffffffffffffff8111156102f5576102f4610130565b5b808601610302898261026e565b855260208501945050506020810190506102d2565b5050509392505050565b5f82601f83011261033557610334610130565b5b815161034584826020860161029b565b91505092915050565b5f6020828403121561036357610362610128565b5b5f82015167ffffffffffffffff8111156103805761037f61012c565b5b61038c84828501610321565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806103e357607f821691505b6020821081036103f6576103f561039f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261041d565b610462868361041d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104a66104a161049c8461047a565b610483565b61047a565b9050919050565b5f819050919050565b6104bf8361048c565b6104d36104cb826104ad565b848454610429565b825550505050565b5f5f905090565b6104ea6104db565b6104f58184846104b6565b505050565b5b818110156105185761050d5f826104e2565b6001810190506104fb565b5050565b601f82111561055d5761052e816103fc565b6105378461040e565b81016020851015610546578190505b61055a6105528561040e565b8301826104fa565b50505b505050565b5f82821c905092915050565b5f61057d5f1984600802610562565b1980831691505092915050565b5f610595838361056e565b9150826002028217905092915050565b6105ae82610395565b67ffffffffffffffff8111156105c7576105c6610144565b5b6105d182546103cc565b6105dc82828561051c565b5f60209050601f83116001811461060d575f84156105fb578287015190505b610605858261058a565b86555061066c565b601f19841661061b866103fc565b5f5b828110156106425784890151825560018201915060208501945060208101905061061d565b8683101561065f578489015161065b601f89168261056e565b8355505b6001600288020188555050505b505050505050565b610e0f806106815f395ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c806302137a3414610059578063796676be1461008957806397aba7f9146100b9578063a7bb5803146100e9578063bf40fac11461011b575b5f5ffd5b610073600480360381019061006e9190610463565b61014b565b6040516100809190610520565b60405180910390f35b6100a3600480360381019061009e919061056c565b6101ee565b6040516100b09190610607565b60405180910390f35b6100d360048036038101906100ce9190610782565b610293565b6040516100e09190610520565b60405180910390f35b61010360048036038101906100fe91906107dc565b6102fd565b6040516101129392919061084d565b60405180910390f35b610135600480360381019061013091906108d7565b610362565b6040516101429190610520565b60405180910390f35b5f5f5f5f878781019061015e919061095d565b9250925092505f61016f8383610293565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146101df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d690610a13565b60405180910390fd5b80945050505050949350505050565b5f81815481106101fc575f80fd5b905f5260205f20015f91509050805461021490610a5e565b80601f016020809104026020016040519081016040528092919081815260200182805461024090610a5e565b801561028b5780601f106102625761010080835404028352916020019161028b565b820191905f5260205f20905b81548152906001019060200180831161026e57829003601f168201915b505050505081565b5f5f5f5f6102a0856102fd565b9250925092506001868285856040515f81526020016040526040516102c89493929190610a8e565b6020604051602081039080840390855afa1580156102e8573d5f5f3e3d5ffd5b50505060206040510351935050505092915050565b5f5f5f6041845114610344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033b90610b1b565b60405180910390fd5b602084015192506040840151915060608401515f1a90509193909250565b5f305f8484604051602001610378929190610b65565b6040516020818303038152906040526302137a3460e01b86866040516020016103a2929190610b65565b6040516020818303038152906040526040517f556f18300000000000000000000000000000000000000000000000000000000081526004016103e8959493929190610d73565b60405180910390fd5b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261042357610422610402565b5b8235905067ffffffffffffffff8111156104405761043f610406565b5b60208301915083600182028301111561045c5761045b61040a565b5b9250929050565b5f5f5f5f6040858703121561047b5761047a6103fa565b5b5f85013567ffffffffffffffff811115610498576104976103fe565b5b6104a48782880161040e565b9450945050602085013567ffffffffffffffff8111156104c7576104c66103fe565b5b6104d38782880161040e565b925092505092959194509250565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61050a826104e1565b9050919050565b61051a81610500565b82525050565b5f6020820190506105335f830184610511565b92915050565b5f819050919050565b61054b81610539565b8114610555575f5ffd5b50565b5f8135905061056681610542565b92915050565b5f60208284031215610581576105806103fa565b5b5f61058e84828501610558565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6105d982610597565b6105e381856105a1565b93506105f38185602086016105b1565b6105fc816105bf565b840191505092915050565b5f6020820190508181035f83015261061f81846105cf565b905092915050565b5f819050919050565b61063981610627565b8114610643575f5ffd5b50565b5f8135905061065481610630565b92915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610694826105bf565b810181811067ffffffffffffffff821117156106b3576106b261065e565b5b80604052505050565b5f6106c56103f1565b90506106d1828261068b565b919050565b5f67ffffffffffffffff8211156106f0576106ef61065e565b5b6106f9826105bf565b9050602081019050919050565b828183375f83830152505050565b5f610726610721846106d6565b6106bc565b9050828152602081018484840111156107425761074161065a565b5b61074d848285610706565b509392505050565b5f82601f83011261076957610768610402565b5b8135610779848260208601610714565b91505092915050565b5f5f60408385031215610798576107976103fa565b5b5f6107a585828601610646565b925050602083013567ffffffffffffffff8111156107c6576107c56103fe565b5b6107d285828601610755565b9150509250929050565b5f602082840312156107f1576107f06103fa565b5b5f82013567ffffffffffffffff81111561080e5761080d6103fe565b5b61081a84828501610755565b91505092915050565b61082c81610627565b82525050565b5f60ff82169050919050565b61084781610832565b82525050565b5f6060820190506108605f830186610823565b61086d6020830185610823565b61087a604083018461083e565b949350505050565b5f5f83601f84011261089757610896610402565b5b8235905067ffffffffffffffff8111156108b4576108b3610406565b5b6020830191508360018202830111156108d0576108cf61040a565b5b9250929050565b5f5f602083850312156108ed576108ec6103fa565b5b5f83013567ffffffffffffffff81111561090a576109096103fe565b5b61091685828601610882565b92509250509250929050565b5f61092c826104e1565b9050919050565b61093c81610922565b8114610946575f5ffd5b50565b5f8135905061095781610933565b92915050565b5f5f5f60608486031215610974576109736103fa565b5b5f61098186828701610949565b935050602061099286828701610646565b925050604084013567ffffffffffffffff8111156109b3576109b26103fe565b5b6109bf86828701610755565b9150509250925092565b7f696e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f6109fd6011836105a1565b9150610a08826109c9565b602082019050919050565b5f6020820190508181035f830152610a2a816109f1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610a7557607f821691505b602082108103610a8857610a87610a31565b5b50919050565b5f608082019050610aa15f830187610823565b610aae602083018661083e565b610abb6040830185610823565b610ac86060830184610823565b95945050505050565b7f696e76616c6964207369676e6174757265206c656e67746800000000000000005f82015250565b5f610b056018836105a1565b9150610b1082610ad1565b602082019050919050565b5f6020820190508181035f830152610b3281610af9565b9050919050565b5f610b4483856105a1565b9350610b51838584610706565b610b5a836105bf565b840190509392505050565b5f6020820190508181035f830152610b7e818486610b39565b90509392505050565b5f81549050919050565b5f82825260208201905092915050565b5f819050815f5260205f209050919050565b5f82825260208201905092915050565b5f819050815f5260205f209050919050565b5f8154610be181610a5e565b610beb8186610bb3565b9450600182165f8114610c055760018114610c1b57610c4d565b60ff198316865281151560200286019350610c4d565b610c2485610bc3565b5f5b83811015610c4557815481890152600182019150602081019050610c26565b808801955050505b50505092915050565b5f610c618383610bd5565b905092915050565b5f600182019050919050565b5f610c7f82610b87565b610c898185610b91565b935083602082028501610c9b85610ba1565b805f5b85811015610cd557848403895281610cb68582610c56565b9450610cc183610c69565b925060208a01995050600181019050610c9e565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f610d0b82610ce7565b610d158185610cf1565b9350610d258185602086016105b1565b610d2e816105bf565b840191505092915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610d6d81610d39565b82525050565b5f60a082019050610d865f830188610511565b8181036020830152610d988187610c75565b90508181036040830152610dac8186610d01565b9050610dbb6060830185610d64565b8181036080830152610dcd8184610d01565b9050969550505050505056fea26469706673582212208a54be228390699f196ac697e886794379a68a43bba86c09b1e194191f3a725c64736f6c634300081c0033",
+ "sourceMap": "64:2040:85:-:0;;;290:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;342:5;335:4;:12;;;;;;;;;;;;:::i;:::-;;290:64;64:2040;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:87:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:321::-;1260:4;1350:18;1342:6;1339:30;1336:56;;;1372:18;;:::i;:::-;1336:56;1422:4;1414:6;1410:17;1402:25;;1482:4;1476;1472:15;1464:23;;1173:321;;;:::o;1500:117::-;1609:1;1606;1599:12;1623:117;1732:1;1729;1722:12;1746:308;1808:4;1898:18;1890:6;1887:30;1884:56;;;1920:18;;:::i;:::-;1884:56;1958:29;1980:6;1958:29;:::i;:::-;1950:37;;2042:4;2036;2032:15;2024:23;;1746:308;;;:::o;2060:139::-;2149:6;2144:3;2139;2133:23;2190:1;2181:6;2176:3;2172:16;2165:27;2060:139;;;:::o;2205:434::-;2294:5;2319:66;2335:49;2377:6;2335:49;:::i;:::-;2319:66;:::i;:::-;2310:75;;2408:6;2401:5;2394:21;2446:4;2439:5;2435:16;2484:3;2475:6;2470:3;2466:16;2463:25;2460:112;;;2491:79;;:::i;:::-;2460:112;2581:52;2626:6;2621:3;2616;2581:52;:::i;:::-;2300:339;2205:434;;;;;:::o;2659:355::-;2726:5;2775:3;2768:4;2760:6;2756:17;2752:27;2742:122;;2783:79;;:::i;:::-;2742:122;2893:6;2887:13;2918:90;3004:3;2996:6;2989:4;2981:6;2977:17;2918:90;:::i;:::-;2909:99;;2732:282;2659:355;;;;:::o;3036:960::-;3153:5;3178:91;3194:74;3261:6;3194:74;:::i;:::-;3178:91;:::i;:::-;3169:100;;3289:5;3318:6;3311:5;3304:21;3352:4;3345:5;3341:16;3334:23;;3405:4;3397:6;3393:17;3385:6;3381:30;3434:3;3426:6;3423:15;3420:122;;;3453:79;;:::i;:::-;3420:122;3568:6;3551:439;3585:6;3580:3;3577:15;3551:439;;;3667:3;3661:10;3703:18;3690:11;3687:35;3684:122;;;3725:79;;:::i;:::-;3684:122;3849:11;3841:6;3837:24;3887:58;3941:3;3929:10;3887:58;:::i;:::-;3882:3;3875:71;3975:4;3970:3;3966:14;3959:21;;3627:363;;3611:4;3606:3;3602:14;3595:21;;3551:439;;;3555:21;3159:837;;3036:960;;;;;:::o;4018:405::-;4110:5;4159:3;4152:4;4144:6;4140:17;4136:27;4126:122;;4167:79;;:::i;:::-;4126:122;4277:6;4271:13;4302:115;4413:3;4405:6;4398:4;4390:6;4386:17;4302:115;:::i;:::-;4293:124;;4116:307;4018:405;;;;:::o;4429:574::-;4534:6;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4730:1;4719:9;4715:17;4709:24;4760:18;4752:6;4749:30;4746:117;;;4782:79;;:::i;:::-;4746:117;4887:99;4978:7;4969:6;4958:9;4954:22;4887:99;:::i;:::-;4877:109;;4680:316;4429:574;;;;:::o;5009:99::-;5061:6;5095:5;5089:12;5079:22;;5009:99;;;:::o;5114:180::-;5162:77;5159:1;5152:88;5259:4;5256:1;5249:15;5283:4;5280:1;5273:15;5300:320;5344:6;5381:1;5375:4;5371:12;5361:22;;5428:1;5422:4;5418:12;5449:18;5439:81;;5505:4;5497:6;5493:17;5483:27;;5439:81;5567:2;5559:6;5556:14;5536:18;5533:38;5530:84;;5586:18;;:::i;:::-;5530:84;5351:269;5300:320;;;:::o;5626:141::-;5675:4;5698:3;5690:11;;5721:3;5718:1;5711:14;5755:4;5752:1;5742:18;5734:26;;5626:141;;;:::o;5773:93::-;5810:6;5857:2;5852;5845:5;5841:14;5837:23;5827:33;;5773:93;;;:::o;5872:107::-;5916:8;5966:5;5960:4;5956:16;5935:37;;5872:107;;;;:::o;5985:393::-;6054:6;6104:1;6092:10;6088:18;6127:97;6157:66;6146:9;6127:97;:::i;:::-;6245:39;6275:8;6264:9;6245:39;:::i;:::-;6233:51;;6317:4;6313:9;6306:5;6302:21;6293:30;;6366:4;6356:8;6352:19;6345:5;6342:30;6332:40;;6061:317;;5985:393;;;;;:::o;6384:77::-;6421:7;6450:5;6439:16;;6384:77;;;:::o;6467:60::-;6495:3;6516:5;6509:12;;6467:60;;;:::o;6533:142::-;6583:9;6616:53;6634:34;6643:24;6661:5;6643:24;:::i;:::-;6634:34;:::i;:::-;6616:53;:::i;:::-;6603:66;;6533:142;;;:::o;6681:75::-;6724:3;6745:5;6738:12;;6681:75;;;:::o;6762:269::-;6872:39;6903:7;6872:39;:::i;:::-;6933:91;6982:41;7006:16;6982:41;:::i;:::-;6974:6;6967:4;6961:11;6933:91;:::i;:::-;6927:4;6920:105;6838:193;6762:269;;;:::o;7037:73::-;7082:3;7103:1;7096:8;;7037:73;:::o;7116:189::-;7193:32;;:::i;:::-;7234:65;7292:6;7284;7278:4;7234:65;:::i;:::-;7169:136;7116:189;;:::o;7311:186::-;7371:120;7388:3;7381:5;7378:14;7371:120;;;7442:39;7479:1;7472:5;7442:39;:::i;:::-;7415:1;7408:5;7404:13;7395:22;;7371:120;;;7311:186;;:::o;7503:543::-;7604:2;7599:3;7596:11;7593:446;;;7638:38;7670:5;7638:38;:::i;:::-;7722:29;7740:10;7722:29;:::i;:::-;7712:8;7708:44;7905:2;7893:10;7890:18;7887:49;;;7926:8;7911:23;;7887:49;7949:80;8005:22;8023:3;8005:22;:::i;:::-;7995:8;7991:37;7978:11;7949:80;:::i;:::-;7608:431;;7593:446;7503:543;;;:::o;8052:117::-;8106:8;8156:5;8150:4;8146:16;8125:37;;8052:117;;;;:::o;8175:169::-;8219:6;8252:51;8300:1;8296:6;8288:5;8285:1;8281:13;8252:51;:::i;:::-;8248:56;8333:4;8327;8323:15;8313:25;;8226:118;8175:169;;;;:::o;8349:295::-;8425:4;8571:29;8596:3;8590:4;8571:29;:::i;:::-;8563:37;;8633:3;8630:1;8626:11;8620:4;8617:21;8609:29;;8349:295;;;;:::o;8649:1395::-;8766:37;8799:3;8766:37;:::i;:::-;8868:18;8860:6;8857:30;8854:56;;;8890:18;;:::i;:::-;8854:56;8934:38;8966:4;8960:11;8934:38;:::i;:::-;9019:67;9079:6;9071;9065:4;9019:67;:::i;:::-;9113:1;9137:4;9124:17;;9169:2;9161:6;9158:14;9186:1;9181:618;;;;9843:1;9860:6;9857:77;;;9909:9;9904:3;9900:19;9894:26;9885:35;;9857:77;9960:67;10020:6;10013:5;9960:67;:::i;:::-;9954:4;9947:81;9816:222;9151:887;;9181:618;9233:4;9229:9;9221:6;9217:22;9267:37;9299:4;9267:37;:::i;:::-;9326:1;9340:208;9354:7;9351:1;9348:14;9340:208;;;9433:9;9428:3;9424:19;9418:26;9410:6;9403:42;9484:1;9476:6;9472:14;9462:24;;9531:2;9520:9;9516:18;9503:31;;9377:4;9374:1;9370:12;9365:17;;9340:208;;;9576:6;9567:7;9564:19;9561:179;;;9634:9;9629:3;9625:19;9619:26;9677:48;9719:4;9711:6;9707:17;9696:9;9677:48;:::i;:::-;9669:6;9662:64;9584:156;9561:179;9786:1;9782;9774:6;9770:14;9766:22;9760:4;9753:36;9188:611;;;9151:887;;8741:1303;;;8649:1395;;:::o;64:2040:85:-;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const ERC721Holder = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "onERC721Received",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const DeploylessCallViaFactory = {
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ {
+ "name": "to",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "factory",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "factoryData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "error",
+ "name": "CounterfactualDeployFailed",
+ "inputs": [
+ {
+ "name": "error",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x608060405234801561000f575f5ffd5b50604051610447380380610447833981810160405281019061003191906102e8565b5f8473ffffffffffffffffffffffffffffffffffffffff163b03610121575f5f8373ffffffffffffffffffffffffffffffffffffffff168360405161007691906103c8565b5f604051808303815f865af19150503d805f81146100af576040519150601f19603f3d011682016040523d82523d5f602084013e6100b4565b606091505b50915091508115806100dc57505f8673ffffffffffffffffffffffffffffffffffffffff163b145b1561011e57806040517f101bb98d0000000000000000000000000000000000000000000000000000000081526004016101159190610426565b60405180910390fd5b50505b5f5f8451602086015f885af16040513d5f823e8161013d573d81fd5b3d81f35b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61017b82610152565b9050919050565b61018b81610171565b8114610195575f5ffd5b50565b5f815190506101a681610182565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6101fa826101b4565b810181811067ffffffffffffffff82111715610219576102186101c4565b5b80604052505050565b5f61022b610141565b905061023782826101f1565b919050565b5f67ffffffffffffffff821115610256576102556101c4565b5b61025f826101b4565b9050602081019050919050565b8281835e5f83830152505050565b5f61028c6102878461023c565b610222565b9050828152602081018484840111156102a8576102a76101b0565b5b6102b384828561026c565b509392505050565b5f82601f8301126102cf576102ce6101ac565b5b81516102df84826020860161027a565b91505092915050565b5f5f5f5f60808587031215610300576102ff61014a565b5b5f61030d87828801610198565b945050602085015167ffffffffffffffff81111561032e5761032d61014e565b5b61033a878288016102bb565b935050604061034b87828801610198565b925050606085015167ffffffffffffffff81111561036c5761036b61014e565b5b610378878288016102bb565b91505092959194509250565b5f81519050919050565b5f81905092915050565b5f6103a282610384565b6103ac818561038e565b93506103bc81856020860161026c565b80840191505092915050565b5f6103d38284610398565b915081905092915050565b5f82825260208201905092915050565b5f6103f882610384565b61040281856103de565b935061041281856020860161026c565b61041b816101b4565b840191505092915050565b5f6020820190508181035f83015261043e81846103ee565b90509291505056fe",
+ "sourceMap": "139:792:75:-:0;;;230:694;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;397:1;378:2;370:23;;;:28;366:217;;415:12;429:16;449:7;:12;;462:11;449:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;414:60;;;;493:7;492:8;:40;;;;531:1;512:2;504:23;;;:28;492:40;488:84;;;568:3;541:31;;;;;;;;;;;:::i;:::-;;;;;;;;488:84;400:183;;366:217;683:1;680;673:4;667:11;660:4;654;650:15;647:1;643:2;636:5;631:54;715:4;709:11;756:16;753:1;748:3;733:40;796:7;786:80;;835:16;830:3;823:29;786:80;891:16;886:3;879:29;7:75:87;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:117::-;954:1;951;944:12;968:117;1077:1;1074;1067:12;1091:102;1132:6;1183:2;1179:7;1174:2;1167:5;1163:14;1159:28;1149:38;;1091:102;;;:::o;1199:180::-;1247:77;1244:1;1237:88;1344:4;1341:1;1334:15;1368:4;1365:1;1358:15;1385:281;1468:27;1490:4;1468:27;:::i;:::-;1460:6;1456:40;1598:6;1586:10;1583:22;1562:18;1550:10;1547:34;1544:62;1541:88;;;1609:18;;:::i;:::-;1541:88;1649:10;1645:2;1638:22;1428:238;1385:281;;:::o;1672:129::-;1706:6;1733:20;;:::i;:::-;1723:30;;1762:33;1790:4;1782:6;1762:33;:::i;:::-;1672:129;;;:::o;1807:307::-;1868:4;1958:18;1950:6;1947:30;1944:56;;;1980:18;;:::i;:::-;1944:56;2018:29;2040:6;2018:29;:::i;:::-;2010:37;;2102:4;2096;2092:15;2084:23;;1807:307;;;:::o;2120:139::-;2209:6;2204:3;2199;2193:23;2250:1;2241:6;2236:3;2232:16;2225:27;2120:139;;;:::o;2265:432::-;2353:5;2378:65;2394:48;2435:6;2394:48;:::i;:::-;2378:65;:::i;:::-;2369:74;;2466:6;2459:5;2452:21;2504:4;2497:5;2493:16;2542:3;2533:6;2528:3;2524:16;2521:25;2518:112;;;2549:79;;:::i;:::-;2518:112;2639:52;2684:6;2679:3;2674;2639:52;:::i;:::-;2359:338;2265:432;;;;;:::o;2716:353::-;2782:5;2831:3;2824:4;2816:6;2812:17;2808:27;2798:122;;2839:79;;:::i;:::-;2798:122;2949:6;2943:13;2974:89;3059:3;3051:6;3044:4;3036:6;3032:17;2974:89;:::i;:::-;2965:98;;2788:281;2716:353;;;;:::o;3075:1162::-;3190:6;3198;3206;3214;3263:3;3251:9;3242:7;3238:23;3234:33;3231:120;;;3270:79;;:::i;:::-;3231:120;3390:1;3415:64;3471:7;3462:6;3451:9;3447:22;3415:64;:::i;:::-;3405:74;;3361:128;3549:2;3538:9;3534:18;3528:25;3580:18;3572:6;3569:30;3566:117;;;3602:79;;:::i;:::-;3566:117;3707:73;3772:7;3763:6;3752:9;3748:22;3707:73;:::i;:::-;3697:83;;3499:291;3829:2;3855:64;3911:7;3902:6;3891:9;3887:22;3855:64;:::i;:::-;3845:74;;3800:129;3989:2;3978:9;3974:18;3968:25;4020:18;4012:6;4009:30;4006:117;;;4042:79;;:::i;:::-;4006:117;4147:73;4212:7;4203:6;4192:9;4188:22;4147:73;:::i;:::-;4137:83;;3939:291;3075:1162;;;;;;;:::o;4243:98::-;4294:6;4328:5;4322:12;4312:22;;4243:98;;;:::o;4347:147::-;4448:11;4485:3;4470:18;;4347:147;;;;:::o;4500:386::-;4604:3;4632:38;4664:5;4632:38;:::i;:::-;4686:88;4767:6;4762:3;4686:88;:::i;:::-;4679:95;;4783:65;4841:6;4836:3;4829:4;4822:5;4818:16;4783:65;:::i;:::-;4873:6;4868:3;4864:16;4857:23;;4608:278;4500:386;;;;:::o;4892:271::-;5022:3;5044:93;5133:3;5124:6;5044:93;:::i;:::-;5037:100;;5154:3;5147:10;;4892:271;;;;:::o;5169:168::-;5252:11;5286:6;5281:3;5274:19;5326:4;5321:3;5317:14;5302:29;;5169:168;;;;:::o;5343:373::-;5429:3;5457:38;5489:5;5457:38;:::i;:::-;5511:70;5574:6;5569:3;5511:70;:::i;:::-;5504:77;;5590:65;5648:6;5643:3;5636:4;5629:5;5625:16;5590:65;:::i;:::-;5680:29;5702:6;5680:29;:::i;:::-;5675:3;5671:39;5664:46;;5433:283;5343:373;;;;:::o;5722:309::-;5833:4;5871:2;5860:9;5856:18;5848:26;;5920:9;5914:4;5910:20;5906:1;5895:9;5891:17;5884:47;5948:76;6019:4;6010:6;5948:76;:::i;:::-;5940:84;;5722:309;;;;:::o",
+ "linkReferences": {}
+ }
+} as const;
+
+export const ErrorsExample = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "assertRead",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "assertWrite",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "complexCustomRead",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "complexCustomWrite",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "divideByZeroRead",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "divideByZeroWrite",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "overflowRead",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "overflowWrite",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "requireRead",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "requireWrite",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "revertRead",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "revertWrite",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "simpleCustomRead",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "simpleCustomReadNoArgs",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "simpleCustomWrite",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "error",
+ "name": "ComplexError",
+ "inputs": [
+ {
+ "name": "foo",
+ "type": "tuple",
+ "internalType": "struct ErrorsExample.Foo",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "bar",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "name": "message",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "number",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SimpleError",
+ "inputs": [
+ {
+ "name": "message",
+ "type": "string",
+ "internalType": "string"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SimpleErrorNoArgs",
+ "inputs": []
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b506107f78061001c5f395ff3fe608060405234801561000f575f5ffd5b50600436106100f3575f3560e01c80638de18b9111610095578063c66cf13311610064578063c66cf1331461018d578063d44de866146101ab578063eb1aba20146101c9578063efbbf995146101d3576100f3565b80638de18b9114610165578063940b88021461016f5780639f55870914610179578063a997732e14610183576100f3565b80634a9bc278116100d15780634a9bc278146101295780634adac6eb14610133578063699389ca1461015157806388452b851461015b576100f3565b806304696152146100f75780631515d7681461010157806324db9ba01461010b575b5f5ffd5b6100ff6101dd565b005b6101096101ed565b005b610113610258565b60405161012091906104e7565b60405180910390f35b61013161027a565b005b61013b610285565b60405161014891906104e7565b60405180910390f35b6101596102c7565b005b6101636102d2565b005b61016d61030d565b005b610177610378565b005b6101816103b3565b005b61018b6103ee565b005b610195610429565b6040516101a291906104e7565b60405180910390f35b6101b361044b565b6040516101c091906104e7565b60405180910390f35b6101d161048d565b005b6101db61049d565b005b5f6101eb576101ea610500565b5b565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff168152602001604581525060456040517fdb731cf400000000000000000000000000000000000000000000000000000000815260040161024f929190610644565b60405180910390fd5b5f5f604590505f5f90505f818361026f91906106d8565b905080935050505090565b5f610283575f5ffd5b565b5f5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505f600190505f81836102bc9190610708565b905080935050505090565b5f6102d0575f5ffd5b565b6040517ff90063980000000000000000000000000000000000000000000000000000000081526004016103049061073b565b60405180910390fd5b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff168152602001604581525060456040517fdb731cf400000000000000000000000000000000000000000000000000000000815260040161036f929190610644565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103aa906107a3565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e5906107a3565b60405180910390fd5b6040517ff90063980000000000000000000000000000000000000000000000000000000081526004016104209061073b565b60405180910390fd5b5f5f604590505f5f90505f818361044091906106d8565b905080935050505090565b5f5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505f600190505f81836104829190610708565b905080935050505090565b5f61049b5761049a610500565b5b565b6040517f67476b9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f819050919050565b6104e1816104cf565b82525050565b5f6020820190506104fa5f8301846104d8565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6105568261052d565b9050919050565b6105668161054c565b82525050565b610575816104cf565b82525050565b604082015f82015161058f5f85018261055d565b5060208201516105a2602085018261056c565b50505050565b5f82825260208201905092915050565b7f62756767657200000000000000000000000000000000000000000000000000005f82015250565b5f6105ec6006836105a8565b91506105f7826105b8565b602082019050919050565b5f819050919050565b5f819050919050565b5f61062e61062961062484610602565b61060b565b6104cf565b9050919050565b61063e81610614565b82525050565b5f6080820190506106575f83018561057b565b8181036040830152610668816105e0565b90506106776060830184610635565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6106e2826104cf565b91506106ed836104cf565b9250826106fd576106fc61067e565b5b828204905092915050565b5f610712826104cf565b915061071d836104cf565b9250828201905080821115610735576107346106ab565b5b92915050565b5f6020820190508181035f830152610752816105e0565b9050919050565b7f54686973206973206120726576657274206d65737361676500000000000000005f82015250565b5f61078d6018836105a8565b915061079882610759565b602082019050919050565b5f6020820190508181035f8301526107ba81610781565b905091905056fea26469706673582212209fbe0d64a64ea4ebac786d2d278ce64f728604a24d05765eab33386c1880e9f264736f6c634300081c0033",
+ "sourceMap": "64:2031:82:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const Exec = {
+ "abi": [],
+ "bytecode": {
+ "object": "0x6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212208ebd93b877a268cd051ad0776cff19c623b65d0c6bfbcaa95c1cce489d97f56e64736f6c634300081c0033",
+ "sourceMap": "193:1892:23:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const DeploylessERC6492SignatureVerifier = {
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ {
+ "name": "_signer",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "_hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "_signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "isValidSig",
+ "inputs": [
+ {
+ "name": "_signer",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "_hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "_signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ }
+ ],
+ "bytecode": {
+ "object": "0x608060405234801561000f575f5ffd5b50604051610b75380380610b75833981810160405281019061003191906106c7565b5f61004384848461004e60201b60201c565b9050805f526001601ff35b5f7f64926492649264926492649264926492649264926492649264926492649264925f1b610081836104b060201b60201c565b0361023d575f6060808480602001905181019061009e919061076e565b8093508194508295505050505f8373ffffffffffffffffffffffffffffffffffffffff16836040516100d0919061083a565b5f604051808303815f865af19150503d805f8114610109576040519150601f19603f3d011682016040523d82523d5f602084013e61010e565b606091505b505090505f8873ffffffffffffffffffffffffffffffffffffffff163b036101715780610170576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610167906108aa565b60405180910390fd5b5b631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89856040518363ffffffff1660e01b81526004016101d392919061091f565b602060405180830381865afa1580156101ee573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021291906109a2565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149450505050506104a9565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561032457631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff16631626ba7e85856040518363ffffffff1660e01b81526004016102be92919061091f565b602060405180830381865afa1580156102d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102fd91906109a2565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161490506104a9565b6041825114610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035f90610a3d565b60405180910390fd5b6103706104cb565b8290505f8160016003811061038857610387610a5b565b5b602002015190505f826002600381106103a4576103a3610a5b565b5b602002015190505f856040815181106103c0576103bf610a5b565b5b602001015160f81c60f81b60f81c9050601b8160ff16141580156103e85750601c8160ff1614155b15610428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041f90610af8565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166001888386866040515f81526020016040526040516104619493929190610b31565b6020604051602081039080840390855afa158015610481573d5f5f3e3d5ffd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16149450505050505b9392505050565b5f6020825110156104bf575f5ffd5b81518201519050919050565b6040518060600160405280600390602082028036833780820191505090505090565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610527826104fe565b9050919050565b6105378161051d565b8114610541575f5ffd5b50565b5f815190506105528161052e565b92915050565b5f819050919050565b61056a81610558565b8114610574575f5ffd5b50565b5f8151905061058581610561565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6105d982610593565b810181811067ffffffffffffffff821117156105f8576105f76105a3565b5b80604052505050565b5f61060a6104ed565b905061061682826105d0565b919050565b5f67ffffffffffffffff821115610635576106346105a3565b5b61063e82610593565b9050602081019050919050565b8281835e5f83830152505050565b5f61066b6106668461061b565b610601565b9050828152602081018484840111156106875761068661058f565b5b61069284828561064b565b509392505050565b5f82601f8301126106ae576106ad61058b565b5b81516106be848260208601610659565b91505092915050565b5f5f5f606084860312156106de576106dd6104f6565b5b5f6106eb86828701610544565b93505060206106fc86828701610577565b925050604084015167ffffffffffffffff81111561071d5761071c6104fa565b5b6107298682870161069a565b9150509250925092565b5f61073d826104fe565b9050919050565b61074d81610733565b8114610757575f5ffd5b50565b5f8151905061076881610744565b92915050565b5f5f5f60608486031215610785576107846104f6565b5b5f6107928682870161075a565b935050602084015167ffffffffffffffff8111156107b3576107b26104fa565b5b6107bf8682870161069a565b925050604084015167ffffffffffffffff8111156107e0576107df6104fa565b5b6107ec8682870161069a565b9150509250925092565b5f81519050919050565b5f81905092915050565b5f610814826107f6565b61081e8185610800565b935061082e81856020860161064b565b80840191505092915050565b5f610845828461080a565b915081905092915050565b5f82825260208201905092915050565b7f5369676e617475726556616c696461746f723a206465706c6f796d656e7400005f82015250565b5f610894601e83610850565b915061089f82610860565b602082019050919050565b5f6020820190508181035f8301526108c181610888565b9050919050565b6108d181610558565b82525050565b5f82825260208201905092915050565b5f6108f1826107f6565b6108fb81856108d7565b935061090b81856020860161064b565b61091481610593565b840191505092915050565b5f6040820190506109325f8301856108c8565b818103602083015261094481846108e7565b90509392505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6109818161094d565b811461098b575f5ffd5b50565b5f8151905061099c81610978565b92915050565b5f602082840312156109b7576109b66104f6565b5b5f6109c48482850161098e565b91505092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e65725f8201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b5f610a27603a83610850565b9150610a32826109cd565b604082019050919050565b5f6020820190508181035f830152610a5481610a1b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f5369676e617475726556616c696461746f72237265636f7665725369676e65725f8201527f3a20696e76616c6964207369676e617475726520762076616c75650000000000602082015250565b5f610ae2603b83610850565b9150610aed82610a88565b604082019050919050565b5f6020820190508181035f830152610b0f81610ad6565b9050919050565b5f60ff82169050919050565b610b2b81610b16565b82525050565b5f608082019050610b445f8301876108c8565b610b516020830186610b22565b610b5e60408301856108c8565b610b6b60608301846108c8565b9594505050505056fe",
+ "sourceMap": "194:305:76:-:0;;;272:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;351:12;366:38;377:7;386:5;393:10;366;;;:38;;:::i;:::-;351:53;;447:7;444:1;437:18;479:1;475:2;468:13;673:1911:64;796:4;449:66;1184:24;;1153:27;1169:10;1153:15;;;:27;;:::i;:::-;:55;1149:674;;1224:22;1260:28;1302:24;1417:10;1389:93;;;;;;;;;;;;:::i;:::-;1340:142;;;;;;;;;;;;1498:12;1516:14;:19;;1536:15;1516:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1497:55;;;1594:1;1571:7;:19;;;:24;1567:113;;1623:7;1615:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;1567:113;563:10;1797:15;;1717:95;;;1732:7;1717:40;;;1758:5;1765:11;1717:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:95;;;;1694:118;;;;;;;;1149:674;1859:1;1837:7;:19;;;:23;1833:171;;;563:10;1978:15;;1899:94;;;1914:7;1899:40;;;1940:5;1947:10;1899:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:94;;;;1876:117;;;;1833:171;2090:2;2069:10;:17;:23;2048:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;2186:22;;:::i;:::-;2249:10;2241:18;;2278:9;2290:4;2295:1;2290:7;;;;;;;:::i;:::-;;;;;;2278:19;;2307:9;2319:4;2324:1;2319:7;;;;;;;:::i;:::-;;;;;;2307:19;;2336:7;2352:10;2363:2;2352:14;;;;;;;;:::i;:::-;;;;;;;;;;2346:21;;2336:31;;2386:2;2381:1;:7;;;;:18;;;;;2397:2;2392:1;:7;;;;2381:18;2377:148;;;2415:99;;;;;;;;;;:::i;:::-;;;;;;;;2377:148;2570:7;2541:36;;:25;2551:5;2558:1;2561;2564;2541:25;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;2534:43;;;;;;673:1911;;;;;;:::o;2590:215::-;2671:11;2717:2;2702:4;:11;:17;;2694:26;;;;;;2782:4;2776:11;2770:4;2766:22;2760:29;2753:36;;2590:215;;;:::o;194:305:76:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:87:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:77::-;882:7;911:5;900:16;;845:77;;;:::o;928:122::-;1001:24;1019:5;1001:24;:::i;:::-;994:5;991:35;981:63;;1040:1;1037;1030:12;981:63;928:122;:::o;1056:143::-;1113:5;1144:6;1138:13;1129:22;;1160:33;1187:5;1160:33;:::i;:::-;1056:143;;;;:::o;1205:117::-;1314:1;1311;1304:12;1328:117;1437:1;1434;1427:12;1451:102;1492:6;1543:2;1539:7;1534:2;1527:5;1523:14;1519:28;1509:38;;1451:102;;;:::o;1559:180::-;1607:77;1604:1;1597:88;1704:4;1701:1;1694:15;1728:4;1725:1;1718:15;1745:281;1828:27;1850:4;1828:27;:::i;:::-;1820:6;1816:40;1958:6;1946:10;1943:22;1922:18;1910:10;1907:34;1904:62;1901:88;;;1969:18;;:::i;:::-;1901:88;2009:10;2005:2;1998:22;1788:238;1745:281;;:::o;2032:129::-;2066:6;2093:20;;:::i;:::-;2083:30;;2122:33;2150:4;2142:6;2122:33;:::i;:::-;2032:129;;;:::o;2167:307::-;2228:4;2318:18;2310:6;2307:30;2304:56;;;2340:18;;:::i;:::-;2304:56;2378:29;2400:6;2378:29;:::i;:::-;2370:37;;2462:4;2456;2452:15;2444:23;;2167:307;;;:::o;2480:139::-;2569:6;2564:3;2559;2553:23;2610:1;2601:6;2596:3;2592:16;2585:27;2480:139;;;:::o;2625:432::-;2713:5;2738:65;2754:48;2795:6;2754:48;:::i;:::-;2738:65;:::i;:::-;2729:74;;2826:6;2819:5;2812:21;2864:4;2857:5;2853:16;2902:3;2893:6;2888:3;2884:16;2881:25;2878:112;;;2909:79;;:::i;:::-;2878:112;2999:52;3044:6;3039:3;3034;2999:52;:::i;:::-;2719:338;2625:432;;;;;:::o;3076:353::-;3142:5;3191:3;3184:4;3176:6;3172:17;3168:27;3158:122;;3199:79;;:::i;:::-;3158:122;3309:6;3303:13;3334:89;3419:3;3411:6;3404:4;3396:6;3392:17;3334:89;:::i;:::-;3325:98;;3148:281;3076:353;;;;:::o;3435:834::-;3532:6;3540;3548;3597:2;3585:9;3576:7;3572:23;3568:32;3565:119;;;3603:79;;:::i;:::-;3565:119;3723:1;3748:64;3804:7;3795:6;3784:9;3780:22;3748:64;:::i;:::-;3738:74;;3694:128;3861:2;3887:64;3943:7;3934:6;3923:9;3919:22;3887:64;:::i;:::-;3877:74;;3832:129;4021:2;4010:9;4006:18;4000:25;4052:18;4044:6;4041:30;4038:117;;;4074:79;;:::i;:::-;4038:117;4179:73;4244:7;4235:6;4224:9;4220:22;4179:73;:::i;:::-;4169:83;;3971:291;3435:834;;;;;:::o;4275:104::-;4320:7;4349:24;4367:5;4349:24;:::i;:::-;4338:35;;4275:104;;;:::o;4385:138::-;4466:32;4492:5;4466:32;:::i;:::-;4459:5;4456:43;4446:71;;4513:1;4510;4503:12;4446:71;4385:138;:::o;4529:159::-;4594:5;4625:6;4619:13;4610:22;;4641:41;4676:5;4641:41;:::i;:::-;4529:159;;;;:::o;4694:1021::-;4808:6;4816;4824;4873:2;4861:9;4852:7;4848:23;4844:32;4841:119;;;4879:79;;:::i;:::-;4841:119;4999:1;5024:72;5088:7;5079:6;5068:9;5064:22;5024:72;:::i;:::-;5014:82;;4970:136;5166:2;5155:9;5151:18;5145:25;5197:18;5189:6;5186:30;5183:117;;;5219:79;;:::i;:::-;5183:117;5324:73;5389:7;5380:6;5369:9;5365:22;5324:73;:::i;:::-;5314:83;;5116:291;5467:2;5456:9;5452:18;5446:25;5498:18;5490:6;5487:30;5484:117;;;5520:79;;:::i;:::-;5484:117;5625:73;5690:7;5681:6;5670:9;5666:22;5625:73;:::i;:::-;5615:83;;5417:291;4694:1021;;;;;:::o;5721:98::-;5772:6;5806:5;5800:12;5790:22;;5721:98;;;:::o;5825:147::-;5926:11;5963:3;5948:18;;5825:147;;;;:::o;5978:386::-;6082:3;6110:38;6142:5;6110:38;:::i;:::-;6164:88;6245:6;6240:3;6164:88;:::i;:::-;6157:95;;6261:65;6319:6;6314:3;6307:4;6300:5;6296:16;6261:65;:::i;:::-;6351:6;6346:3;6342:16;6335:23;;6086:278;5978:386;;;;:::o;6370:271::-;6500:3;6522:93;6611:3;6602:6;6522:93;:::i;:::-;6515:100;;6632:3;6625:10;;6370:271;;;;:::o;6647:169::-;6731:11;6765:6;6760:3;6753:19;6805:4;6800:3;6796:14;6781:29;;6647:169;;;;:::o;6822:180::-;6962:32;6958:1;6950:6;6946:14;6939:56;6822:180;:::o;7008:366::-;7150:3;7171:67;7235:2;7230:3;7171:67;:::i;:::-;7164:74;;7247:93;7336:3;7247:93;:::i;:::-;7365:2;7360:3;7356:12;7349:19;;7008:366;;;:::o;7380:419::-;7546:4;7584:2;7573:9;7569:18;7561:26;;7633:9;7627:4;7623:20;7619:1;7608:9;7604:17;7597:47;7661:131;7787:4;7661:131;:::i;:::-;7653:139;;7380:419;;;:::o;7805:118::-;7892:24;7910:5;7892:24;:::i;:::-;7887:3;7880:37;7805:118;;:::o;7929:168::-;8012:11;8046:6;8041:3;8034:19;8086:4;8081:3;8077:14;8062:29;;7929:168;;;;:::o;8103:373::-;8189:3;8217:38;8249:5;8217:38;:::i;:::-;8271:70;8334:6;8329:3;8271:70;:::i;:::-;8264:77;;8350:65;8408:6;8403:3;8396:4;8389:5;8385:16;8350:65;:::i;:::-;8440:29;8462:6;8440:29;:::i;:::-;8435:3;8431:39;8424:46;;8193:283;8103:373;;;;:::o;8482:419::-;8621:4;8659:2;8648:9;8644:18;8636:26;;8672:71;8740:1;8729:9;8725:17;8716:6;8672:71;:::i;:::-;8790:9;8784:4;8780:20;8775:2;8764:9;8760:18;8753:48;8818:76;8889:4;8880:6;8818:76;:::i;:::-;8810:84;;8482:419;;;;;:::o;8907:149::-;8943:7;8983:66;8976:5;8972:78;8961:89;;8907:149;;;:::o;9062:120::-;9134:23;9151:5;9134:23;:::i;:::-;9127:5;9124:34;9114:62;;9172:1;9169;9162:12;9114:62;9062:120;:::o;9188:141::-;9244:5;9275:6;9269:13;9260:22;;9291:32;9317:5;9291:32;:::i;:::-;9188:141;;;;:::o;9335:349::-;9404:6;9453:2;9441:9;9432:7;9428:23;9424:32;9421:119;;;9459:79;;:::i;:::-;9421:119;9579:1;9604:63;9659:7;9650:6;9639:9;9635:22;9604:63;:::i;:::-;9594:73;;9550:127;9335:349;;;;:::o;9690:245::-;9830:34;9826:1;9818:6;9814:14;9807:58;9899:28;9894:2;9886:6;9882:15;9875:53;9690:245;:::o;9941:366::-;10083:3;10104:67;10168:2;10163:3;10104:67;:::i;:::-;10097:74;;10180:93;10269:3;10180:93;:::i;:::-;10298:2;10293:3;10289:12;10282:19;;9941:366;;;:::o;10313:419::-;10479:4;10517:2;10506:9;10502:18;10494:26;;10566:9;10560:4;10556:20;10552:1;10541:9;10537:17;10530:47;10594:131;10720:4;10594:131;:::i;:::-;10586:139;;10313:419;;;:::o;10738:180::-;10786:77;10783:1;10776:88;10883:4;10880:1;10873:15;10907:4;10904:1;10897:15;10924:246;11064:34;11060:1;11052:6;11048:14;11041:58;11133:29;11128:2;11120:6;11116:15;11109:54;10924:246;:::o;11176:366::-;11318:3;11339:67;11403:2;11398:3;11339:67;:::i;:::-;11332:74;;11415:93;11504:3;11415:93;:::i;:::-;11533:2;11528:3;11524:12;11517:19;;11176:366;;;:::o;11548:419::-;11714:4;11752:2;11741:9;11737:18;11729:26;;11801:9;11795:4;11791:20;11787:1;11776:9;11772:17;11765:47;11829:131;11955:4;11829:131;:::i;:::-;11821:139;;11548:419;;;:::o;11973:86::-;12008:7;12048:4;12041:5;12037:16;12026:27;;11973:86;;;:::o;12065:112::-;12148:22;12164:5;12148:22;:::i;:::-;12143:3;12136:35;12065:112;;:::o;12183:545::-;12356:4;12394:3;12383:9;12379:19;12371:27;;12408:71;12476:1;12465:9;12461:17;12452:6;12408:71;:::i;:::-;12489:68;12553:2;12542:9;12538:18;12529:6;12489:68;:::i;:::-;12567:72;12635:2;12624:9;12620:18;12611:6;12567:72;:::i;:::-;12649;12717:2;12706:9;12702:18;12693:6;12649:72;:::i;:::-;12183:545;;;;;;;:::o",
+ "linkReferences": {}
+ }
+} as const;
+
+export const Panic = {
+ "abi": [],
+ "bytecode": {
+ "object": "0x6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220def50e0d309e9fb6df65d934564c234152001911a700b3d67c698f75b316791c64736f6c634300081c0033",
+ "sourceMap": "561:1342:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const EoaInitializer = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "initialize",
+ "inputs": [
+ {
+ "name": "eoa",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b506101668061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063c4d66de81461002d575b5f5ffd5b61004760048036038101906100429190610105565b610049565b005b8073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561008e575f5ffd5b505af11580156100a0573d5f5f3e3d5ffd5b5050505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100d4826100ab565b9050919050565b6100e4816100ca565b81146100ee575f5ffd5b50565b5f813590506100ff816100db565b92915050565b5f6020828403121561011a576101196100a7565b5b5f610127848285016100f1565b9150509291505056fea2646970667358221220337bbc4b1e5690a0e8fdb1c3fce1db3215fbf581034c5e291ae8fdc8e9b6c94964736f6c634300081c0033",
+ "sourceMap": "179:145:67:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const LibZip = {
+ "abi": [],
+ "bytecode": {
+ "object": "0x6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212203950e3874f3f30f0b5db8717ebd78bdfa6771f7f0e0255b10de7e6bca455e33464736f6c634300081c0033",
+ "sourceMap": "492:11844:58:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const LibClone = {
+ "abi": [
+ {
+ "type": "error",
+ "name": "DeploymentFailed",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "ETHTransferFailed",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "SaltDoesNotStartWith",
+ "inputs": []
+ }
+ ],
+ "bytecode": {
+ "object": "0x6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220dd70d46899b811bdd0d511f272b381410ae29f280886514e2e85147e6e8393ce64736f6c634300081c0033",
+ "sourceMap": "1796:49207:57:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const ECDSA = {
+ "abi": [
+ {
+ "type": "error",
+ "name": "InvalidSignature",
+ "inputs": []
+ }
+ ],
+ "bytecode": {
+ "object": "0x6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212206eb1b7d740c4bdf6bf0af39e84c034751296b66c7aaf8cd5cc0b9f18fefbfc7b64736f6c634300081c0033",
+ "sourceMap": "1558:18640:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const SoladyAccountFactory07 = {
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ {
+ "name": "erc4337",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "createAccount",
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "getAddress",
+ "inputs": [
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "implementation",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "initCodeHash",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x60a060405234801561000f575f5ffd5b50604051610675380380610675833981810160405281019061003191906100cb565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050506100f6565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61009a82610071565b9050919050565b6100aa81610090565b81146100b4575f5ffd5b50565b5f815190506100c5816100a1565b92915050565b5f602082840312156100e0576100df61006d565b5b5f6100ed848285016100b7565b91505092915050565b6080516105526101235f395f8181610108015281816101370152818161015f015261019b01526105525ff3fe60806040526004361061003e575f3560e01c806321f8a721146100425780635c60da1b1461007e578063db4c545e146100a8578063f14ddffc146100d2575b5f5ffd5b34801561004d575f5ffd5b5061006860048036038101906100639190610409565b610102565b6040516100759190610473565b60405180910390f35b348015610089575f5ffd5b50610092610135565b60405161009f9190610473565b60405180910390f35b3480156100b3575f5ffd5b506100bc610159565b6040516100c9919061049b565b60405180910390f35b6100ec60048036038101906100e791906104de565b610188565b6040516100f99190610473565b60405180910390f35b5f61012e7f00000000000000000000000000000000000000000000000000000000000000008330610206565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6101837f0000000000000000000000000000000000000000000000000000000000000000610228565b905090565b5f61019382846102a0565b5f5f6101c0347f0000000000000000000000000000000000000000000000000000000000000000866102c7565b91509150816101fb57846014526fc4d66de80000000000000000000000005f525f38602460105f855af16101fa573d5f6040513e3d604051fd5b5b809250505092915050565b5f5f61021185610228565b905061021e8185856103ad565b9150509392505050565b5f6040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205282601e5268603d3d8160223d3973600a52605f6021209150806040525f60605250919050565b8160601c8160601b60601c148260601c15176102c357630c4549ef5f526004601cfd5b5050565b5f5f6040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff815383601582015260558120915060011561039c57813b6103785783605f602188f59150816103735763301164255f526004601cfd5b61039c565b60019250851561039c575f385f3889865af161039b5763b12d13eb5f526004601cfd5b5b806040525f60605250935093915050565b5f60ff5f53836035528160601b6001528260155260555f2090505f6035529392505050565b5f5ffd5b5f819050919050565b6103e8816103d6565b81146103f2575f5ffd5b50565b5f81359050610403816103df565b92915050565b5f6020828403121561041e5761041d6103d2565b5b5f61042b848285016103f5565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61045d82610434565b9050919050565b61046d81610453565b82525050565b5f6020820190506104865f830184610464565b92915050565b610495816103d6565b82525050565b5f6020820190506104ae5f83018461048c565b92915050565b6104bd81610453565b81146104c7575f5ffd5b50565b5f813590506104d8816104b4565b92915050565b5f5f604083850312156104f4576104f36103d2565b5b5f610501858286016104ca565b9250506020610512858286016103f5565b915050925092905056fea26469706673582212209103206208145de58a86917b1dc0106b27c11904c2c65c702a826beae681fa3664736f6c634300081c0033",
+ "sourceMap": "140:113:71:-:0;;;196:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;240:7;1619::43;1602:24;;;;;;;;;;1555:78;196:55:71;140:113;;88:117:87;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:351::-;915:6;964:2;952:9;943:7;939:23;935:32;932:119;;;970:79;;:::i;:::-;932:119;1090:1;1115:64;1171:7;1162:6;1151:9;1147:22;1115:64;:::i;:::-;1105:74;;1061:128;845:351;;;;:::o;140:113:71:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const SignedMath = {
+ "abi": [],
+ "bytecode": {
+ "object": "0x6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212202cd547e38590d2a36115b528db2d482a4c18bf621623c9ce877d5344f06fabbc64736f6c634300081c0033",
+ "sourceMap": "258:2350:40:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const Eoa = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "initialize",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "isInitialized",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "isValidSignature",
+ "inputs": [
+ {
+ "name": "hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b5061037e8061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80631626ba7e14610043578063392e53cd146100735780638129fc1c14610091575b5f5ffd5b61005d60048036038101906100589190610265565b61009b565b60405161006a91906102fc565b60405180910390f35b61007b610111565b604051610088919061032f565b60405180910390f35b610099610122565b005b5f5f5f9054906101000a900460ff166100bd5763ffffffff60e01b905061010a565b5f3073ffffffffffffffffffffffffffffffffffffffff166100e086868661013d565b73ffffffffffffffffffffffffffffffffffffffff1614905080155f03631626ba7e1760e01b9150505b9392505050565b5f5f9054906101000a900460ff1681565b60015f5f6101000a81548160ff021916908315150217905550565b5f6040516001156101c157826040811461015f576041811461018357506101b4565b6020850135601b8160ff1c0160205285356040528060011b60011c60605250610194565b60408501355f1a6020526040856040375b50845f526020600160805f60015afa5191505f606052806040523d6101c1575b638baa579f5f526004601cfd5b509392505050565b5f5ffd5b5f5ffd5b5f819050919050565b6101e3816101d1565b81146101ed575f5ffd5b50565b5f813590506101fe816101da565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261022557610224610204565b5b8235905067ffffffffffffffff81111561024257610241610208565b5b60208301915083600182028301111561025e5761025d61020c565b5b9250929050565b5f5f5f6040848603121561027c5761027b6101c9565b5b5f610289868287016101f0565b935050602084013567ffffffffffffffff8111156102aa576102a96101cd565b5b6102b686828701610210565b92509250509250925092565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6102f6816102c2565b82525050565b5f60208201905061030f5f8301846102ed565b92915050565b5f8115159050919050565b61032981610315565b82525050565b5f6020820190506103425f830184610320565b9291505056fea26469706673582212207d70dcf8d9defcbbaf152ff008d546430dafa02dbec2bcae37b4c7419f8c74a964736f6c634300081c0033",
+ "sourceMap": "177:1448:66:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const SoladyAccountFactory06 = {
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ {
+ "name": "erc4337",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "createAccount",
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "getAddress",
+ "inputs": [
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "implementation",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "initCodeHash",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x60a060405234801561000f575f5ffd5b50604051610675380380610675833981810160405281019061003191906100cb565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050506100f6565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61009a82610071565b9050919050565b6100aa81610090565b81146100b4575f5ffd5b50565b5f815190506100c5816100a1565b92915050565b5f602082840312156100e0576100df61006d565b5b5f6100ed848285016100b7565b91505092915050565b6080516105526101235f395f8181610108015281816101370152818161015f015261019b01526105525ff3fe60806040526004361061003e575f3560e01c806321f8a721146100425780635c60da1b1461007e578063db4c545e146100a8578063f14ddffc146100d2575b5f5ffd5b34801561004d575f5ffd5b5061006860048036038101906100639190610409565b610102565b6040516100759190610473565b60405180910390f35b348015610089575f5ffd5b50610092610135565b60405161009f9190610473565b60405180910390f35b3480156100b3575f5ffd5b506100bc610159565b6040516100c9919061049b565b60405180910390f35b6100ec60048036038101906100e791906104de565b610188565b6040516100f99190610473565b60405180910390f35b5f61012e7f00000000000000000000000000000000000000000000000000000000000000008330610206565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6101837f0000000000000000000000000000000000000000000000000000000000000000610228565b905090565b5f61019382846102a0565b5f5f6101c0347f0000000000000000000000000000000000000000000000000000000000000000866102c7565b91509150816101fb57846014526fc4d66de80000000000000000000000005f525f38602460105f855af16101fa573d5f6040513e3d604051fd5b5b809250505092915050565b5f5f61021185610228565b905061021e8185856103ad565b9150509392505050565b5f6040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205282601e5268603d3d8160223d3973600a52605f6021209150806040525f60605250919050565b8160601c8160601b60601c148260601c15176102c357630c4549ef5f526004601cfd5b5050565b5f5f6040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff815383601582015260558120915060011561039c57813b6103785783605f602188f59150816103735763301164255f526004601cfd5b61039c565b60019250851561039c575f385f3889865af161039b5763b12d13eb5f526004601cfd5b5b806040525f60605250935093915050565b5f60ff5f53836035528160601b6001528260155260555f2090505f6035529392505050565b5f5ffd5b5f819050919050565b6103e8816103d6565b81146103f2575f5ffd5b50565b5f81359050610403816103df565b92915050565b5f6020828403121561041e5761041d6103d2565b5b5f61042b848285016103f5565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61045d82610434565b9050919050565b61046d81610453565b82525050565b5f6020820190506104865f830184610464565b92915050565b610495816103d6565b82525050565b5f6020820190506104ae5f83018461048c565b92915050565b6104bd81610453565b81146104c7575f5ffd5b50565b5f813590506104d8816104b4565b92915050565b5f5f604083850312156104f4576104f36103d2565b5b5f610501858286016104ca565b9250506020610512858286016103f5565b915050925092905056fea2646970667358221220c6b1a9acea6dfe319c13ae431cb7496bae9a1622360c12e50ab00573fa55c88d64736f6c634300081c0033",
+ "sourceMap": "140:113:70:-:0;;;196:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;240:7;1619::53;1602:24;;;;;;;;;;1555:78;196:55:70;140:113;;88:117:87;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:351::-;915:6;964:2;952:9;943:7;939:23;935:32;932:119;;;970:79;;:::i;:::-;932:119;1090:1;1115:64;1171:7;1162:6;1151:9;1147:22;1115:64;:::i;:::-;1105:74;;1061:128;845:351;;;;:::o;140:113:70:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const VerifyingPaymaster = {
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ {
+ "name": "_entryPoint",
+ "type": "address",
+ "internalType": "contract IEntryPoint"
+ },
+ {
+ "name": "_verifyingSigner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "addStake",
+ "inputs": [
+ {
+ "name": "unstakeDelaySec",
+ "type": "uint32",
+ "internalType": "uint32"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "deposit",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "entryPoint",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract IEntryPoint"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getDeposit",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getHash",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "validUntil",
+ "type": "uint48",
+ "internalType": "uint48"
+ },
+ {
+ "name": "validAfter",
+ "type": "uint48",
+ "internalType": "uint48"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "owner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "parsePaymasterAndData",
+ "inputs": [
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "validUntil",
+ "type": "uint48",
+ "internalType": "uint48"
+ },
+ {
+ "name": "validAfter",
+ "type": "uint48",
+ "internalType": "uint48"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "postOp",
+ "inputs": [
+ {
+ "name": "mode",
+ "type": "uint8",
+ "internalType": "enum IPaymaster.PostOpMode"
+ },
+ {
+ "name": "context",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "actualGasCost",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "actualUserOpFeePerGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "renounceOwnership",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "transferOwnership",
+ "inputs": [
+ {
+ "name": "newOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "unlockStake",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "validatePaymasterUserOp",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "maxCost",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "context",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "validationData",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "verifyingSigner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "withdrawStake",
+ "inputs": [
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "internalType": "address payable"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "withdrawTo",
+ "inputs": [
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "internalType": "address payable"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "OwnershipTransferred",
+ "inputs": [
+ {
+ "name": "previousOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "newOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignature",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignatureLength",
+ "inputs": [
+ {
+ "name": "length",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignatureS",
+ "inputs": [
+ {
+ "name": "s",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "OwnableInvalidOwner",
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "OwnableUnauthorizedAccount",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x60c060405234801561000f575f5ffd5b5060405161218638038061218683398181016040528101906100319190610366565b81335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a3575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009a91906103b3565b60405180910390fd5b6100b28161013260201b60201c565b506100c2816101f360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505050506104f7565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77f915074d8000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161024c9190610406565b602060405180830381865afa158015610267573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028b9190610454565b6102ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c1906104d9565b60405180910390fd5b50565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102fa826102d1565b9050919050565b5f61030b826102f0565b9050919050565b61031b81610301565b8114610325575f5ffd5b50565b5f8151905061033681610312565b92915050565b610345816102f0565b811461034f575f5ffd5b50565b5f815190506103608161033c565b92915050565b5f5f6040838503121561037c5761037b6102cd565b5b5f61038985828601610328565b925050602061039a85828601610352565b9150509250929050565b6103ad816102f0565b82525050565b5f6020820190506103c65f8301846103a4565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610400816103cc565b82525050565b5f6020820190506104195f8301846103f7565b92915050565b5f8115159050919050565b6104338161041f565b811461043d575f5ffd5b50565b5f8151905061044e8161042a565b92915050565b5f60208284031215610469576104686102cd565b5b5f61047684828501610440565b91505092915050565b5f82825260208201905092915050565b7f49456e747279506f696e7420696e74657266616365206d69736d6174636800005f82015250565b5f6104c3601e8361047f565b91506104ce8261048f565b602082019050919050565b5f6020820190508181035f8301526104f0816104b7565b9050919050565b60805160a051611c366105505f395f81816104660152610b2701525f8181610347015281816103da0152818161063601528181610662015281816106e7015281816107710152818161080e01526109a30152611c365ff3fe6080604052600436106100e7575f3560e01c80638da5cb5b11610089578063c23a5cea11610058578063c23a5cea146102b9578063c399ec88146102e1578063d0e30db01461030b578063f2fde38b14610315576100e7565b80638da5cb5b1461021057806394d4ad601461023a578063b0d691fe14610279578063bb9fe6bf146102a3576100e7565b806352b7512c116100c557806352b7512c146101595780635829c5f514610196578063715018a6146101d25780637c627b21146101e8576100e7565b80630396cb60146100eb578063205c28781461010757806323d9ac9b1461012f575b5f5ffd5b6101056004803603810190610100919061103d565b61033d565b005b348015610112575f5ffd5b5061012d600480360381019061012891906110f5565b6103d0565b005b34801561013a575f5ffd5b50610143610464565b6040516101509190611153565b60405180910390f35b348015610164575f5ffd5b5061017f600480360381019061017a91906111c2565b610488565b60405161018d9291906112ad565b60405180910390f35b3480156101a1575f5ffd5b506101bc60048036038101906101b79190611316565b6104aa565b6040516101c99190611391565b60405180910390f35b3480156101dd575f5ffd5b506101e6610586565b005b3480156101f3575f5ffd5b5061020e6004803603810190610209919061142e565b610599565b005b34801561021b575f5ffd5b506102246105b5565b6040516102319190611153565b60405180910390f35b348015610245575f5ffd5b50610260600480360381019061025b91906114b2565b6105dc565b6040516102709493929190611546565b60405180910390f35b348015610284575f5ffd5b5061028d610634565b60405161029a91906115df565b60405180910390f35b3480156102ae575f5ffd5b506102b7610658565b005b3480156102c4575f5ffd5b506102df60048036038101906102da91906115f8565b6106dd565b005b3480156102ec575f5ffd5b506102f561076e565b6040516103029190611623565b60405180910390f35b61031361080c565b005b348015610320575f5ffd5b5061033b60048036038101906103369190611666565b610896565b005b61034561091a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b815260040161039f91906116a0565b5f604051808303818588803b1580156103b6575f5ffd5b505af11580156103c8573d5f5f3e3d5ffd5b505050505050565b6103d861091a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016104339291906116c8565b5f604051808303815f87803b15801561044a575f5ffd5b505af115801561045c573d5f5f3e3d5ffd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60605f6104936109a1565b61049e858585610a31565b91509150935093915050565b5f5f6104b585610bb8565b90508085602001358680604001906104cd91906116fb565b6040516104db92919061178b565b60405180910390208780606001906104f391906116fb565b60405161050192919061178b565b60405180910390208860800135898060e0019061051e91906116fb565b601490603492610530939291906117ab565b9061053b91906117fb565b5f1c8a60a001358b60c0013546308d8d6040516020016105669c9b9a99989796959493929190611859565b604051602081830303815290604052805190602001209150509392505050565b61058e61091a565b6105975f610bc7565b565b6105a16109a1565b6105ae8585858585610c88565b5050505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f365f858560349080926105f3939291906117ab565b8101906106009190611911565b8094508195505050858560406034610618919061197c565b908092610627939291906117ab565b9150915092959194509250565b7f000000000000000000000000000000000000000000000000000000000000000081565b61066061091a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156106c5575f5ffd5b505af11580156106d7573d5f5f3e3d5ffd5b50505050565b6106e561091a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b815260040161073e91906119af565b5f604051808303815f87803b158015610755575f5ffd5b505af1158015610767573d5f5f3e3d5ffd5b5050505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107c89190611153565b602060405180830381865afa1580156107e3573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080791906119dc565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b81526004016108669190611153565b5f604051808303818588803b15801561087d575f5ffd5b505af115801561088f573d5f5f3e3d5ffd5b5050505050565b61089e61091a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361090e575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016109059190611153565b60405180910390fd5b61091781610bc7565b50565b610922610cc3565b73ffffffffffffffffffffffffffffffffffffffff166109406105b5565b73ffffffffffffffffffffffffffffffffffffffff161461099f57610963610cc3565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016109969190611153565b60405180910390fd5b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2690611a61565b60405180910390fd5b565b60605f5f5f365f610a50898060e00190610a4b91906116fb565b6105dc565b93509350935093506040828290501480610a6d5750604182829050145b610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa390611aef565b60405180910390fd5b5f610ac0610abb8b87876104aa565b610cca565b9050610b0f8184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050610cfd565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610b8b57610b6d60018686610d27565b60405180602001604052805f81525090965096505050505050610bb0565b610b965f8686610d27565b60405180602001604052805f815250909650965050505050505b935093915050565b5f5f8235905080915050919050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90611b57565b60405180910390fd5b5f33905090565b5f7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f5281601c52603c5f209050919050565b5f5f5f5f610d0b8686610d5e565b925092509250610d1b8282610db3565b82935050505092915050565b5f60d08265ffffffffffff16901b60a08465ffffffffffff16901b85610d4d575f610d50565b60015b60ff16171790509392505050565b5f5f5f6041845103610d9e575f5f5f602087015192506040870151915060608701515f1a9050610d9088828585610f15565b955095509550505050610dac565b5f600285515f1b9250925092505b9250925092565b5f6003811115610dc657610dc5611b75565b5b826003811115610dd957610dd8611b75565b5b0315610f115760016003811115610df357610df2611b75565b5b826003811115610e0657610e05611b75565b5b03610e3d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115610e5157610e50611b75565b5b826003811115610e6457610e63611b75565b5b03610ea857805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401610e9f9190611623565b60405180910390fd5b600380811115610ebb57610eba611b75565b5b826003811115610ece57610ecd611b75565b5b03610f1057806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401610f079190611391565b60405180910390fd5b5b5050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115610f51575f600385925092509250610ff2565b5f6001888888886040515f8152602001604052604051610f749493929190611bbd565b6020604051602081039080840390855afa158015610f94573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fe5575f60015f5f1b93509350935050610ff2565b805f5f5f1b935093509350505b9450945094915050565b5f5ffd5b5f5ffd5b5f63ffffffff82169050919050565b61101c81611004565b8114611026575f5ffd5b50565b5f8135905061103781611013565b92915050565b5f6020828403121561105257611051610ffc565b5b5f61105f84828501611029565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61109182611068565b9050919050565b6110a181611087565b81146110ab575f5ffd5b50565b5f813590506110bc81611098565b92915050565b5f819050919050565b6110d4816110c2565b81146110de575f5ffd5b50565b5f813590506110ef816110cb565b92915050565b5f5f6040838503121561110b5761110a610ffc565b5b5f611118858286016110ae565b9250506020611129858286016110e1565b9150509250929050565b5f61113d82611068565b9050919050565b61114d81611133565b82525050565b5f6020820190506111665f830184611144565b92915050565b5f5ffd5b5f61012082840312156111865761118561116c565b5b81905092915050565b5f819050919050565b6111a18161118f565b81146111ab575f5ffd5b50565b5f813590506111bc81611198565b92915050565b5f5f5f606084860312156111d9576111d8610ffc565b5b5f84013567ffffffffffffffff8111156111f6576111f5611000565b5b61120286828701611170565b9350506020611213868287016111ae565b9250506040611224868287016110e1565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6112708261122e565b61127a8185611238565b935061128a818560208601611248565b61129381611256565b840191505092915050565b6112a7816110c2565b82525050565b5f6040820190508181035f8301526112c58185611266565b90506112d4602083018461129e565b9392505050565b5f65ffffffffffff82169050919050565b6112f5816112db565b81146112ff575f5ffd5b50565b5f81359050611310816112ec565b92915050565b5f5f5f6060848603121561132d5761132c610ffc565b5b5f84013567ffffffffffffffff81111561134a57611349611000565b5b61135686828701611170565b935050602061136786828701611302565b925050604061137886828701611302565b9150509250925092565b61138b8161118f565b82525050565b5f6020820190506113a45f830184611382565b92915050565b600381106113b6575f5ffd5b50565b5f813590506113c7816113aa565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f8401126113ee576113ed6113cd565b5b8235905067ffffffffffffffff81111561140b5761140a6113d1565b5b602083019150836001820283011115611427576114266113d5565b5b9250929050565b5f5f5f5f5f6080868803121561144757611446610ffc565b5b5f611454888289016113b9565b955050602086013567ffffffffffffffff81111561147557611474611000565b5b611481888289016113d9565b94509450506040611494888289016110e1565b92505060606114a5888289016110e1565b9150509295509295909350565b5f5f602083850312156114c8576114c7610ffc565b5b5f83013567ffffffffffffffff8111156114e5576114e4611000565b5b6114f1858286016113d9565b92509250509250929050565b611506816112db565b82525050565b828183375f83830152505050565b5f6115258385611238565b935061153283858461150c565b61153b83611256565b840190509392505050565b5f6060820190506115595f8301876114fd565b61156660208301866114fd565b818103604083015261157981848661151a565b905095945050505050565b5f819050919050565b5f6115a76115a261159d84611068565b611584565b611068565b9050919050565b5f6115b88261158d565b9050919050565b5f6115c9826115ae565b9050919050565b6115d9816115bf565b82525050565b5f6020820190506115f25f8301846115d0565b92915050565b5f6020828403121561160d5761160c610ffc565b5b5f61161a848285016110ae565b91505092915050565b5f6020820190506116365f83018461129e565b92915050565b61164581611133565b811461164f575f5ffd5b50565b5f813590506116608161163c565b92915050565b5f6020828403121561167b5761167a610ffc565b5b5f61168884828501611652565b91505092915050565b61169a81611004565b82525050565b5f6020820190506116b35f830184611691565b92915050565b6116c281611087565b82525050565b5f6040820190506116db5f8301856116b9565b6116e8602083018461129e565b9392505050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83356001602003843603038112611717576117166116ef565b5b80840192508235915067ffffffffffffffff821115611739576117386116f3565b5b602083019250600182023603831315611755576117546116f7565b5b509250929050565b5f81905092915050565b5f611772838561175d565b935061177f83858461150c565b82840190509392505050565b5f611797828486611767565b91508190509392505050565b5f5ffd5b5f5ffd5b5f5f858511156117be576117bd6117a3565b5b838611156117cf576117ce6117a7565b5b6001850283019150848603905094509492505050565b5f82905092915050565b5f82821b905092915050565b5f61180683836117e5565b82611811813561118f565b925060208210156118515761184c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026117ef565b831692505b505092915050565b5f6101808201905061186d5f83018f611144565b61187a602083018e61129e565b611887604083018d611382565b611894606083018c611382565b6118a1608083018b611382565b6118ae60a083018a61129e565b6118bb60c083018961129e565b6118c860e0830188611382565b6118d661010083018761129e565b6118e4610120830186611144565b6118f26101408301856114fd565b6119006101608301846114fd565b9d9c50505050505050505050505050565b5f5f6040838503121561192757611926610ffc565b5b5f61193485828601611302565b925050602061194585828601611302565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611986826110c2565b9150611991836110c2565b92508282019050808211156119a9576119a861194f565b5b92915050565b5f6020820190506119c25f8301846116b9565b92915050565b5f815190506119d6816110cb565b92915050565b5f602082840312156119f1576119f0610ffc565b5b5f6119fe848285016119c8565b91505092915050565b5f82825260208201905092915050565b7f53656e646572206e6f7420456e747279506f696e7400000000000000000000005f82015250565b5f611a4b601583611a07565b9150611a5682611a17565b602082019050919050565b5f6020820190508181035f830152611a7881611a3f565b9050919050565b7f566572696679696e675061796d61737465723a20696e76616c6964207369676e5f8201527f6174757265206c656e67746820696e207061796d6173746572416e6444617461602082015250565b5f611ad9604083611a07565b9150611ae482611a7f565b604082019050919050565b5f6020820190508181035f830152611b0681611acd565b9050919050565b7f6d757374206f76657272696465000000000000000000000000000000000000005f82015250565b5f611b41600d83611a07565b9150611b4c82611b0d565b602082019050919050565b5f6020820190508181035f830152611b6e81611b35565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff82169050919050565b611bb781611ba2565b82525050565b5f608082019050611bd05f830187611382565b611bdd6020830186611bae565b611bea6040830185611382565b611bf76060830184611382565b9594505050505056fea2646970667358221220698dd13bff244cc6ac391def6f1d9920591ebefb644d6b940646c8a93a416a2564736f6c634300081c0033",
+ "sourceMap": "922:3624:9:-:0;;;1230:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1307:11;950:10:0;1297:1:24;1273:26;;:12;:26;;;1269:95;;1350:1;1322:31;;;;;;;;;;;:::i;:::-;;;;;;;;1269:95;1373:32;1392:12;1373:18;;;:32;;:::i;:::-;1225:187;972:41:0::1;1001:11;972:28;;;:41;;:::i;:::-;1036:11;1023:24;;;;;;;;::::0;::::1;905:149:::0;1348:16:9::1;1330:34;;;;;;;;::::0;::::1;1230:141:::0;;922:3624;;2912:187:24;2985:16;3004:6;;;;;;;;;;;2985:25;;3029:8;3020:6;;:17;;;;;;;;;;;;;;;;;;3083:8;3052:40;;3073:8;3052:40;;;;;;;;;;;;2975:124;2912:187;:::o;1173:218:0:-;1287:11;1271:47;;;1319:29;1271:78;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1263:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;1173:218;:::o;88:117:87:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:116::-;625:7;654:24;672:5;654:24;:::i;:::-;643:35;;568:116;;;:::o;690:162::-;783:44;821:5;783:44;:::i;:::-;776:5;773:55;763:83;;842:1;839;832:12;763:83;690:162;:::o;858:183::-;935:5;966:6;960:13;951:22;;982:53;1029:5;982:53;:::i;:::-;858:183;;;;:::o;1047:122::-;1120:24;1138:5;1120:24;:::i;:::-;1113:5;1110:35;1100:63;;1159:1;1156;1149:12;1100:63;1047:122;:::o;1175:143::-;1232:5;1263:6;1257:13;1248:22;;1279:33;1306:5;1279:33;:::i;:::-;1175:143;;;;:::o;1324:547::-;1423:6;1431;1480:2;1468:9;1459:7;1455:23;1451:32;1448:119;;;1486:79;;:::i;:::-;1448:119;1606:1;1631:84;1707:7;1698:6;1687:9;1683:22;1631:84;:::i;:::-;1621:94;;1577:148;1764:2;1790:64;1846:7;1837:6;1826:9;1822:22;1790:64;:::i;:::-;1780:74;;1735:129;1324:547;;;;;:::o;1877:118::-;1964:24;1982:5;1964:24;:::i;:::-;1959:3;1952:37;1877:118;;:::o;2001:222::-;2094:4;2132:2;2121:9;2117:18;2109:26;;2145:71;2213:1;2202:9;2198:17;2189:6;2145:71;:::i;:::-;2001:222;;;;:::o;2229:149::-;2265:7;2305:66;2298:5;2294:78;2283:89;;2229:149;;;:::o;2384:115::-;2469:23;2486:5;2469:23;:::i;:::-;2464:3;2457:36;2384:115;;:::o;2505:218::-;2596:4;2634:2;2623:9;2619:18;2611:26;;2647:69;2713:1;2702:9;2698:17;2689:6;2647:69;:::i;:::-;2505:218;;;;:::o;2729:90::-;2763:7;2806:5;2799:13;2792:21;2781:32;;2729:90;;;:::o;2825:116::-;2895:21;2910:5;2895:21;:::i;:::-;2888:5;2885:32;2875:60;;2931:1;2928;2921:12;2875:60;2825:116;:::o;2947:137::-;3001:5;3032:6;3026:13;3017:22;;3048:30;3072:5;3048:30;:::i;:::-;2947:137;;;;:::o;3090:345::-;3157:6;3206:2;3194:9;3185:7;3181:23;3177:32;3174:119;;;3212:79;;:::i;:::-;3174:119;3332:1;3357:61;3410:7;3401:6;3390:9;3386:22;3357:61;:::i;:::-;3347:71;;3303:125;3090:345;;;;:::o;3441:169::-;3525:11;3559:6;3554:3;3547:19;3599:4;3594:3;3590:14;3575:29;;3441:169;;;;:::o;3616:180::-;3756:32;3752:1;3744:6;3740:14;3733:56;3616:180;:::o;3802:366::-;3944:3;3965:67;4029:2;4024:3;3965:67;:::i;:::-;3958:74;;4041:93;4130:3;4041:93;:::i;:::-;4159:2;4154:3;4150:12;4143:19;;3802:366;;;:::o;4174:419::-;4340:4;4378:2;4367:9;4363:18;4355:26;;4427:9;4421:4;4417:20;4413:1;4402:9;4398:17;4391:47;4455:131;4581:4;4455:131;:::i;:::-;4447:139;;4174:419;;;:::o;922:3624:9:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const VerifyingPaymaster_07 = {
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ {
+ "name": "entryPoint",
+ "type": "address",
+ "internalType": "contract IEntryPoint"
+ },
+ {
+ "name": "verifyingSigner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "addStake",
+ "inputs": [
+ {
+ "name": "unstakeDelaySec",
+ "type": "uint32",
+ "internalType": "uint32"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "deposit",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "entryPoint",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract IEntryPoint"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getDeposit",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getHash",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "validUntil",
+ "type": "uint48",
+ "internalType": "uint48"
+ },
+ {
+ "name": "validAfter",
+ "type": "uint48",
+ "internalType": "uint48"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "owner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "parsePaymasterAndData",
+ "inputs": [
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "validUntil",
+ "type": "uint48",
+ "internalType": "uint48"
+ },
+ {
+ "name": "validAfter",
+ "type": "uint48",
+ "internalType": "uint48"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "postOp",
+ "inputs": [
+ {
+ "name": "mode",
+ "type": "uint8",
+ "internalType": "enum IPaymaster.PostOpMode"
+ },
+ {
+ "name": "context",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "actualGasCost",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "actualUserOpFeePerGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "renounceOwnership",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "transferOwnership",
+ "inputs": [
+ {
+ "name": "newOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "unlockStake",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "validatePaymasterUserOp",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "maxCost",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "context",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "validationData",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "verifyingSigner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "withdrawStake",
+ "inputs": [
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "internalType": "address payable"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "withdrawTo",
+ "inputs": [
+ {
+ "name": "withdrawAddress",
+ "type": "address",
+ "internalType": "address payable"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "OwnershipTransferred",
+ "inputs": [
+ {
+ "name": "previousOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "newOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignature",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignatureLength",
+ "inputs": [
+ {
+ "name": "length",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignatureS",
+ "inputs": [
+ {
+ "name": "s",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "OwnableInvalidOwner",
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "OwnableUnauthorizedAccount",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x60c060405234801561000f575f5ffd5b5060405161218a38038061218a8339818101604052810190610031919061036a565b818181335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a5575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009c91906103b7565b60405180910390fd5b6100b48161013660201b60201c565b506100c4816101f760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050505050506104fb565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77f915074d8000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610250919061040a565b602060405180830381865afa15801561026b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028f9190610458565b6102ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c5906104dd565b60405180910390fd5b50565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102fe826102d5565b9050919050565b5f61030f826102f4565b9050919050565b61031f81610305565b8114610329575f5ffd5b50565b5f8151905061033a81610316565b92915050565b610349816102f4565b8114610353575f5ffd5b50565b5f8151905061036481610340565b92915050565b5f5f604083850312156103805761037f6102d1565b5b5f61038d8582860161032c565b925050602061039e85828601610356565b9150509250929050565b6103b1816102f4565b82525050565b5f6020820190506103ca5f8301846103a8565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610404816103d0565b82525050565b5f60208201905061041d5f8301846103fb565b92915050565b5f8115159050919050565b61043781610423565b8114610441575f5ffd5b50565b5f815190506104528161042e565b92915050565b5f6020828403121561046d5761046c6102d1565b5b5f61047a84828501610444565b91505092915050565b5f82825260208201905092915050565b7f49456e747279506f696e7420696e74657266616365206d69736d6174636800005f82015250565b5f6104c7601e83610483565b91506104d282610493565b602082019050919050565b5f6020820190508181035f8301526104f4816104bb565b9050919050565b60805160a051611c366105545f395f81816104660152610b2701525f8181610347015281816103da0152818161063601528181610662015281816106e7015281816107710152818161080e01526109a30152611c365ff3fe6080604052600436106100e7575f3560e01c80638da5cb5b11610089578063c23a5cea11610058578063c23a5cea146102b9578063c399ec88146102e1578063d0e30db01461030b578063f2fde38b14610315576100e7565b80638da5cb5b1461021057806394d4ad601461023a578063b0d691fe14610279578063bb9fe6bf146102a3576100e7565b806352b7512c116100c557806352b7512c146101595780635829c5f514610196578063715018a6146101d25780637c627b21146101e8576100e7565b80630396cb60146100eb578063205c28781461010757806323d9ac9b1461012f575b5f5ffd5b6101056004803603810190610100919061103d565b61033d565b005b348015610112575f5ffd5b5061012d600480360381019061012891906110f5565b6103d0565b005b34801561013a575f5ffd5b50610143610464565b6040516101509190611153565b60405180910390f35b348015610164575f5ffd5b5061017f600480360381019061017a91906111c2565b610488565b60405161018d9291906112ad565b60405180910390f35b3480156101a1575f5ffd5b506101bc60048036038101906101b79190611316565b6104aa565b6040516101c99190611391565b60405180910390f35b3480156101dd575f5ffd5b506101e6610586565b005b3480156101f3575f5ffd5b5061020e6004803603810190610209919061142e565b610599565b005b34801561021b575f5ffd5b506102246105b5565b6040516102319190611153565b60405180910390f35b348015610245575f5ffd5b50610260600480360381019061025b91906114b2565b6105dc565b6040516102709493929190611546565b60405180910390f35b348015610284575f5ffd5b5061028d610634565b60405161029a91906115df565b60405180910390f35b3480156102ae575f5ffd5b506102b7610658565b005b3480156102c4575f5ffd5b506102df60048036038101906102da91906115f8565b6106dd565b005b3480156102ec575f5ffd5b506102f561076e565b6040516103029190611623565b60405180910390f35b61031361080c565b005b348015610320575f5ffd5b5061033b60048036038101906103369190611666565b610896565b005b61034561091a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b815260040161039f91906116a0565b5f604051808303818588803b1580156103b6575f5ffd5b505af11580156103c8573d5f5f3e3d5ffd5b505050505050565b6103d861091a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016104339291906116c8565b5f604051808303815f87803b15801561044a575f5ffd5b505af115801561045c573d5f5f3e3d5ffd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60605f6104936109a1565b61049e858585610a31565b91509150935093915050565b5f5f6104b585610bb8565b90508085602001358680604001906104cd91906116fb565b6040516104db92919061178b565b60405180910390208780606001906104f391906116fb565b60405161050192919061178b565b60405180910390208860800135898060e0019061051e91906116fb565b601490603492610530939291906117ab565b9061053b91906117fb565b5f1c8a60a001358b60c0013546308d8d6040516020016105669c9b9a99989796959493929190611859565b604051602081830303815290604052805190602001209150509392505050565b61058e61091a565b6105975f610bc7565b565b6105a16109a1565b6105ae8585858585610c88565b5050505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f365f858560349080926105f3939291906117ab565b8101906106009190611911565b8094508195505050858560406034610618919061197c565b908092610627939291906117ab565b9150915092959194509250565b7f000000000000000000000000000000000000000000000000000000000000000081565b61066061091a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156106c5575f5ffd5b505af11580156106d7573d5f5f3e3d5ffd5b50505050565b6106e561091a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b815260040161073e91906119af565b5f604051808303815f87803b158015610755575f5ffd5b505af1158015610767573d5f5f3e3d5ffd5b5050505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107c89190611153565b602060405180830381865afa1580156107e3573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080791906119dc565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b81526004016108669190611153565b5f604051808303818588803b15801561087d575f5ffd5b505af115801561088f573d5f5f3e3d5ffd5b5050505050565b61089e61091a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361090e575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016109059190611153565b60405180910390fd5b61091781610bc7565b50565b610922610cc3565b73ffffffffffffffffffffffffffffffffffffffff166109406105b5565b73ffffffffffffffffffffffffffffffffffffffff161461099f57610963610cc3565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016109969190611153565b60405180910390fd5b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2690611a61565b60405180910390fd5b565b60605f5f5f365f610a50898060e00190610a4b91906116fb565b6105dc565b93509350935093506040828290501480610a6d5750604182829050145b610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa390611aef565b60405180910390fd5b5f610ac0610abb8b87876104aa565b610cca565b9050610b0f8184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050610cfd565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610b8b57610b6d60018686610d27565b60405180602001604052805f81525090965096505050505050610bb0565b610b965f8686610d27565b60405180602001604052805f815250909650965050505050505b935093915050565b5f5f8235905080915050919050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90611b57565b60405180910390fd5b5f33905090565b5f7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f5281601c52603c5f209050919050565b5f5f5f5f610d0b8686610d5e565b925092509250610d1b8282610db3565b82935050505092915050565b5f60d08265ffffffffffff16901b60a08465ffffffffffff16901b85610d4d575f610d50565b60015b60ff16171790509392505050565b5f5f5f6041845103610d9e575f5f5f602087015192506040870151915060608701515f1a9050610d9088828585610f15565b955095509550505050610dac565b5f600285515f1b9250925092505b9250925092565b5f6003811115610dc657610dc5611b75565b5b826003811115610dd957610dd8611b75565b5b0315610f115760016003811115610df357610df2611b75565b5b826003811115610e0657610e05611b75565b5b03610e3d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115610e5157610e50611b75565b5b826003811115610e6457610e63611b75565b5b03610ea857805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401610e9f9190611623565b60405180910390fd5b600380811115610ebb57610eba611b75565b5b826003811115610ece57610ecd611b75565b5b03610f1057806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401610f079190611391565b60405180910390fd5b5b5050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115610f51575f600385925092509250610ff2565b5f6001888888886040515f8152602001604052604051610f749493929190611bbd565b6020604051602081039080840390855afa158015610f94573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fe5575f60015f5f1b93509350935050610ff2565b805f5f5f1b935093509350505b9450945094915050565b5f5ffd5b5f5ffd5b5f63ffffffff82169050919050565b61101c81611004565b8114611026575f5ffd5b50565b5f8135905061103781611013565b92915050565b5f6020828403121561105257611051610ffc565b5b5f61105f84828501611029565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61109182611068565b9050919050565b6110a181611087565b81146110ab575f5ffd5b50565b5f813590506110bc81611098565b92915050565b5f819050919050565b6110d4816110c2565b81146110de575f5ffd5b50565b5f813590506110ef816110cb565b92915050565b5f5f6040838503121561110b5761110a610ffc565b5b5f611118858286016110ae565b9250506020611129858286016110e1565b9150509250929050565b5f61113d82611068565b9050919050565b61114d81611133565b82525050565b5f6020820190506111665f830184611144565b92915050565b5f5ffd5b5f61012082840312156111865761118561116c565b5b81905092915050565b5f819050919050565b6111a18161118f565b81146111ab575f5ffd5b50565b5f813590506111bc81611198565b92915050565b5f5f5f606084860312156111d9576111d8610ffc565b5b5f84013567ffffffffffffffff8111156111f6576111f5611000565b5b61120286828701611170565b9350506020611213868287016111ae565b9250506040611224868287016110e1565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6112708261122e565b61127a8185611238565b935061128a818560208601611248565b61129381611256565b840191505092915050565b6112a7816110c2565b82525050565b5f6040820190508181035f8301526112c58185611266565b90506112d4602083018461129e565b9392505050565b5f65ffffffffffff82169050919050565b6112f5816112db565b81146112ff575f5ffd5b50565b5f81359050611310816112ec565b92915050565b5f5f5f6060848603121561132d5761132c610ffc565b5b5f84013567ffffffffffffffff81111561134a57611349611000565b5b61135686828701611170565b935050602061136786828701611302565b925050604061137886828701611302565b9150509250925092565b61138b8161118f565b82525050565b5f6020820190506113a45f830184611382565b92915050565b600381106113b6575f5ffd5b50565b5f813590506113c7816113aa565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f8401126113ee576113ed6113cd565b5b8235905067ffffffffffffffff81111561140b5761140a6113d1565b5b602083019150836001820283011115611427576114266113d5565b5b9250929050565b5f5f5f5f5f6080868803121561144757611446610ffc565b5b5f611454888289016113b9565b955050602086013567ffffffffffffffff81111561147557611474611000565b5b611481888289016113d9565b94509450506040611494888289016110e1565b92505060606114a5888289016110e1565b9150509295509295909350565b5f5f602083850312156114c8576114c7610ffc565b5b5f83013567ffffffffffffffff8111156114e5576114e4611000565b5b6114f1858286016113d9565b92509250509250929050565b611506816112db565b82525050565b828183375f83830152505050565b5f6115258385611238565b935061153283858461150c565b61153b83611256565b840190509392505050565b5f6060820190506115595f8301876114fd565b61156660208301866114fd565b818103604083015261157981848661151a565b905095945050505050565b5f819050919050565b5f6115a76115a261159d84611068565b611584565b611068565b9050919050565b5f6115b88261158d565b9050919050565b5f6115c9826115ae565b9050919050565b6115d9816115bf565b82525050565b5f6020820190506115f25f8301846115d0565b92915050565b5f6020828403121561160d5761160c610ffc565b5b5f61161a848285016110ae565b91505092915050565b5f6020820190506116365f83018461129e565b92915050565b61164581611133565b811461164f575f5ffd5b50565b5f813590506116608161163c565b92915050565b5f6020828403121561167b5761167a610ffc565b5b5f61168884828501611652565b91505092915050565b61169a81611004565b82525050565b5f6020820190506116b35f830184611691565b92915050565b6116c281611087565b82525050565b5f6040820190506116db5f8301856116b9565b6116e8602083018461129e565b9392505050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83356001602003843603038112611717576117166116ef565b5b80840192508235915067ffffffffffffffff821115611739576117386116f3565b5b602083019250600182023603831315611755576117546116f7565b5b509250929050565b5f81905092915050565b5f611772838561175d565b935061177f83858461150c565b82840190509392505050565b5f611797828486611767565b91508190509392505050565b5f5ffd5b5f5ffd5b5f5f858511156117be576117bd6117a3565b5b838611156117cf576117ce6117a7565b5b6001850283019150848603905094509492505050565b5f82905092915050565b5f82821b905092915050565b5f61180683836117e5565b82611811813561118f565b925060208210156118515761184c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026117ef565b831692505b505092915050565b5f6101808201905061186d5f83018f611144565b61187a602083018e61129e565b611887604083018d611382565b611894606083018c611382565b6118a1608083018b611382565b6118ae60a083018a61129e565b6118bb60c083018961129e565b6118c860e0830188611382565b6118d661010083018761129e565b6118e4610120830186611144565b6118f26101408301856114fd565b6119006101608301846114fd565b9d9c50505050505050505050505050565b5f5f6040838503121561192757611926610ffc565b5b5f61193485828601611302565b925050602061194585828601611302565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611986826110c2565b9150611991836110c2565b92508282019050808211156119a9576119a861194f565b5b92915050565b5f6020820190506119c25f8301846116b9565b92915050565b5f815190506119d6816110cb565b92915050565b5f602082840312156119f1576119f0610ffc565b5b5f6119fe848285016119c8565b91505092915050565b5f82825260208201905092915050565b7f53656e646572206e6f7420456e747279506f696e7400000000000000000000005f82015250565b5f611a4b601583611a07565b9150611a5682611a17565b602082019050919050565b5f6020820190508181035f830152611a7881611a3f565b9050919050565b7f566572696679696e675061796d61737465723a20696e76616c6964207369676e5f8201527f6174757265206c656e67746820696e207061796d6173746572416e6444617461602082015250565b5f611ad9604083611a07565b9150611ae482611a7f565b604082019050919050565b5f6020820190508181035f830152611b0681611acd565b9050919050565b7f6d757374206f76657272696465000000000000000000000000000000000000005f82015250565b5f611b41600d83611a07565b9150611b4c82611b0d565b602082019050919050565b5f6020820190508181035f830152611b6e81611b35565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff82169050919050565b611bb781611ba2565b82525050565b5f608082019050611bd05f830187611382565b611bdd6020830186611bae565b611bea6040830185611382565b611bf76060830184611382565b9594505050505056fea26469706673582212207b8af18372e1007381496879d2ac69c1d7147b555350540469fa0624d4f7fbcb64736f6c634300081c0033",
+ "sourceMap": "259:196:77:-:0;;;319:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;422:10;434:15;1307:11:9;950:10:0;1297:1:24;1273:26;;:12;:26;;;1269:95;;1350:1;1322:31;;;;;;;;;;;:::i;:::-;;;;;;;;1269:95;1373:32;1392:12;1373:18;;;:32;;:::i;:::-;1225:187;972:41:0::1;1001:11;972:28;;;:41;;:::i;:::-;1036:11;1023:24;;;;;;;;::::0;::::1;905:149:::0;1348:16:9::1;1330:34;;;;;;;;::::0;::::1;1230:141:::0;;319:134:77;;259:196;;2912:187:24;2985:16;3004:6;;;;;;;;;;;2985:25;;3029:8;3020:6;;:17;;;;;;;;;;;;;;;;;;3083:8;3052:40;;3073:8;3052:40;;;;;;;;;;;;2975:124;2912:187;:::o;1173:218:0:-;1287:11;1271:47;;;1319:29;1271:78;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1263:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;1173:218;:::o;88:117:87:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:116::-;625:7;654:24;672:5;654:24;:::i;:::-;643:35;;568:116;;;:::o;690:162::-;783:44;821:5;783:44;:::i;:::-;776:5;773:55;763:83;;842:1;839;832:12;763:83;690:162;:::o;858:183::-;935:5;966:6;960:13;951:22;;982:53;1029:5;982:53;:::i;:::-;858:183;;;;:::o;1047:122::-;1120:24;1138:5;1120:24;:::i;:::-;1113:5;1110:35;1100:63;;1159:1;1156;1149:12;1100:63;1047:122;:::o;1175:143::-;1232:5;1263:6;1257:13;1248:22;;1279:33;1306:5;1279:33;:::i;:::-;1175:143;;;;:::o;1324:547::-;1423:6;1431;1480:2;1468:9;1459:7;1455:23;1451:32;1448:119;;;1486:79;;:::i;:::-;1448:119;1606:1;1631:84;1707:7;1698:6;1687:9;1683:22;1631:84;:::i;:::-;1621:94;;1577:148;1764:2;1790:64;1846:7;1837:6;1826:9;1822:22;1790:64;:::i;:::-;1780:74;;1735:129;1324:547;;;;;:::o;1877:118::-;1964:24;1982:5;1964:24;:::i;:::-;1959:3;1952:37;1877:118;;:::o;2001:222::-;2094:4;2132:2;2121:9;2117:18;2109:26;;2145:71;2213:1;2202:9;2198:17;2189:6;2145:71;:::i;:::-;2001:222;;;;:::o;2229:149::-;2265:7;2305:66;2298:5;2294:78;2283:89;;2229:149;;;:::o;2384:115::-;2469:23;2486:5;2469:23;:::i;:::-;2464:3;2457:36;2384:115;;:::o;2505:218::-;2596:4;2634:2;2623:9;2619:18;2611:26;;2647:69;2713:1;2702:9;2698:17;2689:6;2647:69;:::i;:::-;2505:218;;;;:::o;2729:90::-;2763:7;2806:5;2799:13;2792:21;2781:32;;2729:90;;;:::o;2825:116::-;2895:21;2910:5;2895:21;:::i;:::-;2888:5;2885:32;2875:60;;2931:1;2928;2921:12;2875:60;2825:116;:::o;2947:137::-;3001:5;3032:6;3026:13;3017:22;;3048:30;3072:5;3048:30;:::i;:::-;2947:137;;;;:::o;3090:345::-;3157:6;3206:2;3194:9;3185:7;3181:23;3177:32;3174:119;;;3212:79;;:::i;:::-;3174:119;3332:1;3357:61;3410:7;3401:6;3390:9;3386:22;3357:61;:::i;:::-;3347:71;;3303:125;3090:345;;;;:::o;3441:169::-;3525:11;3559:6;3554:3;3547:19;3599:4;3594:3;3590:14;3575:29;;3441:169;;;;:::o;3616:180::-;3756:32;3752:1;3744:6;3740:14;3733:56;3616:180;:::o;3802:366::-;3944:3;3965:67;4029:2;4024:3;3965:67;:::i;:::-;3958:74;;4041:93;4130:3;4041:93;:::i;:::-;4159:2;4154:3;4150:12;4143:19;;3802:366;;;:::o;4174:419::-;4340:4;4378:2;4367:9;4363:18;4355:26;;4427:9;4421:4;4417:20;4413:1;4402:9;4398:17;4391:47;4455:131;4581:4;4455:131;:::i;:::-;4447:139;;4174:419;;;:::o;259:196:77:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const EnsAvatarTokenUri = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "ownerOf",
+ "inputs": [
+ {
+ "name": "tokenId",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "tokenURI",
+ "inputs": [
+ {
+ "name": "tokenId",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "string",
+ "internalType": "string"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b50610d078061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c80636352211e14610038578063c87b56dd14610068575b5f5ffd5b610052600480360381019061004d9190610431565b610098565b60405161005f919061049b565b60405180910390f35b610082600480360381019061007d9190610431565b6100b5565b60405161008f9190610524565b60405180910390f35b5f73d8da6bf26964af9d7eed9e03e53415d37aa960459050919050565b60605f82036100d45760405180602001604052805f81525090506103f5565b606482036100ff57604051806101400160405280610119815260200161082e610119913990506103f5565b6065820361012757604051806080016040528060558152602001610c436055913990506103f5565b606682036101525760405180610160016040528061013981526020016106f5610139913990506103f5565b6067820361017a576040518060a00160405280606d8152602001610a79606d913990506103f5565b606882036101a2576040518060a00160405280606181526020016105686061913990506103f5565b606982036101ca576040518060c00160405280608981526020016109c06089913990506103f5565b606a82036101f2576040518060a00160405280607981526020016109476079913990506103f5565b606b820361021a576040518060600160405280604081526020016105c96040913990506103f5565b606c8203610242576040518060e0016040528060b78152602001610b8c60b7913990506103f5565b60c8820361026a576040518060e0016040528060a68152602001610ae660a6913990506103f5565b60c982036102af576040518060400160405280601381526020017f68747470733a2f2f6578616d706c652e636f6d0000000000000000000000000081525090506103f5565b60ca82036102d7576040518060e0016040528060be815260200161060960be913990506103f5565b60cb82036102ff576040518060600160405280602381526020016105456023913990506103f5565b60cc8203610344576040518060400160405280601b81526020017f646174613a696d6167652f7376672b786d6c3b757466382c6c656c000000000081525090506103f5565b60cd820361036c576040518060600160405280603a8152602001610c98603a913990506103f5565b60ce8203610394576040518060600160405280602e81526020016106c7602e913990506103f5565b60cf82036103d9576040518060400160405280600381526020017f776174000000000000000000000000000000000000000000000000000000000081525090506103f5565b604051806060016040528060308152602001610a496030913990505b919050565b5f5ffd5b5f819050919050565b610410816103fe565b811461041a575f5ffd5b50565b5f8135905061042b81610407565b92915050565b5f60208284031215610446576104456103fa565b5b5f6104538482850161041d565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6104858261045c565b9050919050565b6104958161047b565b82525050565b5f6020820190506104ae5f83018461048c565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6104f6826104b4565b61050081856104be565b93506105108185602086016104ce565b610519816104dc565b840191505092915050565b5f6020820190508181035f83015261053c81846104ec565b90509291505056fe646174613a696d6167652f7376672b786d6c3b757466382c3c7376673e3c2f7376673e646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65776f6749434167496d6c745957646c583356796243493649434a6b595852684f6d6c745957646c4c334e325a797434625777376458526d4f4378735a577769436e303d646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65776f6749434167496d6c745957646c583356796243493649434a3359585169436e30646174613a696d6167652f7376672b786d6c3b6261736536342c50484e325a79423261575633516d393450534977494441674d6a4177494449774d43496764326c6b64476739496a45774d4355694947686c6157646f644430694d5441774a53492b4369416749434138636d566a6443423361575230614430694d5441774a534967614756705a326830505349784d44416c4969426d6157787350534a795a32496f4d4377674d4377674d436b374969382b436a777663335a6e50673d3d516d61386d6e70367856334a3263524e66336d5474683543386e56313143416e636556696e633379386a5362696f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65776f6749434167496d6c745957646c583356796243493649434a6b595852684f6d6c745957646c4c334e325a79743462577737596d467a5a5459304c464249546a4a6165554979595664574d3146744f54525155306c33535552425a3031715158644a52456c3354554e4a5a3251796247746b52326335535770466430314456576c4a523268735956646b623252454d476c4e56454633536c4e4a4b304e705157644a5130453459323157616d5244516a4e685631497759555177615531555158644b55306c6e5955645763466f796144425155306c345455524262456c70516d31685633687a55464e4b65566f795357394e5133646e54554e335a303144617a644a6154677251327033646d4d7a576d35515a7a303949677039646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65776f6749434167496d6c745957646c583356796243493649434a6f64485277637a6f764c326c745957646c637a497562576c756458526c6257566b6157466a5a473475593239744c326c745957646c4c335677624739685a43396a58325a7062477773643138784e4451774c474679587a45324f6a6b735a6c3968645852764c484666595856306279786e58324631644738766332686863475576593239325a58497663334276636e51764e6a49304e54557463326876645851745a6d466a64473979655445744f445935596a6330596a59304e3249344f4441304e574e6859574d354e5459354e545a695a44466d5a6a6775616e426e49677039646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65776f6749434167496d6c745957646c583356796243493649434a5262574534625735774e6e68574d306f7959314a4f5a6a4e745648526f4e554d34626c59784d554e42626d4e6c566d6c75597a4e354f477054596d6c7649677039646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65776f6749434167496d6c745957646c583356796243493649434a7063475a7a4f6938766158426d6379395262574534625735774e6e68574d306f7959314a4f5a6a4e745648526f4e554d34626c59784d554e42626d4e6c566d6c75597a4e354f477054596d6c764967703968747470733a2f2f626f7265646170657961636874636c75622e636f6d2f6170692f6d7574616e74732f30787b69647d646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65776f6749434167496d6c745957646c583356796243493649434a6b595852684f6d6c745957646c4c334e325a797434625777376458526d4f43773863335a6e506a777663335a6e5069494b66513d3d68747470733a2f2f696d61676573322e6d696e7574656d6564696163646e2e636f6d2f696d6167652f75706c6f61642f635f66696c6c2c775f313434302c61725f31363a392c665f6175746f2c715f6175746f2c675f6175746f2f73686170652f636f7665722f73706f72742f36323435352d73686f75742d666163746f7279312d38363962373462363437623838303435636161633935363935366264316666382e6a70677b22696d6167655f75726c223a202268747470733a2f2f696d61676573322e6d696e7574656d6564696163646e2e636f6d2f696d6167652f75706c6f61642f635f66696c6c2c775f313434302c61725f31363a392c665f6175746f2c715f6175746f2c675f6175746f2f73686170652f636f7665722f73706f72742f36323435352d73686f75742d666163746f7279312d38363962373462363437623838303435636161633935363935366264316666382e6a7067227d646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65776f6749434167496d6c745957646c583356796243493649434a6f64485277637a6f764c32563459573177624755755932397449677039697066733a2f2f697066732f516d61386d6e70367856334a3263524e66336d5474683543386e56313143416e636556696e633379386a5362696fa2646970667358221220b9a229d95a6e0756766b7f14824b1ca742fedd74b7ab768ffa0d8e22a9e1f2b464736f6c634300081c0033",
+ "sourceMap": "64:3561:81:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const Simple7702Account = {
+ "abi": [
+ {
+ "type": "fallback",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "receive",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "entryPoint",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract IEntryPoint"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "executeBatch",
+ "inputs": [
+ {
+ "name": "calls",
+ "type": "tuple[]",
+ "internalType": "struct BaseAccount.Call[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "getNonce",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "isValidSignature",
+ "inputs": [
+ {
+ "name": "hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "magicValue",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "onERC1155BatchReceived",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ },
+ {
+ "name": "",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ },
+ {
+ "name": "",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "onERC1155Received",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "onERC721Received",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "supportsInterface",
+ "inputs": [
+ {
+ "name": "id",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "validateUserOp",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "missingAccountFunds",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "validationData",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignature",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignatureLength",
+ "inputs": [
+ {
+ "name": "length",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignatureS",
+ "inputs": [
+ {
+ "name": "s",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ExecuteError",
+ "inputs": [
+ {
+ "name": "index",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "error",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b506119d68061001c5f395ff3fe608060405260043610610094575f3560e01c8063b0d691fe11610058578063b0d691fe146101af578063b61d27f6146101d9578063bc197c8114610201578063d087d2881461023d578063f23a6e611461026757610095565b806301ffc9a714610097578063150b7a02146100d35780631626ba7e1461010f57806319822f7c1461014b57806334fcd5be1461018757610095565b5b005b3480156100a2575f5ffd5b506100bd60048036038101906100b89190610d6d565b6102a3565b6040516100ca9190610db2565b60405180910390f35b3480156100de575f5ffd5b506100f960048036038101906100f49190610f94565b6104ac565b6040516101069190611023565b60405180910390f35b34801561011a575f5ffd5b506101356004803603810190610130919061106f565b6104bf565b6040516101429190611023565b60405180910390f35b348015610156575f5ffd5b50610171600480360381019061016c91906110ec565b6104ec565b60405161017e9190611167565b60405180910390f35b348015610192575f5ffd5b506101ad60048036038101906101a891906111dd565b61051e565b005b3480156101ba575f5ffd5b506101c361064e565b6040516101d09190611283565b60405180910390f35b3480156101e4575f5ffd5b506101ff60048036038101906101fa91906112f1565b610669565b005b34801561020c575f5ffd5b5061022760048036038101906102229190611422565b6106d8565b6040516102349190611023565b60405180910390f35b348015610248575f5ffd5b506102516106ec565b60405161025e9190611167565b60405180910390f35b348015610272575f5ffd5b5061028d600480360381019061028891906114ed565b610773565b60405161029a9190611023565b60405180910390f35b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061036d57507f19822f7c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103d557507f1626ba7e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061043d57507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104a557507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b5f63150b7a0260e01b9050949350505050565b5f6104ca8383610787565b6104db5763ffffffff60e01b6104e4565b631626ba7e60e01b5b905092915050565b5f6104f56107c8565b6104ff848461083f565b905061050e84602001356108b1565b610517826108b4565b9392505050565b610526610928565b5f8282905090505f5f90505b81811015610648573684848381811061054e5761054d611580565b5b905060200281019061056091906115b9565b90505f6105d5825f01602081019061057891906115e0565b836020013584806040019061058d919061160b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050505a6109d5565b90508061063957600184036105f1576105ec6109ec565b610638565b826105fb5f6109ff565b6040517f5a15467500000000000000000000000000000000000000000000000000000000815260040161062f9291906116cd565b60405180910390fd5b5b50508080600101915050610532565b50505050565b5f734337084d9e255ff0702461cf8895ce9e3b5ff108905090565b610671610928565b5f6106c1858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050505a6109d5565b9050806106d1576106d06109ec565b5b5050505050565b5f63bc197c8160e01b905095945050505050565b5f6106f561064e565b73ffffffffffffffffffffffffffffffffffffffff166335567e1a305f6040518363ffffffff1660e01b815260040161072f929190611766565b602060405180830381865afa15801561074a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061076e91906117a1565b905090565b5f63f23a6e6160e01b905095945050505050565b5f3073ffffffffffffffffffffffffffffffffffffffff166107a98484610a37565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6107d061064e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490611826565b60405180910390fd5b565b5f61089c8284806101000190610855919061160b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050610787565b6108a75760016108a9565b5f5b905092915050565b50565b5f8114610925575f3373ffffffffffffffffffffffffffffffffffffffff16826040516108e090611871565b5f6040518083038185875af1925050503d805f811461091a576040519150601f19603f3d011682016040523d82523d5f602084013e61091f565b606091505b50509050505b50565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610994575061096561064e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ca906118cf565b60405180910390fd5b565b5f5f5f845160208601878987f19050949350505050565b6109fd6109f85f6109ff565b610a61565b565b60603d5f831115610a175782811115610a16578290505b5b604051602082018101604052818152815f602083013e8092505050919050565b5f5f5f5f610a458686610a69565b925092509250610a558282610abe565b82935050505092915050565b805160208201fd5b5f5f5f6041845103610aa9575f5f5f602087015192506040870151915060608701515f1a9050610a9b88828585610c20565b955095509550505050610ab7565b5f600285515f1b9250925092505b9250925092565b5f6003811115610ad157610ad06118ed565b5b826003811115610ae457610ae36118ed565b5b0315610c1c5760016003811115610afe57610afd6118ed565b5b826003811115610b1157610b106118ed565b5b03610b48576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115610b5c57610b5b6118ed565b5b826003811115610b6f57610b6e6118ed565b5b03610bb357805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401610baa9190611167565b60405180910390fd5b600380811115610bc657610bc56118ed565b5b826003811115610bd957610bd86118ed565b5b03610c1b57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401610c129190611929565b60405180910390fd5b5b5050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115610c5c575f600385925092509250610cfd565b5f6001888888886040515f8152602001604052604051610c7f949392919061195d565b6020604051602081039080840390855afa158015610c9f573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cf0575f60015f5f1b93509350935050610cfd565b805f5f5f1b935093509350505b9450945094915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610d4c81610d18565b8114610d56575f5ffd5b50565b5f81359050610d6781610d43565b92915050565b5f60208284031215610d8257610d81610d10565b5b5f610d8f84828501610d59565b91505092915050565b5f8115159050919050565b610dac81610d98565b82525050565b5f602082019050610dc55f830184610da3565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610df482610dcb565b9050919050565b610e0481610dea565b8114610e0e575f5ffd5b50565b5f81359050610e1f81610dfb565b92915050565b5f819050919050565b610e3781610e25565b8114610e41575f5ffd5b50565b5f81359050610e5281610e2e565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610ea682610e60565b810181811067ffffffffffffffff82111715610ec557610ec4610e70565b5b80604052505050565b5f610ed7610d07565b9050610ee38282610e9d565b919050565b5f67ffffffffffffffff821115610f0257610f01610e70565b5b610f0b82610e60565b9050602081019050919050565b828183375f83830152505050565b5f610f38610f3384610ee8565b610ece565b905082815260208101848484011115610f5457610f53610e5c565b5b610f5f848285610f18565b509392505050565b5f82601f830112610f7b57610f7a610e58565b5b8135610f8b848260208601610f26565b91505092915050565b5f5f5f5f60808587031215610fac57610fab610d10565b5b5f610fb987828801610e11565b9450506020610fca87828801610e11565b9350506040610fdb87828801610e44565b925050606085013567ffffffffffffffff811115610ffc57610ffb610d14565b5b61100887828801610f67565b91505092959194509250565b61101d81610d18565b82525050565b5f6020820190506110365f830184611014565b92915050565b5f819050919050565b61104e8161103c565b8114611058575f5ffd5b50565b5f8135905061106981611045565b92915050565b5f5f6040838503121561108557611084610d10565b5b5f6110928582860161105b565b925050602083013567ffffffffffffffff8111156110b3576110b2610d14565b5b6110bf85828601610f67565b9150509250929050565b5f5ffd5b5f61012082840312156110e3576110e26110c9565b5b81905092915050565b5f5f5f6060848603121561110357611102610d10565b5b5f84013567ffffffffffffffff8111156111205761111f610d14565b5b61112c868287016110cd565b935050602061113d8682870161105b565b925050604061114e86828701610e44565b9150509250925092565b61116181610e25565b82525050565b5f60208201905061117a5f830184611158565b92915050565b5f5ffd5b5f5ffd5b5f5f83601f84011261119d5761119c610e58565b5b8235905067ffffffffffffffff8111156111ba576111b9611180565b5b6020830191508360208202830111156111d6576111d5611184565b5b9250929050565b5f5f602083850312156111f3576111f2610d10565b5b5f83013567ffffffffffffffff8111156112105761120f610d14565b5b61121c85828601611188565b92509250509250929050565b5f819050919050565b5f61124b61124661124184610dcb565b611228565b610dcb565b9050919050565b5f61125c82611231565b9050919050565b5f61126d82611252565b9050919050565b61127d81611263565b82525050565b5f6020820190506112965f830184611274565b92915050565b5f5f83601f8401126112b1576112b0610e58565b5b8235905067ffffffffffffffff8111156112ce576112cd611180565b5b6020830191508360018202830111156112ea576112e9611184565b5b9250929050565b5f5f5f5f6060858703121561130957611308610d10565b5b5f61131687828801610e11565b945050602061132787828801610e44565b935050604085013567ffffffffffffffff81111561134857611347610d14565b5b6113548782880161129c565b925092505092959194509250565b5f67ffffffffffffffff82111561137c5761137b610e70565b5b602082029050602081019050919050565b5f61139f61139a84611362565b610ece565b905080838252602082019050602084028301858111156113c2576113c1611184565b5b835b818110156113eb57806113d78882610e44565b8452602084019350506020810190506113c4565b5050509392505050565b5f82601f83011261140957611408610e58565b5b813561141984826020860161138d565b91505092915050565b5f5f5f5f5f60a0868803121561143b5761143a610d10565b5b5f61144888828901610e11565b955050602061145988828901610e11565b945050604086013567ffffffffffffffff81111561147a57611479610d14565b5b611486888289016113f5565b935050606086013567ffffffffffffffff8111156114a7576114a6610d14565b5b6114b3888289016113f5565b925050608086013567ffffffffffffffff8111156114d4576114d3610d14565b5b6114e088828901610f67565b9150509295509295909350565b5f5f5f5f5f60a0868803121561150657611505610d10565b5b5f61151388828901610e11565b955050602061152488828901610e11565b945050604061153588828901610e44565b935050606061154688828901610e44565b925050608086013567ffffffffffffffff81111561156757611566610d14565b5b61157388828901610f67565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f823560016060038336030381126115d4576115d36115ad565b5b80830191505092915050565b5f602082840312156115f5576115f4610d10565b5b5f61160284828501610e11565b91505092915050565b5f5f83356001602003843603038112611627576116266115ad565b5b80840192508235915067ffffffffffffffff821115611649576116486115b1565b5b602083019250600182023603831315611665576116646115b5565b5b509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61169f8261166d565b6116a98185611677565b93506116b9818560208601611687565b6116c281610e60565b840191505092915050565b5f6040820190506116e05f830185611158565b81810360208301526116f28184611695565b90509392505050565b61170481610dea565b82525050565b5f819050919050565b5f77ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61175061174b6117468461170a565b611228565b611713565b9050919050565b61176081611736565b82525050565b5f6040820190506117795f8301856116fb565b6117866020830184611757565b9392505050565b5f8151905061179b81610e2e565b92915050565b5f602082840312156117b6576117b5610d10565b5b5f6117c38482850161178d565b91505092915050565b5f82825260208201905092915050565b7f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000005f82015250565b5f611810601c836117cc565b915061181b826117dc565b602082019050919050565b5f6020820190508181035f83015261183d81611804565b9050919050565b5f81905092915050565b50565b5f61185c5f83611844565b91506118678261184e565b5f82019050919050565b5f61187b82611851565b9150819050919050565b7f6e6f742066726f6d2073656c66206f7220456e747279506f696e7400000000005f82015250565b5f6118b9601b836117cc565b91506118c482611885565b602082019050919050565b5f6020820190508181035f8301526118e6816118ad565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6119238161103c565b82525050565b5f60208201905061193c5f83018461191a565b92915050565b5f60ff82169050919050565b61195781611942565b82525050565b5f6080820190506119705f83018761191a565b61197d602083018661194e565b61198a604083018561191a565b611997606083018461191a565b9594505050505056fea2646970667358221220ad6a80ee4cee66abde1e11ff92bafd380ec869013caf91aa8be2689fb1e7c37264736f6c634300081c0033",
+ "sourceMap": "580:1875:10:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const IERC721Receiver = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "onERC721Received",
+ "inputs": [
+ {
+ "name": "operator",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "from",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "tokenId",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const Event = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "event",
+ "name": "MessageEmitted",
+ "inputs": [
+ {
+ "name": "to",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b506101578061001c5f395ff3fe60806040526004361061001d575f3560e01c80636146195414610021575b5f5ffd5b61002961002b565b005b3373ffffffffffffffffffffffffffffffffffffffff167f7b2cff6dbed2a9cdb935eb6c46afadba8c4436a7aef48222ff62fce1ece4fcf3345f36604051610075939291906100f1565b60405180910390a2565b5f819050919050565b6100918161007f565b82525050565b5f82825260208201905092915050565b828183375f83830152505050565b5f601f19601f8301169050919050565b5f6100d08385610097565b93506100dd8385846100a7565b6100e6836100b5565b840190509392505050565b5f6040820190506101045f830186610088565b81810360208301526101178184866100c5565b905094935050505056fea2646970667358221220b386009fabcc82f299294cbcfa3f212c30763da3168af7a9b4fc5548cf3bd4e964736f6c634300081c0033",
+ "sourceMap": "64:202:83:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const ERC7821Example = {
+ "abi": [
+ {
+ "type": "fallback",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "receive",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [
+ {
+ "name": "mode",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "executionData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "supportsExecutionMode",
+ "inputs": [
+ {
+ "name": "mode",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "event",
+ "name": "OpData",
+ "inputs": [
+ {
+ "name": "opData",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "BatchOfBatchesDecodingError",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "FnSelectorNotRecognized",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "UnsupportedExecutionMode",
+ "inputs": []
+ }
+ ],
+ "bytecode": {
+ "object": "0x6080604052348015600e575f5ffd5b506105e78061001c5f395ff3fe60806040526004361061002c575f3560e01c8063d03c79141461008a578063e9ae5c53146100c657610033565b3661003357005b61003b6100e2565b6100436100e4565b15610075575f3560e01c63bc197c81811463f23a6e6182141763150b7a028214171561007357806020526020603cf35b505b61007d6100ec565b633c10b94e5f526004601cfd5b348015610095575f5ffd5b506100b060048036038101906100ab9190610419565b6100ee565b6040516100bd919061045e565b60405180910390f35b6100e060048036038101906100db91906104d8565b610102565b005b565b5f6001905090565b565b5f5f6100f98361018b565b14159050919050565b5f61010c8461018b565b905060038103610127576101218484846101dc565b50610186565b365f365f8461013d57637f1812755f526004601cfd5b5f905086358701602081019450803593508735604011600287141115610170578760200135880160208101935080359250505b506101808888888787878761029e565b50505050505b505050565b5f69ffff00000000ffffffff8260086016021c16690100000000000000000081149150816901000000000078210001821460011b179150816901000000000078210002821460030217915050919050565b7603000000000000000000000000000000000000000000005f1b831892505f5f5f5f5f5f9250925092508435808601803594508060200193508587019250828560051b85011160208710178260401c171561023e57633995943b5f526004601cfd5b50505f5b83811461029557365f8260051b8501358086016020810193508035925085838501118260401c171561027b57633995943b5f526004601cfd5b5050610288898383610102565b5050806001019050610242565b50505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102d5575f5ffd5b5f82829050111561031a577f1fa020930a7dd40507126756f1f4f35de2b38ae31ca040883d321c7a79b80437828260405161031192919061058f565b60405180910390a15b61032784845f5f1b610330565b50505050505050565b5f5f8484905003610341575061037c565b5b5f5f365f610351888887610381565b9350935093509350610366848484848a6103bb565b5050505083839050816001019150810361034257505b505050565b5f5f365f8460051b870135870180358135153002179450602081013593506040810135810160208101935080359250505093509350935093565b604051828482375f388483888a5af16103d6573d5f823e3d81fd5b505050505050565b5f5ffd5b5f5ffd5b5f819050919050565b6103f8816103e6565b8114610402575f5ffd5b50565b5f81359050610413816103ef565b92915050565b5f6020828403121561042e5761042d6103de565b5b5f61043b84828501610405565b91505092915050565b5f8115159050919050565b61045881610444565b82525050565b5f6020820190506104715f83018461044f565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261049857610497610477565b5b8235905067ffffffffffffffff8111156104b5576104b461047b565b5b6020830191508360018202830111156104d1576104d061047f565b5b9250929050565b5f5f5f604084860312156104ef576104ee6103de565b5b5f6104fc86828701610405565b935050602084013567ffffffffffffffff81111561051d5761051c6103e2565b5b61052986828701610483565b92509250509250925092565b5f82825260208201905092915050565b828183375f83830152505050565b5f601f19601f8301169050919050565b5f61056e8385610535565b935061057b838584610545565b61058483610553565b840190509392505050565b5f6020820190508181035f8301526105a8818486610563565b9050939250505056fea264697066735822122077a38dccf0beb194338e16ae035028a22a91499a80c51eda40dea078a8b7f9c864736f6c634300081c0033",
+ "sourceMap": "105:482:65:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const IERC1155Receiver = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "onERC1155BatchReceived",
+ "inputs": [
+ {
+ "name": "operator",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "from",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "ids",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ },
+ {
+ "name": "values",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "onERC1155Received",
+ "inputs": [
+ {
+ "name": "operator",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "from",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "id",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "supportsInterface",
+ "inputs": [
+ {
+ "name": "interfaceId",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
+
+export const SoladyAccount07 = {
+ "abi": [
+ {
+ "type": "fallback",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "receive",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "addDeposit",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "cancelOwnershipHandover",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "completeOwnershipHandover",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "delegateExecute",
+ "inputs": [
+ {
+ "name": "delegate",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "eip712Domain",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "fields",
+ "type": "bytes1",
+ "internalType": "bytes1"
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "version",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "chainId",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "verifyingContract",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "extensions",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "entryPoint",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "executeBatch",
+ "inputs": [
+ {
+ "name": "calls",
+ "type": "tuple[]",
+ "internalType": "struct ERC4337.Call[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "results",
+ "type": "bytes[]",
+ "internalType": "bytes[]"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "getDeposit",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "initialize",
+ "inputs": [
+ {
+ "name": "newOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "isValidSignature",
+ "inputs": [
+ {
+ "name": "hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "owner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ownershipHandoverExpiresAt",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "proxiableUUID",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "renounceOwnership",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "requestOwnershipHandover",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "storageLoad",
+ "inputs": [
+ {
+ "name": "storageSlot",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "storageStore",
+ "inputs": [
+ {
+ "name": "storageSlot",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "storageValue",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "transferOwnership",
+ "inputs": [
+ {
+ "name": "newOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "upgradeToAndCall",
+ "inputs": [
+ {
+ "name": "newImplementation",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "validateUserOp",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct ERC4337.PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "missingAccountFunds",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "validationData",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "withdrawDepositTo",
+ "inputs": [
+ {
+ "name": "to",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "event",
+ "name": "OwnershipHandoverCanceled",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "OwnershipHandoverRequested",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "OwnershipTransferred",
+ "inputs": [
+ {
+ "name": "oldOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "newOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "Upgraded",
+ "inputs": [
+ {
+ "name": "implementation",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "AlreadyInitialized",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "FnSelectorNotRecognized",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "NewOwnerIsZeroAddress",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "NoHandoverRequest",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "Unauthorized",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "UnauthorizedCallContext",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "UpgradeFailed",
+ "inputs": []
+ }
+ ],
+ "bytecode": {
+ "object": "0x6101406040523073ffffffffffffffffffffffffffffffffffffffff1660809081525034801561002d575f5ffd5b503073ffffffffffffffffffffffffffffffffffffffff1660a081815250504660c0818152505060608061006561015760201b60201c565b6100805761007761015b60201b60201c565b80925081935050505b5f61008f61015760201b60201c565b6100a05782805190602001206100a4565b5f5f1b5b90505f6100b561015760201b60201c565b6100c65782805190602001206100ca565b5f5f1b5b90508160e081815250508061010081815250505f6100ec61015760201b60201c565b610136576040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815283602082015282604082015246606082015230608082015260a081209150505b80610120818152505050505050506101526101d260201b60201c565b6102c8565b5f90565b6060806040518060400160405280600d81526020017f536f6c6164794163636f756e74000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250915091509091565b6101e260016101e460201b60201c565b565b6101f26102c060201b60201c565b1561026a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392780541561022c57630dc149f05f526004601cfd5b8160601b60601c9150811560ff1b82178155815f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3506102bd565b8060601b60601c9050807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392755805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa35b50565b5f6001905090565b60805160a05160c05160e05161010051610120516120c06103165f395f61158501525f61169401525f61167101525f61170301525f61172701525f81816108c001526109a501526120c05ff3fe608060405260043610610138575f3560e01c806384b0196e116100aa578063c399ec881161006e578063c399ec88146103fd578063c4d66de814610427578063cb0fec1f14610443578063f04e283e1461047f578063f2fde38b1461049b578063fee81cf4146104b75761013f565b806384b0196e146103195780638da5cb5b14610349578063b0d691fe14610373578063b10cc7281461039d578063b61d27f6146103cd5761013f565b80634a58db19116100fc5780634a58db19146102995780634d44560d146102a35780634f1ef286146102bf57806352d1902d146102db57806354d1f13d14610305578063715018a61461030f5761013f565b8063125b14e5146101d75780631626ba7e146101f357806319822f7c1461022f578063256929621461025f57806334fcd5be146102695761013f565b3661013f57005b6101476104f3565b61014f6104f5565b15610181575f3560e01c63bc197c81811463f23a6e6182141763150b7a028214171561017f57806020526020603cf35b505b6101896104fd565b6101916104ff565b156101a35761019e610507565b6101d5565b6040517f3c10b94e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b6101f160048036038101906101ec9190611792565b61058e565b005b3480156101fe575f5ffd5b5061021960048036038101906102149190611831565b61062a565b60405161022691906118c8565b60405180910390f35b61024960048036038101906102449190611937565b610696565b60405161025691906119b2565b60405180910390f35b610267610735565b005b610283600480360381019061027e9190611a20565b610786565b6040516102909190611b96565b60405180910390f35b6102a1610848565b005b6102bd60048036038101906102b89190611c10565b610869565b005b6102d960048036038101906102d49190611c4e565b6108bd565b005b3480156102e6575f5ffd5b506102ef6109a1565b6040516102fc9190611cba565b60405180910390f35b61030d610a03565b005b610317610a3c565b005b348015610324575f5ffd5b5061032d610a4f565b6040516103409796959493929190611e25565b60405180910390f35b348015610354575f5ffd5b5061035d610a9a565b60405161036a9190611ea7565b60405180910390f35b34801561037e575f5ffd5b50610387610ac2565b6040516103949190611ea7565b60405180910390f35b6103b760048036038101906103b29190611c4e565b610ad9565b6040516103c49190611f08565b60405180910390f35b6103e760048036038101906103e29190611f28565b610bf0565b6040516103f49190611f08565b60405180910390f35b348015610408575f5ffd5b50610411610c6c565b60405161041e91906119b2565b60405180910390f35b610441600480360381019061043c9190611f99565b610c9c565b005b34801561044e575f5ffd5b5061046960048036038101906104649190611fc4565b610ca8565b6040516104769190611cba565b60405180910390f35b61049960048036038101906104949190611f99565b610cb2565b005b6104b560048036038101906104b09190611f99565b610cf0565b005b3480156104c2575f5ffd5b506104dd60048036038101906104d89190611f99565b610d19565b6040516104ea91906119b2565b60405180910390f35b565b5f6001905090565b565b5f6001905090565b36610510573636f35b5f6003195f5b36811015610575578035828201185f1a60018201915080610565578135838301185f1a6001830192505f198552607f811161055357600181013886395b6001607f821601850194505050610570565b808453600184019350505b610516565b505f38835f305af43d5f5f3e8061058a573d5ffd5b3d5ff35b610596610ac2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105d1576105d0610d32565b5b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81147fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392782141715610622575f38fd5b818355505050565b5f5f83839050036106685761773961ffff84849050198161064e5761064d611fef565b5b0402845f1c0361066757637739000160e01b905061068f565b5b5f61067c856106778686610dd4565b610e0e565b905080155f03631626ba7e1760e01b9150505b9392505050565b5f61069f610ac2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610703576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8161070e8585610e47565b915061071d8560200135610e80565b801561072d575f385f3884335af1505b509392505050565b5f61073e610e83565b67ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b6060610790610ac2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107cb576107ca610d32565b5b6040519050818152806020018260051b81018360051b858337805b80831461083b57825186016040810135810180356020820185375f38823586602086013586355af161081a573d5f853e3d84fd5b8385523d8452602084013d5f823e3d810194505050506020830192506107e6565b5080604052505092915050565b5f610851610ac2565b90505f385f3834855af1813b02610866575f38fd5b50565b610871610d32565b5f61087a610ac2565b905082601452816034526f205c28780000000000000000000000005f525f38604460105f855af1813b026108b4573d5f6040513e3d604051fd5b5f603452505050565b5f7f000000000000000000000000000000000000000000000000000000000000000090503081036108f557639f03a0265f526004601cfd5b6108fe84610e8d565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610950576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f38a2848155821561099a57604051838582375f388583895af4610998573d5f823e3d81fd5b505b5050505050565b5f5f7f000000000000000000000000000000000000000000000000000000000000000090503081146109da57639f03a0265f526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b91505090565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b610a44610d32565b610a4d5f610e98565b565b5f6060805f5f5f60607f0f000000000000000000000000000000000000000000000000000000000000009650610a83610f5e565b809650819750505046935030925090919293949596565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754905090565b5f6f71727de22e5e9d8baf0edac6f37da032905090565b6060610ae3610ac2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b1e57610b1d610d32565b5b5f5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275491506040519250838584375f388585895af4610b84573d5f843e3d83fd5b3d8352602083013d5f823e3d8101604052507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275482147f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54821416610be7575f38fd5b50509392505050565b6060610bfa610ac2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c3557610c34610d32565b5b6040519050818382375f38838387895af1610c52573d5f823e3d81fd5b3d8152602081013d5f823e3d810160405250949350505050565b5f5f610c76610ac2565b9050306020526370a082315f526020806024601c845afa601f3d11166020510291505090565b610ca581610fd5565b50565b5f81549050919050565b610cba610d32565b63389a75e1600c52805f526020600c208054421115610ce057636f5e88185f526004601cfd5b5f815550610ced81610e98565b50565b610cf8610d32565b8060601b610d0d57637448fbae5f526004601cfd5b610d1681610e98565b50565b5f63389a75e1600c52815f526020600c20549050919050565b610d3a610a9a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dd2573073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dd1576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b565b365f83839150915061ffff30301c1904616492026020820383013503610e07576040820135820180359150602081019250505b9250929050565b5f610e1a8484846110ab565b80610e2c5750610e2b8484846110ce565b5b80610e3e5750610e3d848484611351565b5b90509392505050565b5f5f610e73610e54610a9a565b610e5d856113ca565b86806101000190610e6e9190612028565b6113fa565b9050801591505092915050565b50565b5f6202a300905090565b610e95610d32565b50565b610ea06114f6565b15610f05577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b8217815550610f5b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b6060806040518060400160405280600d81526020017f536f6c6164794163636f756e74000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250915091509091565b610fdd6114f6565b15611055577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392780541561101757630dc149f05f526004601cfd5b8160601b60601c9150811560ff1b82178155815f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3506110a8565b8060601b60601c9050807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392755805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa35b50565b5f6110b46114fe565b156110c7576110c4848484611549565b90505b9392505050565b5f5f3073ffffffffffffffffffffffffffffffffffffffff1690505f811461114b575f5f5f5f5f6110fd610a4f565b50955095509550955095505060405195508451602086012060408701528351602085012060608701528260808701528160601b60601c60a08701528060c087015260e0860160405250505050505b6040516002840385013560f01c600115611323578060420180860387016119015f52604081602037821582881017896042601e201817156111bd575f94507f983e65e5148e570cd828ead231ee759a8d7958721a768f93bc4483ba005c32de8552886020526040852098505050611323565b7f5479706564446174615369676e280000000000000000000000000000000000008452600e8401836040830182376028848201526029600185830103515f1a1461123f575f6001858301035b600115611228576001820191506029828203515f1a1486831011611209575b508085039450808560408501018337602881830153505b6f07fffffe00000000000001000000000081515f1a1c5b602882515f1a1461127c57806512010000000183515f1a1c179050600182019150611256565b7f20636f6e74656e74732c737472696e67206e616d652c737472696e670000000082527f2076657273696f6e2c75696e7432353620636861696e49642c61646472657373601c8301527f20766572696679696e67436f6e74726163742c627974657333322073616c7429603c830152605c8201915084604084018337604083883785858301038620875260e0872060405280600116604201601e209a508389039850505050505b8160405250505f810361133c5761133985611566565b94505b611347858585611549565b9150509392505050565b5f5f3a036113c3573a3a526d378edcd5b5b0a24f5342d8c1048560203a3a388461fffffa503a516113b457604051631626ba7e3a528160205260408052454561ffff0117805a1083881417156113a357fe5b3a3a6064601c3085fa508160405250505b506113c0848484611549565b90505b9392505050565b5f816020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c6004209050919050565b5f5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603156114ee576040516001156114a9578260408114611450576041811461147457506114a9565b6020850135601b8160ff1c0160205285356040528060011b60011c60605250611485565b60408501355f1a6020526040856040375b50845f526020600160805f60015afa5180871860601b3d1192505f60605281604052505b816114ec57631626ba7e60e01b80825285600483015260248201604081528460448401528486606485013760208160648701858b5afa9350838282511416935050505b505b949350505050565b5f6001905090565b5f611507610ac2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061154457506115436115e2565b5b905090565b5f61155d611555611625565b8585856113fa565b90509392505050565b5f61156f611633565b156115835761157c611637565b90506115bf565b7f000000000000000000000000000000000000000000000000000000000000000090506115ae6116ff565b156115be576115bb611637565b90505b5b6719010000000000005f5280601a5281603a52604260182090505f603a52919050565b5f6dd9ecebf3c23529de49815dac1c4c73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b5f61162e610a9a565b905090565b5f90565b5f5f611641611633565b1561166f575f5f611650610f5e565b91509150818051906020012093508080519060200120925050506116b6565b7f000000000000000000000000000000000000000000000000000000000000000091507f000000000000000000000000000000000000000000000000000000000000000090505b6040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815282602082015281604082015246606082015230608082015260a081209250505090565b5f5f7f000000000000000000000000000000000000000000000000000000000000000090505f7f0000000000000000000000000000000000000000000000000000000000000000905080301482461416159250505090565b5f5ffd5b5f5ffd5b5f819050919050565b6117718161175f565b811461177b575f5ffd5b50565b5f8135905061178c81611768565b92915050565b5f5f604083850312156117a8576117a7611757565b5b5f6117b58582860161177e565b92505060206117c68582860161177e565b9150509250929050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f8401126117f1576117f06117d0565b5b8235905067ffffffffffffffff81111561180e5761180d6117d4565b5b60208301915083600182028301111561182a576118296117d8565b5b9250929050565b5f5f5f6040848603121561184857611847611757565b5b5f6118558682870161177e565b935050602084013567ffffffffffffffff8111156118765761187561175b565b5b611882868287016117dc565b92509250509250925092565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6118c28161188e565b82525050565b5f6020820190506118db5f8301846118b9565b92915050565b5f5ffd5b5f61012082840312156118fb576118fa6118e1565b5b81905092915050565b5f819050919050565b61191681611904565b8114611920575f5ffd5b50565b5f813590506119318161190d565b92915050565b5f5f5f6060848603121561194e5761194d611757565b5b5f84013567ffffffffffffffff81111561196b5761196a61175b565b5b611977868287016118e5565b93505060206119888682870161177e565b925050604061199986828701611923565b9150509250925092565b6119ac81611904565b82525050565b5f6020820190506119c55f8301846119a3565b92915050565b5f5f83601f8401126119e0576119df6117d0565b5b8235905067ffffffffffffffff8111156119fd576119fc6117d4565b5b602083019150836020820283011115611a1957611a186117d8565b5b9250929050565b5f5f60208385031215611a3657611a35611757565b5b5f83013567ffffffffffffffff811115611a5357611a5261175b565b5b611a5f858286016119cb565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611ad682611a94565b611ae08185611a9e565b9350611af0818560208601611aae565b611af981611abc565b840191505092915050565b5f611b0f8383611acc565b905092915050565b5f602082019050919050565b5f611b2d82611a6b565b611b378185611a75565b935083602082028501611b4985611a85565b805f5b85811015611b845784840389528151611b658582611b04565b9450611b7083611b17565b925060208a01995050600181019050611b4c565b50829750879550505050505092915050565b5f6020820190508181035f830152611bae8184611b23565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611bdf82611bb6565b9050919050565b611bef81611bd5565b8114611bf9575f5ffd5b50565b5f81359050611c0a81611be6565b92915050565b5f5f60408385031215611c2657611c25611757565b5b5f611c3385828601611bfc565b9250506020611c4485828601611923565b9150509250929050565b5f5f5f60408486031215611c6557611c64611757565b5b5f611c7286828701611bfc565b935050602084013567ffffffffffffffff811115611c9357611c9261175b565b5b611c9f868287016117dc565b92509250509250925092565b611cb48161175f565b82525050565b5f602082019050611ccd5f830184611cab565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b611d0781611cd3565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f611d3182611d0d565b611d3b8185611d17565b9350611d4b818560208601611aae565b611d5481611abc565b840191505092915050565b611d6881611bd5565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611da081611904565b82525050565b5f611db18383611d97565b60208301905092915050565b5f602082019050919050565b5f611dd382611d6e565b611ddd8185611d78565b9350611de883611d88565b805f5b83811015611e18578151611dff8882611da6565b9750611e0a83611dbd565b925050600181019050611deb565b5085935050505092915050565b5f60e082019050611e385f83018a611cfe565b8181036020830152611e4a8189611d27565b90508181036040830152611e5e8188611d27565b9050611e6d60608301876119a3565b611e7a6080830186611d5f565b611e8760a0830185611cab565b81810360c0830152611e998184611dc9565b905098975050505050505050565b5f602082019050611eba5f830184611d5f565b92915050565b5f82825260208201905092915050565b5f611eda82611a94565b611ee48185611ec0565b9350611ef4818560208601611aae565b611efd81611abc565b840191505092915050565b5f6020820190508181035f830152611f208184611ed0565b905092915050565b5f5f5f5f60608587031215611f4057611f3f611757565b5b5f611f4d87828801611bfc565b9450506020611f5e87828801611923565b935050604085013567ffffffffffffffff811115611f7f57611f7e61175b565b5b611f8b878288016117dc565b925092505092959194509250565b5f60208284031215611fae57611fad611757565b5b5f611fbb84828501611bfc565b91505092915050565b5f60208284031215611fd957611fd8611757565b5b5f611fe68482850161177e565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f833560016020038436030381126120445761204361201c565b5b80840192508235915067ffffffffffffffff82111561206657612065612020565b5b60208301925060018202360383131561208257612081612024565b5b50925092905056fea264697066735822122098a1a8420d7cb2c5cfa796e27c6c41c8153c34f4dd8fa41377f0e3bb854c1d8464736f6c634300081c0033",
+ "sourceMap": "126:221:73:-:0;;;1525:4:50;1501:31;;1466:66;;;;;126:221:73;;;;;;;;;;2157:4:46;2133:31;;2119:45;;;;;;2191:13;2174:30;;;;;;2215:18;2243:21;2279:32;:30;;;:32;;:::i;:::-;2274:80;;2331:23;:21;;;:23;;:::i;:::-;2313:41;;;;;;;;2274:80;2364:16;2383:32;:30;;;:32;;:::i;:::-;:70;;2447:4;2431:22;;;;;;2383:70;;;2426:1;2418:10;;2383:70;2364:89;;2463:19;2497:32;:30;;;:32;;:::i;:::-;:73;;2561:7;2545:25;;;;;;2497:73;;;2540:1;2532:10;;2497:73;2463:107;;2598:8;2580:26;;;;;;2637:11;2616:32;;;;;;2659:17;2691:32;:30;;;:32;;:::i;:::-;2686:489;;2828:4;2822:11;2893:16;2890:1;2883:27;2948:8;2941:4;2938:1;2934:12;2927:30;2995:11;2988:4;2985:1;2981:12;2974:33;3045:9;3038:4;3035:1;3031:12;3024:31;3093:9;3086:4;3083:1;3079:12;3072:31;3146:4;3143:1;3133:18;3120:31;;2795:370;2686:489;3209:9;3184:34;;;;;;2109:1116;;;;;2895:42:42;:40;;;:42;;:::i;:::-;126:221:73;;4371:88:46;4444:11;4371:88;:::o;168:177:73:-;265:13;280;309:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;168:177;;:::o;3216:379:42:-;3560:28;3585:1;3560:16;;;:28;;:::i;:::-;3216:379::o;4883:1190:45:-;4958:23;:21;;;:23;;:::i;:::-;4954:1113;;;5088:11;5125:9;5119:16;5116:150;;;5171:10;5165:4;5158:24;5243:4;5237;5230:18;5116:150;5355:8;5351:2;5347:17;5343:2;5339:26;5327:38;;5469:8;5462:16;5457:3;5453:26;5443:8;5440:40;5429:9;5422:59;5610:8;5607:1;5567:38;5564:1;5561;5556:63;5053:580;4954:1113;;;5809:8;5805:2;5801:17;5797:2;5793:26;5781:38;;5896:8;5883:11;5876:29;6034:8;6031:1;5991:38;5988:1;5985;5980:63;4954:1113;4883:1190;:::o;17797:116:42:-;17879:4;17902;17895:11;;17797:116;:::o;126:221:73:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const SoladyAccount06 = {
+ "abi": [
+ {
+ "type": "fallback",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "receive",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "addDeposit",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "cancelOwnershipHandover",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "completeOwnershipHandover",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "delegateExecute",
+ "inputs": [
+ {
+ "name": "delegate",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "eip712Domain",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "fields",
+ "type": "bytes1",
+ "internalType": "bytes1"
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "version",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "chainId",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "verifyingContract",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "extensions",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "entryPoint",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "executeBatch",
+ "inputs": [
+ {
+ "name": "calls",
+ "type": "tuple[]",
+ "internalType": "struct ERC4337.Call[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "results",
+ "type": "bytes[]",
+ "internalType": "bytes[]"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "getDeposit",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "initialize",
+ "inputs": [
+ {
+ "name": "newOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "isValidSignature",
+ "inputs": [
+ {
+ "name": "hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "owner",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ownershipHandoverExpiresAt",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "proxiableUUID",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "renounceOwnership",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "requestOwnershipHandover",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "storageLoad",
+ "inputs": [
+ {
+ "name": "storageSlot",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "storageStore",
+ "inputs": [
+ {
+ "name": "storageSlot",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "storageValue",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "transferOwnership",
+ "inputs": [
+ {
+ "name": "newOwner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "upgradeToAndCall",
+ "inputs": [
+ {
+ "name": "newImplementation",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "validateUserOp",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct ERC4337.UserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callGasLimit",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "verificationGasLimit",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "maxFeePerGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "maxPriorityFeePerGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "missingAccountFunds",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "validationData",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "withdrawDepositTo",
+ "inputs": [
+ {
+ "name": "to",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "event",
+ "name": "OwnershipHandoverCanceled",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "OwnershipHandoverRequested",
+ "inputs": [
+ {
+ "name": "pendingOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "OwnershipTransferred",
+ "inputs": [
+ {
+ "name": "oldOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "newOwner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "Upgraded",
+ "inputs": [
+ {
+ "name": "implementation",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "AlreadyInitialized",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "NewOwnerIsZeroAddress",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "NoHandoverRequest",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "Unauthorized",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "UnauthorizedCallContext",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "UpgradeFailed",
+ "inputs": []
+ }
+ ],
+ "bytecode": {
+ "object": "0x6101406040523073ffffffffffffffffffffffffffffffffffffffff1660809081525034801561002d575f5ffd5b503073ffffffffffffffffffffffffffffffffffffffff1660a081815250504660c0818152505060608061006561015760201b60201c565b6100805761007761015b60201b60201c565b80925081935050505b5f61008f61015760201b60201c565b6100a05782805190602001206100a4565b5f5f1b5b90505f6100b561015760201b60201c565b6100c65782805190602001206100ca565b5f5f1b5b90508160e081815250508061010081815250505f6100ec61015760201b60201c565b610136576040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815283602082015282604082015246606082015230608082015260a081209150505b80610120818152505050505050506101526101d260201b60201c565b6102c8565b5f90565b6060806040518060400160405280600d81526020017f536f6c6164794163636f756e74000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250915091509091565b6101e260016101e460201b60201c565b565b6101f26102c060201b60201c565b1561026a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392780541561022c57630dc149f05f526004601cfd5b8160601b60601c9150811560ff1b82178155815f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3506102bd565b8060601b60601c9050807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392755805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa35b50565b5f6001905090565b60805160a05160c05160e0516101005161012051611c0d6103165f395f610dbc01525f6111d601525f6111b301525f61124501525f61126901525f8181610877015261095c0152611c0d5ff3fe608060405260043610610138575f3560e01c806384b0196e116100aa578063c399ec881161006e578063c399ec881461039b578063c4d66de8146103c5578063cb0fec1f146103e1578063f04e283e1461041d578063f2fde38b14610439578063fee81cf4146104555761013f565b806384b0196e146102b75780638da5cb5b146102e7578063b0d691fe14610311578063b10cc7281461033b578063b61d27f61461036b5761013f565b80634a58db19116100fc5780634a58db19146102375780634d44560d146102415780634f1ef2861461025d57806352d1902d1461027957806354d1f13d146102a3578063715018a6146102ad5761013f565b8063125b14e5146101755780631626ba7e1461019157806325692962146101cd57806334fcd5be146101d75780633a871cdd146102075761013f565b3661013f57005b5f3560e01c63bc197c81811463f23a6e6182141763150b7a028214171561016a57806020526020603cf35b50610173610491565b005b61018f600480360381019061018a919061130c565b610518565b005b34801561019c575f5ffd5b506101b760048036038101906101b291906113ab565b6105b4565b6040516101c49190611442565b60405180910390f35b6101d561064d565b005b6101f160048036038101906101ec91906114b0565b61069e565b6040516101fe9190611626565b60405180910390f35b610221600480360381019061021c919061169c565b610760565b60405161022e9190611717565b60405180910390f35b61023f6107ff565b005b61025b6004803603810190610256919061178a565b610820565b005b610277600480360381019061027291906117c8565b610874565b005b348015610284575f5ffd5b5061028d610958565b60405161029a9190611834565b60405180910390f35b6102ab6109ba565b005b6102b56109f3565b005b3480156102c2575f5ffd5b506102cb610a06565b6040516102de979695949392919061199f565b60405180910390f35b3480156102f2575f5ffd5b506102fb610a51565b6040516103089190611a21565b60405180910390f35b34801561031c575f5ffd5b50610325610a79565b6040516103329190611a21565b60405180910390f35b610355600480360381019061035091906117c8565b610a94565b6040516103629190611a82565b60405180910390f35b61038560048036038101906103809190611aa2565b610bab565b6040516103929190611a82565b60405180910390f35b3480156103a6575f5ffd5b506103af610c27565b6040516103bc9190611717565b60405180910390f35b6103df60048036038101906103da9190611b13565b610c57565b005b3480156103ec575f5ffd5b5061040760048036038101906104029190611b3e565b610c63565b6040516104149190611834565b60405180910390f35b61043760048036038101906104329190611b13565b610c6d565b005b610453600480360381019061044e9190611b13565b610cab565b005b348015610460575f5ffd5b5061047b60048036038101906104769190611b13565b610cd4565b6040516104889190611717565b60405180910390f35b3661049a573636f35b5f6003195f5b368110156104ff578035828201185f1a600182019150806104ef578135838301185f1a6001830192505f198552607f81116104dd57600181013886395b6001607f8216018501945050506104fa565b808453600184019350505b6104a0565b505f38835f305af43d5f5f3e80610514573d5ffd5b3d5ff35b610520610a79565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461055b5761055a610ced565b5b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81147fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927821417156105ac575f38fd5b818355505050565b5f6040516060830384016060815f376119015f526001156106125760608410866042601e2018176105f85760608403935080355f528560205260605f209550610612565b6020840360208511029350856060526040802095505f6060525b8160405250505f610634610624610d8f565b61062d87610d9d565b8686610e19565b905080155f03631626ba7e1760e01b9150509392505050565b5f610656610f11565b67ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b60606106a8610a79565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106e3576106e2610ced565b5b6040519050818152806020018260051b81018360051b858337805b80831461075357825186016040810135810180356020820185375f38823586602086013586355af1610732573d5f853e3d84fd5b8385523d8452602084013d5f823e3d810194505050506020830192506106fe565b5080604052505092915050565b5f610769610a79565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107cd576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816107d88585610f1b565b91506107e78560200135610f54565b80156107f7575f385f3884335af1505b509392505050565b5f610808610a79565b90505f385f3834855af1813b0261081d575f38fd5b50565b610828610ced565b5f610831610a79565b905082601452816034526f205c28780000000000000000000000005f525f38604460105f855af1813b0261086b573d5f6040513e3d604051fd5b5f603452505050565b5f7f000000000000000000000000000000000000000000000000000000000000000090503081036108ac57639f03a0265f526004601cfd5b6108b584610f57565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610907576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f38a2848155821561095157604051838582375f388583895af461094f573d5f823e3d81fd5b505b5050505050565b5f5f7f0000000000000000000000000000000000000000000000000000000000000000905030811461099157639f03a0265f526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b91505090565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b6109fb610ced565b610a045f610f62565b565b5f6060805f5f5f60607f0f000000000000000000000000000000000000000000000000000000000000009650610a3a611028565b809650819750505046935030925090919293949596565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754905090565b5f735ff137d4b0fdcd49dca30c7cf57e578a026d2789905090565b6060610a9e610a79565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ad957610ad8610ced565b5b5f5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275491506040519250838584375f388585895af4610b3f573d5f843e3d83fd5b3d8352602083013d5f823e3d8101604052507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275482147f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54821416610ba2575f38fd5b50509392505050565b6060610bb5610a79565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf057610bef610ced565b5b6040519050818382375f38838387895af1610c0d573d5f823e3d81fd5b3d8152602081013d5f823e3d810160405250949350505050565b5f5f610c31610a79565b9050306020526370a082315f526020806024601c845afa601f3d11166020510291505090565b610c608161109f565b50565b5f81549050919050565b610c75610ced565b63389a75e1600c52805f526020600c208054421115610c9b57636f5e88185f526004601cfd5b5f815550610ca881610f62565b50565b610cb3610ced565b8060601b610cc857637448fbae5f526004601cfd5b610cd181610f62565b50565b5f63389a75e1600c52815f526020600c20549050919050565b610cf5610a51565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d8d573073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d8c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b565b5f610d98610a51565b905090565b5f610da6611175565b15610dba57610db3611179565b9050610df6565b7f00000000000000000000000000000000000000000000000000000000000000009050610de5611241565b15610df557610df2611179565b90505b5b6719010000000000005f5280601a5281603a52604260182090505f603a52919050565b5f8460601b60601c94508415610f0957604051845f5260408303610e82576020840135601b8160ff1c0160205284356040528060011b60011c6060526020600160805f60015afa805188183d1517610e7f57600193505f60605282604052505050610f09565b50505b60418303610ec55760408401355f1a6020526040846040376020600160805f60015afa805187183d1517610ec357600192505f606052816040525050610f09565b505b5f60605280604052631626ba7e60e01b80825285600483015260248201604081528460448401528486606485013760208160648701858b5afa828251141693505050505b949350505050565b5f6202a300905090565b5f5f610f47610f28610a51565b610f3185611299565b86806101400190610f429190611b75565b610e19565b9050801591505092915050565b50565b610f5f610ced565b50565b610f6a6112c9565b15610fcf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b8217815550611025565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b6060806040518060400160405280600d81526020017f536f6c6164794163636f756e74000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250915091509091565b6110a76112c9565b1561111f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278054156110e157630dc149f05f526004601cfd5b8160601b60601c9150811560ff1b82178155815f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa350611172565b8060601b60601c9050807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392755805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa35b50565b5f90565b5f5f611183611175565b156111b1575f5f611192611028565b91509150818051906020012093508080519060200120925050506111f8565b7f000000000000000000000000000000000000000000000000000000000000000091507f000000000000000000000000000000000000000000000000000000000000000090505b6040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815282602082015281604082015246606082015230608082015260a081209250505090565b5f5f7f000000000000000000000000000000000000000000000000000000000000000090505f7f0000000000000000000000000000000000000000000000000000000000000000905080301482461416159250505090565b5f816020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c6004209050919050565b5f6001905090565b5f5ffd5b5f5ffd5b5f819050919050565b6112eb816112d9565b81146112f5575f5ffd5b50565b5f81359050611306816112e2565b92915050565b5f5f60408385031215611322576113216112d1565b5b5f61132f858286016112f8565b9250506020611340858286016112f8565b9150509250929050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261136b5761136a61134a565b5b8235905067ffffffffffffffff8111156113885761138761134e565b5b6020830191508360018202830111156113a4576113a3611352565b5b9250929050565b5f5f5f604084860312156113c2576113c16112d1565b5b5f6113cf868287016112f8565b935050602084013567ffffffffffffffff8111156113f0576113ef6112d5565b5b6113fc86828701611356565b92509250509250925092565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61143c81611408565b82525050565b5f6020820190506114555f830184611433565b92915050565b5f5f83601f8401126114705761146f61134a565b5b8235905067ffffffffffffffff81111561148d5761148c61134e565b5b6020830191508360208202830111156114a9576114a8611352565b5b9250929050565b5f5f602083850312156114c6576114c56112d1565b5b5f83013567ffffffffffffffff8111156114e3576114e26112d5565b5b6114ef8582860161145b565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61156682611524565b611570818561152e565b935061158081856020860161153e565b6115898161154c565b840191505092915050565b5f61159f838361155c565b905092915050565b5f602082019050919050565b5f6115bd826114fb565b6115c78185611505565b9350836020820285016115d985611515565b805f5b8581101561161457848403895281516115f58582611594565b9450611600836115a7565b925060208a019950506001810190506115dc565b50829750879550505050505092915050565b5f6020820190508181035f83015261163e81846115b3565b905092915050565b5f5ffd5b5f61016082840312156116605761165f611646565b5b81905092915050565b5f819050919050565b61167b81611669565b8114611685575f5ffd5b50565b5f8135905061169681611672565b92915050565b5f5f5f606084860312156116b3576116b26112d1565b5b5f84013567ffffffffffffffff8111156116d0576116cf6112d5565b5b6116dc8682870161164a565b93505060206116ed868287016112f8565b92505060406116fe86828701611688565b9150509250925092565b61171181611669565b82525050565b5f60208201905061172a5f830184611708565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61175982611730565b9050919050565b6117698161174f565b8114611773575f5ffd5b50565b5f8135905061178481611760565b92915050565b5f5f604083850312156117a05761179f6112d1565b5b5f6117ad85828601611776565b92505060206117be85828601611688565b9150509250929050565b5f5f5f604084860312156117df576117de6112d1565b5b5f6117ec86828701611776565b935050602084013567ffffffffffffffff81111561180d5761180c6112d5565b5b61181986828701611356565b92509250509250925092565b61182e816112d9565b82525050565b5f6020820190506118475f830184611825565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6118818161184d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f6118ab82611887565b6118b58185611891565b93506118c581856020860161153e565b6118ce8161154c565b840191505092915050565b6118e28161174f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61191a81611669565b82525050565b5f61192b8383611911565b60208301905092915050565b5f602082019050919050565b5f61194d826118e8565b61195781856118f2565b935061196283611902565b805f5b838110156119925781516119798882611920565b975061198483611937565b925050600181019050611965565b5085935050505092915050565b5f60e0820190506119b25f83018a611878565b81810360208301526119c481896118a1565b905081810360408301526119d881886118a1565b90506119e76060830187611708565b6119f460808301866118d9565b611a0160a0830185611825565b81810360c0830152611a138184611943565b905098975050505050505050565b5f602082019050611a345f8301846118d9565b92915050565b5f82825260208201905092915050565b5f611a5482611524565b611a5e8185611a3a565b9350611a6e81856020860161153e565b611a778161154c565b840191505092915050565b5f6020820190508181035f830152611a9a8184611a4a565b905092915050565b5f5f5f5f60608587031215611aba57611ab96112d1565b5b5f611ac787828801611776565b9450506020611ad887828801611688565b935050604085013567ffffffffffffffff811115611af957611af86112d5565b5b611b0587828801611356565b925092505092959194509250565b5f60208284031215611b2857611b276112d1565b5b5f611b3584828501611776565b91505092915050565b5f60208284031215611b5357611b526112d1565b5b5f611b60848285016112f8565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83356001602003843603038112611b9157611b90611b69565b5b80840192508235915067ffffffffffffffff821115611bb357611bb2611b6d565b5b602083019250600182023603831315611bcf57611bce611b71565b5b50925092905056fea26469706673582212202b405c2ca1ff94c932694bec300c18e6c8b1ff1055a6fefe1c2360a03036233864736f6c634300081c0033",
+ "sourceMap": "126:221:72:-:0;;;1520:4:60;1496:31;;1461:66;;;;;126:221:72;;;;;;;;;;2157:4:56;2133:31;;2119:45;;;;;;2191:13;2174:30;;;;;;2215:18;2243:21;2279:32;:30;;;:32;;:::i;:::-;2274:80;;2331:23;:21;;;:23;;:::i;:::-;2313:41;;;;;;;;2274:80;2364:16;2383:32;:30;;;:32;;:::i;:::-;:70;;2447:4;2431:22;;;;;;2383:70;;;2426:1;2418:10;;2383:70;2364:89;;2463:19;2497:32;:30;;;:32;;:::i;:::-;:73;;2561:7;2545:25;;;;;;2497:73;;;2540:1;2532:10;;2497:73;2463:107;;2598:8;2580:26;;;;;;2637:11;2616:32;;;;;;2659:17;2691:32;:30;;;:32;;:::i;:::-;2686:489;;2828:4;2822:11;2893:16;2890:1;2883:27;2948:8;2941:4;2938:1;2934:12;2927:30;2995:11;2988:4;2985:1;2981:12;2974:33;3045:9;3038:4;3035:1;3031:12;3024:31;3093:9;3086:4;3083:1;3079:12;3072:31;3146:4;3143:1;3133:18;3120:31;;2795:370;2686:489;3209:9;3184:34;;;;;;2109:1116;;;;;2539:42:52;:40;;;:42;;:::i;:::-;126:221:72;;4371:88:56;4444:11;4371:88;:::o;168:177:72:-;265:13;280;309:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;168:177;;:::o;2860:379:52:-;3204:28;3229:1;3204:16;;;:28;;:::i;:::-;2860:379::o;4883:1190:55:-;4958:23;:21;;;:23;;:::i;:::-;4954:1113;;;5088:11;5125:9;5119:16;5116:150;;;5171:10;5165:4;5158:24;5243:4;5237;5230:18;5116:150;5355:8;5351:2;5347:17;5343:2;5339:26;5327:38;;5469:8;5462:16;5457:3;5453:26;5443:8;5440:40;5429:9;5422:59;5610:8;5607:1;5567:38;5564:1;5561;5556:63;5053:580;4954:1113;;;5809:8;5805:2;5801:17;5797:2;5793:26;5781:38;;5896:8;5883:11;5876:29;6034:8;6031:1;5991:38;5988:1;5985;5980:63;4954:1113;4883:1190;:::o;17427:116:52:-;17509:4;17532;17525:11;;17427:116;:::o;126:221:72:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ }
+} as const;
+
+export const IAccount = {
+ "abi": [
+ {
+ "type": "function",
+ "name": "validateUserOp",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct PackedUserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "accountGasLimits",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "gasFees",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "missingAccountFunds",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "validationData",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ }
+ ],
+ "bytecode": {
+ "object": "0x",
+ "sourceMap": "",
+ "linkReferences": {}
+ }
+} as const;
diff --git a/package.json b/package.json
index 165310970b..2a92690980 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,6 @@
"changeset:publish": "pnpm changeset:prepublish && changeset publish",
"changeset:version": "pnpm install --lockfile-only && changeset version && pnpm version:update && pnpm check",
"clean": "rm -rf *.tsbuildinfo src/*.tsbuildinfo src/_esm src/_cjs src/_types",
- "contracts:build": "forge build --config-path ./contracts/foundry.toml && bun scripts/generateTypedArtifacts.ts",
"deps": "pnpx taze -r",
"docs:dev": "pnpm --filter site dev",
"docs:build": "pnpm --filter site build",
@@ -24,7 +23,7 @@
"check:types": "tsc -b",
"check:unused": "pnpm clean && knip",
"gen:tempo-abis": "bun scripts/generateTempoAbis.ts",
- "postinstall": "git submodule update --init --recursive && pnpm contracts:build",
+ "postinstall": "git submodule update --init --recursive",
"preconstruct": "bun scripts/preconstruct.ts",
"preinstall": "pnpx only-allow pnpm",
"prepare": "pnpm simple-git-hooks",
@@ -56,9 +55,11 @@
"@pimlico/alto": "0.0.18",
"@remix-run/node-fetch-server": "^0.12.0",
"@size-limit/preset-big-lib": "^11.2.0",
+ "@tevm/test-matchers": "1.0.0-rc.151",
+ "@tevm/test-utils": "1.0.0-rc.151",
"@types/bun": "^1.2.22",
"@types/node": "^24.5.2",
- "@vitest/coverage-v8": "^4.0.15",
+ "@vitest/coverage-v8": "^4.1.6",
"bun": "^1.2.22",
"ethers": "^6.15.0",
"knip": "^5.64.0",
@@ -70,9 +71,10 @@
"sherif": "^0.8.4",
"simple-git-hooks": "^2.13.1",
"size-limit": "^11.2.0",
+ "tevm": "1.0.0-rc.151",
"testcontainers": "^11.10.0",
"typescript": "catalog:",
- "vitest": "^4.0.15"
+ "vitest": "^4.1.6"
},
"packageManager": "pnpm@10.22.0",
"engines": {
@@ -89,7 +91,6 @@
],
"ignoreBinaries": [
"dev",
- "forge",
"only-allow",
"printf"
],
@@ -277,7 +278,27 @@
"vite@>=6.0.0 <=6.4.0": "6.4.1",
"hono@>=1.1.0 <4.10.2": "4.10.2",
"glob@>=10.3.7 <=11.0.3": ">=11.1.0",
- "mdast-util-to-hast@>=13.0.0 <13.2.1": "13.2.1"
+ "mdast-util-to-hast@>=13.0.0 <13.2.1": "13.2.1",
+ "@tevm/errors>viem": "2.49.3",
+ "@tevm/test-matchers>viem": "2.49.3",
+ "@tevm/test-utils>viem": "2.49.3"
+ },
+ "packageExtensions": {
+ "@tevm/errors@1.0.0-rc.151": {
+ "dependencies": {
+ "viem": "2.49.3"
+ }
+ },
+ "@tevm/test-utils@1.0.0-rc.151": {
+ "dependencies": {
+ "viem": "2.49.3"
+ }
+ },
+ "tevm@1.0.0-rc.151": {
+ "dependencies": {
+ "viem": "2.49.3"
+ }
+ }
},
"onlyBuiltDependencies": [
"bun",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3ce982ebfe..7c61538f1c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -47,6 +47,11 @@ overrides:
hono@>=1.1.0 <4.10.2: 4.10.2
glob@>=10.3.7 <=11.0.3: '>=11.1.0'
mdast-util-to-hast@>=13.0.0 <13.2.1: 13.2.1
+ '@tevm/errors>viem': 2.49.3
+ '@tevm/test-matchers>viem': 2.49.3
+ '@tevm/test-utils>viem': 2.49.3
+
+packageExtensionsChecksum: sha256-4dHjLQ3m1YmLPdhPvWMCXfRlj7wHzYFB6tppW6SLVkw=
importers:
@@ -57,7 +62,7 @@ importers:
version: 2.0.1
'@tevm/voltaire':
specifier: ^0.1.40
- version: 0.1.40(@noble/hashes@2.0.1)(@solana/sysvars@2.3.0(typescript@5.9.3))(abitype@1.2.3(typescript@5.9.3)(zod@3.25.76))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.9.3)(ws@8.18.3)(zod@3.25.76)
+ version: 0.1.40(@noble/hashes@2.2.0)(@solana/sysvars@2.3.0(typescript@5.9.3))(abitype@1.3.0(typescript@5.9.3)(zod@4.4.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.9.3)(zod@4.4.3)
devDependencies:
'@arethetypeswrong/cli':
specifier: ^0.18.2
@@ -88,7 +93,13 @@ importers:
version: 0.12.0
'@size-limit/preset-big-lib':
specifier: ^11.2.0
- version: 11.2.0(size-limit@11.2.0)
+ version: 11.2.0(esbuild@0.28.1)(size-limit@11.2.0)
+ '@tevm/test-matchers':
+ specifier: 1.0.0-rc.151
+ version: 1.0.0-rc.151(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.6.0)(lightningcss@1.30.2)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@5.9.3)(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(yaml@2.8.1)(zod@4.4.3)
+ '@tevm/test-utils':
+ specifier: 1.0.0-rc.151
+ version: 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
'@types/bun':
specifier: ^1.2.22
version: 1.2.22(@types/react@19.0.8)
@@ -96,8 +107,8 @@ importers:
specifier: ^24.5.2
version: 24.5.2
'@vitest/coverage-v8':
- specifier: ^4.0.15
- version: 4.0.15(vitest@4.0.15(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))
+ specifier: ^4.1.6
+ version: 4.1.10(vitest@4.1.10)
bun:
specifier: ^1.2.22
version: 1.2.22
@@ -112,10 +123,10 @@ importers:
version: 0.14.0
ox:
specifier: ~0.11.1
- version: 0.11.1(typescript@5.9.3)(zod@3.25.76)
+ version: 0.11.1(typescript@5.9.3)(zod@4.4.3)
permissionless:
specifier: ^0.2.57
- version: 0.2.57(ox@0.11.1(typescript@5.9.3)(zod@3.25.76))
+ version: 0.2.57(ox@0.11.1(typescript@5.9.3)(zod@4.4.3))
prool:
specifier: ~0.2.1
version: 0.2.1(@pimlico/alto@0.0.18(typescript@5.9.3))(testcontainers@11.10.0)
@@ -134,18 +145,21 @@ importers:
testcontainers:
specifier: ^11.10.0
version: 11.10.0
+ tevm:
+ specifier: 1.0.0-rc.151
+ version: 1.0.0-rc.151(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.6.0)(lightningcss@1.30.2)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@5.9.3)(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(yaml@2.8.1)(zod@4.4.3)
typescript:
specifier: 'catalog:'
version: 5.9.3
vitest:
- specifier: ^4.0.15
- version: 4.0.15(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ specifier: ^4.1.6
+ version: 4.1.10(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
environments/bun:
dependencies:
viem:
specifier: file:../../src/
- version: link:../../src
+ version: file:src(@solana/sysvars@2.3.0(typescript@5.9.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@7.0.2)(zod@4.4.3)
environments/next:
dependencies:
@@ -160,7 +174,7 @@ importers:
version: 19.0.0(react@19.0.0)
viem:
specifier: file:../../src/
- version: file:src(@solana/sysvars@2.3.0(typescript@5.9.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.6.2)(zod@3.25.76)
+ version: file:src(@solana/sysvars@2.3.0(typescript@5.9.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.6.2)(zod@4.4.3)
devDependencies:
'@playwright/test':
specifier: 1.55.1
@@ -182,22 +196,22 @@ importers:
dependencies:
viem:
specifier: file:../../src/
- version: link:../../src
+ version: file:src(@solana/sysvars@2.3.0(typescript@5.9.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@7.0.2)(zod@4.4.3)
environments/tsc:
dependencies:
typescript:
specifier: latest
- version: 5.9.3
+ version: 7.0.2
viem:
specifier: file:../../src/
- version: link:../../src
+ version: file:src(@solana/sysvars@2.3.0(typescript@5.9.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@7.0.2)(zod@4.4.3)
environments/vite:
dependencies:
viem:
specifier: file:../../src/
- version: file:src(@solana/sysvars@2.3.0(typescript@5.9.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.6.2)(zod@3.25.76)
+ version: file:src(@solana/sysvars@2.3.0(typescript@5.9.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.6.2)(zod@4.4.3)
devDependencies:
'@playwright/test':
specifier: 1.55.1
@@ -210,72 +224,72 @@ importers:
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@20.16.12)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@20.16.12)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/_template:
dependencies:
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/account-abstraction_biconomy-bundler:
dependencies:
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/blocks_fetching-blocks:
dependencies:
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/blocks_watching-blocks:
dependencies:
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/clients_public-client:
dependencies:
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/clients_wallet-client:
dependencies:
@@ -287,7 +301,7 @@ importers:
version: 19.0.0(react@19.0.0)
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
'@types/react':
specifier: ^19
@@ -297,13 +311,13 @@ importers:
version: 19.0.3(@types/react@19.0.8)
'@vitejs/plugin-react':
specifier: ^4.3.2
- version: 4.3.2(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))
+ version: 4.3.2(vite@7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/contracts_deploying-contracts:
dependencies:
@@ -315,7 +329,7 @@ importers:
version: 19.0.0(react@19.0.0)
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
'@types/react':
specifier: ^19
@@ -325,39 +339,39 @@ importers:
version: 19.0.3(@types/react@19.0.8)
'@vitejs/plugin-react':
specifier: ^4.3.2
- version: 4.3.2(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))
+ version: 4.3.2(vite@7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/contracts_multicall:
dependencies:
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/contracts_reading-contracts:
dependencies:
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/contracts_writing-to-contracts:
dependencies:
@@ -369,7 +383,7 @@ importers:
version: 19.0.0(react@19.0.0)
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
'@types/react':
specifier: ^19
@@ -379,65 +393,65 @@ importers:
version: 19.0.3(@types/react@19.0.8)
'@vitejs/plugin-react':
specifier: ^4.3.2
- version: 4.3.2(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))
+ version: 4.3.2(vite@7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/ens:
dependencies:
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/logs_block-event-logs:
dependencies:
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/logs_event-logs:
dependencies:
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/logs_pending-transactions-logs:
dependencies:
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/op-stack_deposit:
dependencies:
@@ -459,13 +473,13 @@ importers:
version: 19.0.3(@types/react@19.0.8)
'@vitejs/plugin-react':
specifier: ^4.3.2
- version: 4.3.2(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))
+ version: 4.3.2(vite@7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/signing_typed-data:
dependencies:
@@ -477,7 +491,7 @@ importers:
version: 19.0.0(react@19.0.0)
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
'@types/react':
specifier: ^19
@@ -487,13 +501,13 @@ importers:
version: 19.0.3(@types/react@19.0.8)
'@vitejs/plugin-react':
specifier: ^4.3.2
- version: 4.3.2(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))
+ version: 4.3.2(vite@7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/smart-accounts_coinbase:
dependencies:
@@ -505,7 +519,7 @@ importers:
version: 19.0.0(react@19.0.0)
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
'@types/react':
specifier: ^19
@@ -515,26 +529,26 @@ importers:
version: 19.0.3(@types/react@19.0.8)
'@vitejs/plugin-react':
specifier: ^4.3.2
- version: 4.3.2(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))
+ version: 4.3.2(vite@7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/transactions_fetching-transactions:
dependencies:
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
examples/transactions_sending-transactions:
dependencies:
@@ -546,7 +560,7 @@ importers:
version: 19.0.0(react@19.0.0)
viem:
specifier: latest
- version: 2.43.5(typescript@5.6.2)(zod@3.25.76)
+ version: 2.55.10(typescript@5.6.2)(zod@4.4.3)
devDependencies:
'@types/react':
specifier: ^19
@@ -556,13 +570,13 @@ importers:
version: 19.0.3(@types/react@19.0.8)
'@vitejs/plugin-react':
specifier: ^4.3.2
- version: 4.3.2(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))
+ version: 4.3.2(vite@7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))
typescript:
specifier: ^5.0.3
version: 5.6.2
vite:
specifier: ^7.1.11
- version: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ version: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
site:
devDependencies:
@@ -580,7 +594,7 @@ importers:
version: link:../src
vocs:
specifier: ^1.3.1
- version: 1.3.1(@types/node@24.5.2)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(jiti@2.6.0)(lightningcss@1.30.2)(next@16.0.10(@opentelemetry/api@1.7.0)(@playwright/test@1.55.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.52.2)(terser@5.36.0)(typescript@5.9.3)
+ version: 1.3.1(@types/node@25.9.5)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(jiti@2.6.0)(lightningcss@1.30.2)(next@16.0.10(@opentelemetry/api@1.7.0)(@playwright/test@1.55.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@7.0.2)
src:
dependencies:
@@ -598,16 +612,16 @@ importers:
version: 1.6.0
'@tevm/voltaire':
specifier: ^0.1.40
- version: 0.1.40(@noble/hashes@1.8.0)(@solana/sysvars@2.3.0(typescript@5.9.3))(abitype@1.2.3(typescript@5.9.3)(zod@3.25.76))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.9.3)(ws@8.18.3)(zod@3.25.76)
+ version: 0.1.40(@noble/hashes@1.8.0)(@solana/sysvars@2.3.0(typescript@7.0.2))(abitype@1.2.3(typescript@7.0.2)(zod@4.4.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)(zod@4.4.3)
abitype:
specifier: 1.2.3
- version: 1.2.3(typescript@5.9.3)(zod@3.25.76)
+ version: 1.2.3(typescript@7.0.2)(zod@4.4.3)
isows:
specifier: 1.0.7
version: 1.0.7(ws@8.18.3)
ox:
specifier: 0.11.1
- version: 0.11.1(typescript@5.9.3)(zod@3.25.76)
+ version: 0.11.1(typescript@7.0.2)(zod@4.4.3)
ws:
specifier: 8.18.3
version: 8.18.3
@@ -654,9 +668,15 @@ packages:
'@ark/fs@0.56.0':
resolution: {integrity: sha512-zY/wDDhcvmt6/upQwZM766PAnvIzdEMcgydUGd9pqY9FMGNo9I9uE4RYAfms9AeUUtbZJu2h2Ua0tvFsO5XF4Q==}
+ '@ark/schema@0.3.3':
+ resolution: {integrity: sha512-SA4QggzaKHxkNB+faWmhSJbCPMHmGBCpb6dNG3VIt5VOMZhZJJSD76/tOUzQvvJNzztHkTakrTZea+iKsEDcRQ==}
+
'@ark/schema@0.56.0':
resolution: {integrity: sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==}
+ '@ark/util@0.2.2':
+ resolution: {integrity: sha512-ryZ4+f3SlReQRH9nTFLK5EeU1Pan5ZfS+ACPSk0ir5uujJouFmvOdnkVfeAJAgeOb3kKmUM9kjelv1cwH2ScZg==}
+
'@ark/util@0.56.0':
resolution: {integrity: sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==}
@@ -740,6 +760,10 @@ packages:
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-string-parser@7.29.7':
+ resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-validator-identifier@7.25.9':
resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
engines: {node: '>=6.9.0'}
@@ -752,6 +776,10 @@ packages:
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-validator-identifier@7.29.7':
+ resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-validator-option@7.25.9':
resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
engines: {node: '>=6.9.0'}
@@ -783,6 +811,11 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
+ '@babel/parser@7.29.7':
+ resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
'@babel/plugin-syntax-typescript@7.25.9':
resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
engines: {node: '>=6.9.0'}
@@ -853,6 +886,10 @@ packages:
resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
+ '@babel/types@7.29.7':
+ resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==}
+ engines: {node: '>=6.9.0'}
+
'@balena/dockerignore@1.0.2':
resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==}
@@ -1053,6 +1090,12 @@ packages:
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
+ '@effect/schema@0.75.5':
+ resolution: {integrity: sha512-TQInulTVCuF+9EIbJpyLP6dvxbQJMphrnRqgexm/Ze39rSjfhJuufF7XvU3SxTgg3HnL7B/kpORTJbHhlE6thw==}
+ deprecated: this package has been merged into the main effect package
+ peerDependencies:
+ effect: ^3.9.2
+
'@emnapi/core@1.5.0':
resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==}
@@ -1077,171 +1120,366 @@ packages:
cpu: [ppc64]
os: [aix]
+ '@esbuild/aix-ppc64@0.28.1':
+ resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
'@esbuild/android-arm64@0.25.0':
resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm64@0.28.1':
+ resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm@0.25.0':
resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
+ '@esbuild/android-arm@0.28.1':
+ resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-x64@0.25.0':
resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
+ '@esbuild/android-x64@0.28.1':
+ resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/darwin-arm64@0.25.0':
resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-arm64@0.28.1':
+ resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.25.0':
resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
+ '@esbuild/darwin-x64@0.28.1':
+ resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/freebsd-arm64@0.25.0':
resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-arm64@0.28.1':
+ resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.25.0':
resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.28.1':
+ resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/linux-arm64@0.25.0':
resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm64@0.28.1':
+ resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm@0.25.0':
resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
+ '@esbuild/linux-arm@0.28.1':
+ resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-ia32@0.25.0':
resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-ia32@0.28.1':
+ resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-loong64@0.25.0':
resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-loong64@0.28.1':
+ resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.25.0':
resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-mips64el@0.28.1':
+ resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.25.0':
resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-ppc64@0.28.1':
+ resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.25.0':
resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-riscv64@0.28.1':
+ resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-s390x@0.25.0':
resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-s390x@0.28.1':
+ resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-x64@0.25.0':
resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
+ '@esbuild/linux-x64@0.28.1':
+ resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
'@esbuild/netbsd-arm64@0.25.0':
resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
+ '@esbuild/netbsd-arm64@0.28.1':
+ resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
'@esbuild/netbsd-x64@0.25.0':
resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.28.1':
+ resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
'@esbuild/openbsd-arm64@0.25.0':
resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
+ '@esbuild/openbsd-arm64@0.28.1':
+ resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.25.0':
resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.28.1':
+ resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.28.1':
+ resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
'@esbuild/sunos-x64@0.25.0':
resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
+ '@esbuild/sunos-x64@0.28.1':
+ resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/win32-arm64@0.25.0':
resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-arm64@0.28.1':
+ resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-ia32@0.25.0':
resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-ia32@0.28.1':
+ resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-x64@0.25.0':
resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
+ '@esbuild/win32-x64@0.28.1':
+ resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@ethereumjs/binarytree@10.1.2':
+ resolution: {integrity: sha512-szugxzYrQHRvlhbu0BrcW/Kw7tg3K0b1HbKCdwRrFhvz80RbGfML2wqDDZhO5NyvHqWpS+Rt9q+qV9LxOHCP6w==}
+ engines: {node: '>=20'}
+
'@ethereumjs/common@10.1.0':
resolution: {integrity: sha512-zIHCy0i2LFmMDp+QkENyoPGxcoD3QzeNVhx6/vE4nJk4uWGNXzO8xJ2UC4gtGW4UJTAOXja8Z1yZMVeRc2/+Ew==}
+ '@ethereumjs/common@10.1.2':
+ resolution: {integrity: sha512-whWnhqAxwpDy4zWkM6rqMzb8nioZJpiys01N57+HDyanvK5IRzodV5tdMRDt66PD5vDjl2c9K5UcB039gU2Oyw==}
+
+ '@ethereumjs/evm@10.1.2':
+ resolution: {integrity: sha512-yIslek2pcsUQwBJFeeamN529hbNYBtrSuneSCMn4AM71WAx8vntgDbzYoAJsG/whyB9wOVvzHXubju1JXmaEag==}
+ engines: {node: '>=20'}
+
+ '@ethereumjs/mpt@10.1.2':
+ resolution: {integrity: sha512-dBlXpkP1ssp+AcUxsJUrY72LZuE1JQEp1AZn5mgmbBcd2Gwkpyi57q4zATlZbxrZUxp/K9UIidgqxQWcOCbo5g==}
+ engines: {node: '>=20'}
+
'@ethereumjs/rlp@10.1.0':
resolution: {integrity: sha512-r67BJbwilammAqYI4B5okA66cNdTlFzeWxPNJOolKV52ZS/flo0tUBf4x4gxWXBgh48OgsdFV1Qp5pRoSe8IhQ==}
engines: {node: '>=18'}
hasBin: true
+ '@ethereumjs/rlp@10.1.2':
+ resolution: {integrity: sha512-T5Zt6C2pd02Wd88Q9A5/UX+He1Q2Y1LntHxz/038tfbUMiqby4fYSSTLEDx+TEfJqw1BsJSBY/TSu6goUzlk+w==}
+ engines: {node: '>=20'}
+ hasBin: true
+
'@ethereumjs/rlp@5.0.2':
resolution: {integrity: sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==}
engines: {node: '>=18'}
hasBin: true
+ '@ethereumjs/statemanager@10.1.2':
+ resolution: {integrity: sha512-Pkm9VHF19wxT5c0jB+IDiQBv4W42o0wYSS1NLXeRea0D6CDBu0CLo9ihhnQgM368zXPl6JRbLS+YiG8tJkz4aA==}
+
+ '@ethereumjs/trie@6.2.1':
+ resolution: {integrity: sha512-MguABMVi/dPtgagK+SuY57rpXFP+Ghr2x+pBDy+e3VmMqUY+WGzFu1QWjBb5/iJ7lINk4CI2Uwsih07Nu9sTSg==}
+ engines: {node: '>=18'}
+
'@ethereumjs/tx@10.1.0':
resolution: {integrity: sha512-svG6pyzUZDpunafszf2BaolA6Izuvo8ZTIETIegpKxAXYudV1hmzPQDdSI+d8nHCFyQfEFbQ6tfUq95lNArmmg==}
engines: {node: '>=18'}
+ '@ethereumjs/tx@10.1.2':
+ resolution: {integrity: sha512-bAYK3YaYkk+auzxGfZSRVDbLHvboJNTx8/tV6jaqgPVlrA1QKEEADDEp/EGz+KI4NQmTGxEtXZ8tV/WjniRNww==}
+ engines: {node: '>=20'}
+
'@ethereumjs/util@10.1.0':
resolution: {integrity: sha512-GGTCkRu1kWXbz2JoUnIYtJBOoA9T5akzsYa91Bh+DZQ3Cj4qXj3hkNU0Rx6wZlbcmkmhQfrjZfVt52eJO/y2nA==}
engines: {node: '>=18'}
+ '@ethereumjs/util@10.1.2':
+ resolution: {integrity: sha512-UPBgXtHHfQugoXOSAoeG3jdmPbl37cwV9y3XqTPAnw8tJj8np14TPV2uc5lOs7C2LMF9Ubn66zyaiYxgwGppng==}
+ engines: {node: '>=20'}
+
+ '@ethereumjs/util@9.1.0':
+ resolution: {integrity: sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==}
+ engines: {node: '>=18'}
+
'@ethersproject/abi@5.8.0':
resolution: {integrity: sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==}
@@ -1296,6 +1534,31 @@ packages:
'@ethersproject/web@5.8.0':
resolution: {integrity: sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==}
+ '@evmts/zevm-darwin-arm64@0.0.0':
+ resolution: {integrity: sha512-g/vvU0csLbv01oFmhejGOj8UtkpQ3+qSMbr4X5gX1Pgq6+z1AWMTHXaKrxbS2NCVLzMW/W+NWs/3dzttTg6IFg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@evmts/zevm-darwin-x64@0.0.0':
+ resolution: {integrity: sha512-KU8FSn/0O9xmfhYr5H28bR6lqsLfKx53P1WU30v/dFNo2W3AgHeH/2MbJcERuO7iNz34nN8L7vnYhW9cL19ryg==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@evmts/zevm-linux-arm64-gnu@0.0.0':
+ resolution: {integrity: sha512-cXOB4bDR0sesJzoiPaNIXJ7vF9DsaDnBqqW4Hn7sszCY/pV4uL+CAkoZpMS6q/LEw43LJFuA65kLVABtz+e46g==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@evmts/zevm-linux-x64-gnu@0.0.0':
+ resolution: {integrity: sha512-a6tpXNchDZzI5mElMZ9XFgt6QRZMlBK2sntxe4cABfNTW7h4/Nwn8rJarfXxi7/jF6QqUuOj5wtWUtwiwThGYQ==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@evmts/zevm@0.0.0':
+ resolution: {integrity: sha512-YQgEGcHaVSHn1zYk6i3sPbO00UR/2XiBP4IKn2Qj0QWBEkjQZlPCOvxXtxqVF/HolPRKu5OxntcbTwfmivwc5Q==}
+
'@fastify/ajv-compiler@3.6.0':
resolution: {integrity: sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==}
@@ -1568,6 +1831,54 @@ packages:
'@js-sdsl/ordered-map@4.4.2':
resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==}
+ '@latticexyz/block-logs-stream@2.2.23':
+ resolution: {integrity: sha512-PbGw6l+bgBNY/DYCy2uMwpBNoK8Y5Qu2CDe17ZP15ATQLdilNEyYIju+867wonGieW7qfHoZRDIH3iqjLgC6zw==}
+ peerDependencies:
+ viem: 2.x
+
+ '@latticexyz/common@2.2.23':
+ resolution: {integrity: sha512-/+73uTmxce6sHg5vQXDPJHDf3kzGE7XOHUC5fxFEBfUO8dqlDzn6t2UTvuAbh9pWsbAPDFBUoILsod8cnPLduA==}
+ peerDependencies:
+ '@aws-sdk/client-kms': 3.x
+ asn1.js: 5.x
+ viem: 2.x
+ peerDependenciesMeta:
+ '@aws-sdk/client-kms':
+ optional: true
+ asn1.js:
+ optional: true
+
+ '@latticexyz/config@2.2.23':
+ resolution: {integrity: sha512-LB70yEbzf2/5ApTc9ftLugS2Ry7jSoy6oZdVPs15/Vt1kWeKSTsleJf+5vx87tMkcK52DSvjLqfo97EJHVpkUg==}
+ peerDependencies:
+ viem: 2.x
+
+ '@latticexyz/protocol-parser@2.2.23':
+ resolution: {integrity: sha512-ntZ2ILpMaSz/0Lte41WBooIEjmKiE+uo/nBB1EC8B/v/8KXEqblGn1qdhP053j27WeCsf6M442NVkN2S086qFA==}
+ peerDependencies:
+ viem: 2.x
+
+ '@latticexyz/schema-type@2.2.23':
+ resolution: {integrity: sha512-xcT2ku5+THLxQf+oMu5Lv6Q6OheI6Aeoc6TzlfVQSyXdRjReUTFXnSM1CXlG2wSrI8vEu+0A6/LdpEY8XcFlpw==}
+ peerDependencies:
+ viem: 2.x
+
+ '@latticexyz/store@2.2.23':
+ resolution: {integrity: sha512-xKa16GiCoFIj9ZhIyaZmO9v2RAHkQzJqDSF8nuMI65RHmQIMBGhW0g7Qt+Q5FJX7CJA+LziqzNB9YGU9De7Blw==}
+ peerDependencies:
+ viem: 2.x
+ peerDependenciesMeta:
+ viem:
+ optional: true
+
+ '@latticexyz/world@2.2.23':
+ resolution: {integrity: sha512-H0MBsUFpim/zwfZbUfon5uadexzFVJlMiCS6ER9m8L1U4WY0iIEYFmT7EUkQK+NAxbF12119v1+GdW3pPBCmQA==}
+ peerDependencies:
+ viem: 2.x
+ peerDependenciesMeta:
+ viem:
+ optional: true
+
'@ledgerhq/client-ids@0.2.1':
resolution: {integrity: sha512-IjXJuqoGv2lfTB8QgSMpRDt+C2iOFmvIBxZDHs5XAEEPm1yNsgIB5m+HuzECk/Qll7FyB9My13ueayn7dBZxUQ==}
@@ -1763,6 +2074,9 @@ packages:
'@noble/curves@1.2.0':
resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==}
+ '@noble/curves@1.4.2':
+ resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
+
'@noble/curves@1.8.2':
resolution: {integrity: sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==}
engines: {node: ^14.21.3 || >=16}
@@ -1783,10 +2097,18 @@ packages:
resolution: {integrity: sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==}
engines: {node: '>= 20.19.0'}
+ '@noble/curves@2.2.0':
+ resolution: {integrity: sha512-T/BoHgFXirb0ENSPBquzX0rcjXeM6Lo892a2jlYJkqk83LqZx0l1Of7DzlKJ6jkpvMrkHSnAcgb5JegL8SeIkQ==}
+ engines: {node: '>= 20.19.0'}
+
'@noble/hashes@1.3.2':
resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==}
engines: {node: '>= 16'}
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
'@noble/hashes@1.7.2':
resolution: {integrity: sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==}
engines: {node: ^14.21.3 || >=16}
@@ -1799,6 +2121,10 @@ packages:
resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==}
engines: {node: '>= 20.19.0'}
+ '@noble/hashes@2.2.0':
+ resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==}
+ engines: {node: '>= 20.19.0'}
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -2006,6 +2332,9 @@ packages:
resolution: {integrity: sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==}
engines: {node: '>=14'}
+ '@openzeppelin/contracts@5.6.1':
+ resolution: {integrity: sha512-Ly6SlsVJ3mj+b18W3R8gNufB7dTICT105fJhodGAGgyC2oqnBAhqSiNDJ8V8DLY05cCz81GLI0CU5vNYA1EC/w==}
+
'@oven/bun-darwin-aarch64@1.2.22':
resolution: {integrity: sha512-YCJkV2/vO5VVTQdwxLQrkW/yU4FAMWd3AXU3Z+TfoeYkHye5d2dIaBRXEPrOzrq1LQ2esN6ZhGfwYu2lVMTVRw==}
cpu: [arm64]
@@ -2174,11 +2503,23 @@ packages:
'@pimlico/opentelemetry-instrumentation-viem@0.0.4':
resolution: {integrity: sha512-FlFIXU7CVgfDAn0ay2JeV3F6mO7pLR6UgP/DZMx/gN7RZ/HV2rW+ibk1QmcKAF7NGPk5II8vYyu02irb0u158A==}
+ '@pinojs/redact@0.4.0':
+ resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
+
'@playwright/test@1.55.1':
resolution: {integrity: sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==}
engines: {node: '>=18'}
hasBin: true
+ '@ponder/utils@0.2.18':
+ resolution: {integrity: sha512-pWacQuohfKlKO440zC39C1l6AH+Vx18mca0cPkxM0YnrB70px5hEwLKrc3fU4DMu72j4pljy/Mvfm95FBouYjw==}
+ peerDependencies:
+ typescript: '>=5.0.4'
+ viem: '>=2'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
'@prettier/sync@0.6.1':
resolution: {integrity: sha512-yF9G8vK/LYUTF3Cijd7VC9La3b20F20/J/fgoR4H0B8JGOWnZVZX6+I6+vODPosjmMcpdlUV+gUqJQZp3kLOcw==}
peerDependencies:
@@ -3035,18 +3376,27 @@ packages:
cpu: [x64]
os: [win32]
+ '@scure/base@1.1.9':
+ resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==}
+
'@scure/base@1.2.5':
resolution: {integrity: sha512-9rE6EOVeIQzt5TSu4v+K523F8u6DhBsoZWPGKlnCshhlDhy0kJzUX4V+tr2dWmzF1GdekvThABoEQBGBQI7xZw==}
'@scure/base@2.0.0':
resolution: {integrity: sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==}
+ '@scure/bip32@1.4.0':
+ resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==}
+
'@scure/bip32@1.7.0':
resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==}
'@scure/bip32@2.0.1':
resolution: {integrity: sha512-4Md1NI5BzoVP+bhyJaY3K6yMesEFzNS1sE/cP+9nuvE7p/b0kx9XbpDHHFl8dHtufcbdHRUUQdRqLIPHN/s7yA==}
+ '@scure/bip39@1.3.0':
+ resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==}
+
'@scure/bip39@1.6.0':
resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==}
@@ -3398,9 +3748,18 @@ packages:
peerDependencies:
typescript: '>=5.3.3'
+ '@solidity-parser/parser@0.16.2':
+ resolution: {integrity: sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==}
+
+ '@solidity-parser/parser@0.17.0':
+ resolution: {integrity: sha512-Nko8R0/kUo391jsEHHxrGM07QFdnPGvlmox4rmH0kNiNAashItAilhy4Mv4pK5gQmW5f4sXAF58fwJbmlkGcVw==}
+
'@standard-schema/spec@1.0.0':
resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
+ '@standard-schema/spec@1.1.0':
+ resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
+
'@standard-schema/utils@0.3.0':
resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==}
@@ -3410,6 +3769,7 @@ packages:
'@stellar/stellar-base@14.0.4':
resolution: {integrity: sha512-UbNW6zbdOBXJwLAV2mMak0bIC9nw3IZVlQXkv2w2dk1jgCbJjy3oRVC943zeGE5JAm0Z9PHxrIjmkpGhayY7kw==}
engines: {node: '>=20.0.0'}
+ deprecated: This package is now rolled into @stellar/stellar-sdk. Please use @stellar/stellar-sdk to continue receiving updates and support.
'@stellar/stellar-sdk@14.2.0':
resolution: {integrity: sha512-7nh2ogzLRMhfkIC0fGjn1LHUzk3jqVw8tjAuTt5ADWfL9CSGBL18ILucE9igz2L/RU2AZgeAvhujAnW91Ut/oQ==}
@@ -3515,69 +3875,242 @@ packages:
peerDependencies:
vite: 6.4.1
- '@tevm/chains@0.0.1':
- resolution: {integrity: sha512-1/+/pasF8CZkLJkBnebmgkBHDEJ5vtpJXQ2S8B7rqM4bLQhbmOWva+J9CiKc56C2Z++Gvy07W7XQpc4dUk1X3A==}
+ '@tevm/actions@1.0.0-rc.151':
+ resolution: {integrity: sha512-A1ICMc83VK/cauNu/47QPg5pj5vcqvNjl+5JdXJMJKFTkisYqTOkwujoh2tabiylCdkOQL0LATP+BmUt4xPUuA==}
peerDependencies:
- typescript: ^5
+ viem: ^2.49.3
+ zod: ^4.1.11
- '@tevm/voltaire@0.1.40':
- resolution: {integrity: sha512-4SevKepbFYqBpguJIpX9tIf8mQ1XtAvtay7JTPpGWgJ2agPM4d78eKDBM3tL3eeeLDN1MgvReduJsIBqIid8qg==}
- engines: {node: '>=18'}
+ '@tevm/address@1.0.0-rc.151':
+ resolution: {integrity: sha512-w86dds+px4s/KHfbgxYheyuEk+ZPCayzLWIUzEU/vkvpR7hXLwbolFmogncBPv4zfFOB95ZnopVWxyP2TEbFug==}
peerDependencies:
- abitype: ^1.1.1
- peerDependenciesMeta:
- abitype:
- optional: true
+ viem: ^2.49.3
- '@tootallnate/quickjs-emscripten@0.23.0':
- resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
+ '@tevm/base-bundler@1.0.0-rc.151':
+ resolution: {integrity: sha512-d0X95IYnQOQGRYZ7JoFXwQYsmF1ZEtRVtppbNZBsfHqrL2fi4iuvVZBmoFPxROANZh/Seo3/Nlk3xa0bA0LAMw==}
- '@trezor/analytics@1.5.0':
- resolution: {integrity: sha512-evILW5XJEmfPlf0TY1duOLtGJ47pdGeSKVE3P75ODEUsRNxtPVqlkOUBPmYpCxPnzS8XDmkatT8lf9/DF0G6nA==}
- peerDependencies:
- tslib: ^2.6.2
+ '@tevm/block@1.0.0-rc.151':
+ resolution: {integrity: sha512-4O4+MkAMZ7p9wYwPJYgZBO3lrdQtD5pF0QQgB0ZeJMsibIPw32cVKa1Kfcn1yiI6HjKwmthbLcCXmofXTsBFOQ==}
- '@trezor/blockchain-link-types@1.5.0':
- resolution: {integrity: sha512-wD6FKKxNr89MTWYL+NikRkBcWXhiWNFR0AuDHW6GHmlCEHhKu/hAvQtcER8X5jt/Wd0hSKNZqtHBXJ1ZkpJ6rg==}
+ '@tevm/blockchain@1.0.0-rc.151':
+ resolution: {integrity: sha512-eYmxpMXIanrFalOqK0Zk9ZaYhEnws41p+eGSk54lEgudGbPEFTkKEJb4dK8+gAHIxEu5SYcUFdTXLHtfTVezyA==}
peerDependencies:
- tslib: ^2.6.2
+ viem: ^2.49.3
- '@trezor/blockchain-link-utils@1.5.1':
- resolution: {integrity: sha512-2tDGLEj5jzydjsJQONGTWVmCDDy6FTZ4ytr1/2gE6anyYEJU8MbaR+liTt3UvcP5jwZTNutwYLvZixRfrb8JpA==}
+ '@tevm/bun-plugin@1.0.0-rc.151':
+ resolution: {integrity: sha512-YYbFClA/nrxyMO7aLP794FTMDeGM0JxpA3bnfE5vY5IDKubG3Dy4N7joih2DOF47K7NFDRv2OAsR6anToFlDYA==}
+
+ '@tevm/bundler-cache@1.0.0-rc.151':
+ resolution: {integrity: sha512-EvB5i73kc4KYKHmtBxhPSsVKmtQL0bf6iDExjmhZC/lTzSh6fxlZh+pbtx08Pdtqlx7K7b1GjQKy5wjO67YYxQ==}
+
+ '@tevm/chains@0.0.1':
+ resolution: {integrity: sha512-1/+/pasF8CZkLJkBnebmgkBHDEJ5vtpJXQ2S8B7rqM4bLQhbmOWva+J9CiKc56C2Z++Gvy07W7XQpc4dUk1X3A==}
peerDependencies:
- tslib: ^2.6.2
+ typescript: ^5
- '@trezor/blockchain-link@2.6.1':
- resolution: {integrity: sha512-SPwxkihOMI0o79BOy0RkfgVL2meuJhIe1yWHCeR8uoqf5KGblUyeXxvNCy6w8ckJ9LRpM1+bZhsUODuNs3083Q==}
+ '@tevm/client-types@1.0.0-rc.151':
+ resolution: {integrity: sha512-w4aNcZY0cRP0gVqOUwh15jx8bBayxWRq3pSBpM65a/UfiTPKZsgoE2/CX/wITh4XEnYW+gYZToQ7GYswiZuxMg==}
+
+ '@tevm/common@1.0.0-rc.151':
+ resolution: {integrity: sha512-fcDCjn06lZRebXl2N5DB1yOfEob0oJVaOslWX0SCWP//C/3z2aFaJns2RkGU+bpzdkK/K55lJq7/EOyX1rv7hw==}
peerDependencies:
- tslib: ^2.6.2
+ viem: ^2.49.3
- '@trezor/connect-analytics@1.4.0':
- resolution: {integrity: sha512-hy2J2oeIhRC/e1bOWXo5dsVMVnDwO2UKnxhR6FD8PINR3jgM6PWAXc6k33WJsBcyiTzwMP7/xPysLcgNJH5o4w==}
+ '@tevm/compiler@1.0.0-rc.151':
+ resolution: {integrity: sha512-qm/19mpaLJ+W5sRNYxSEbZ2RpioRF+w9fjbIFTh+HMxvDjoh9W71PtzqE4hi3+Dg5ro8yzC91Hg6TG7mHfCCIg==}
+
+ '@tevm/config@1.0.0-rc.151':
+ resolution: {integrity: sha512-u1iUCojpPWywfRiukZttKa9TQUEwM1uITt3zkBlFMz1jDdZf9E5+sjW4GgbYQdD9eOZt49WCkvJg7VWkRTz+QQ==}
+
+ '@tevm/consensus@1.0.0-rc.152':
+ resolution: {integrity: sha512-YtWQ5hWv05v7FY+QGyYS/l3jLnZWYSS8DV72lIXJ9mrTj9kLMadJcAIDB6MyaZcqeRmVr2WNETCGhOauAGs8GQ==}
+
+ '@tevm/contract@1.0.0-rc.151':
+ resolution: {integrity: sha512-e3e1V9AngTGsZq2/a1vx+lJpY3IL7ITLhI799kVjLCvqZlNs9/l9EEt8NSv8FpU1+boM2HZcpsRclU/9IftJYA==}
+
+ '@tevm/decorators@1.0.0-rc.151':
+ resolution: {integrity: sha512-gw/sZXtFRp/BjAJT4He2MbsCmrrNfH3AXZgQ36KiA71Vure6xI6ecrZauknXa3GqquX2tglusFg8FG7J3ifTpw==}
peerDependencies:
- tslib: ^2.6.2
+ viem: ^2.49.3
- '@trezor/connect-common@0.5.0':
- resolution: {integrity: sha512-WE71iaFcWmfQxDCiTUNynj2DccRgUiLBJ+g3nrqCBJqEYzu+cD6eZ5k/OLtZ3hfh5gyB5EQwXdGvRT07iNdxAA==}
+ '@tevm/effect@1.0.0-rc.151':
+ resolution: {integrity: sha512-9yayiyXSQOaF6ThbBVqRIXZ6VmEdrAPvQgclyFnNt2UOt5RmrusakVptPLiZllMzANb6LnFxZ9pjWLB1ZsnOPQ==}
+
+ '@tevm/errors@1.0.0-rc.151':
+ resolution: {integrity: sha512-F+l837Rl3d+GcvSbQw1/QooSmqU4lYmB94MSlZfH6tQiomGSKcVrI+G4PDqvZQJzVYPbIHgpZsD/DKA+eE4p5g==}
+
+ '@tevm/esbuild-plugin@1.0.0-rc.151':
+ resolution: {integrity: sha512-/bzaQ1BejzsO/yVARb1S5Z1B3kjL0lC4PNHIYi0a/RbSpMmJzOzL1FqSiSvXCQ7ID7peJEEWPiK2XHzDk6+Tag==}
+
+ '@tevm/evm@1.0.0-rc.151':
+ resolution: {integrity: sha512-syg7wCmMd4cktBK/pgipjsYuStSZhN54A1BGeTKu8yBYcQh+baL5uwz/MEk/pn9+UIYzo2Q7qbdVYPQD3wpfyw==}
+
+ '@tevm/http-client@1.0.0-rc.151':
+ resolution: {integrity: sha512-BTHBxCkg1gaSZx6UOpab+oLanXCw2ikxK67HSI/xYuwL3YpigDNG7BmdYSffL81G6tx66Lj1DgZ5M9AQbY6p5A==}
peerDependencies:
- tslib: ^2.6.2
+ viem: ^2.49.3
- '@trezor/connect-web@9.7.1':
- resolution: {integrity: sha512-L9rv8R4bOwXoZlbWr8NnsdR2bYjehNY+eEog7fhOPzcRqW30+P06Ari1ZzOMeg469s4GlwvkVA34wqSGxLeelQ==}
+ '@tevm/jsonrpc@1.0.0-rc.151':
+ resolution: {integrity: sha512-3oCXYzDpBDWRFMK/fFI+othvFFADmbBUiU9IxEN/KhV019kB3+zfQs7g7NFqey5m4c90pEAB//M16RKT9HvXdQ==}
peerDependencies:
- tslib: ^2.6.2
+ viem: ^2.49.3
- '@trezor/connect@9.7.1':
- resolution: {integrity: sha512-W2ym0bs4FVmXByEr9gANBp+bRErzNcmqqqYzSJLOVkawxikqYXag2aCpdiXU3LlZbFbhFhIsT/fpDLfwiLRySA==}
+ '@tevm/logger@1.0.0-rc.151':
+ resolution: {integrity: sha512-asE32mndV+Eb8tO8TbjgAeELiJIu4dDyjpnsBJJ7vuX9mYDyg899E27bXM9ByvzhpCmKbmufmRstAeg+xXjUGA==}
+
+ '@tevm/memory-client@1.0.0-rc.151':
+ resolution: {integrity: sha512-l7SG85t5OLZv17Gu73pVUnG+Y7D+WCp5tkYYiMn0INtbHG5q3MU1iaeubXcNvSSyZAxxwHtX/I7J9X5I7GL/tA==}
peerDependencies:
- tslib: ^2.6.2
+ viem: ^2.49.3
- '@trezor/crypto-utils@1.2.0':
- resolution: {integrity: sha512-9i1NrfW1IE6JO910ut7xrx4u5LxE++GETbpJhWLj4P5xpuGDDSDLEn/MXaYisls2DpE897aOrGPaa1qyt8V6tw==}
+ '@tevm/node@1.0.0-rc.151':
+ resolution: {integrity: sha512-lJLaX1QARvwzWhG6ly/l1ZP6jK5XnBmARUM9dUYCP+9S/owixjd7CrI4k+AVCVBEi9yajT45o4j2qa0Opcl+BQ==}
peerDependencies:
- tslib: ^2.6.2
+ viem: ^2.49.3
- '@trezor/device-authenticity@1.1.1':
+ '@tevm/precompiles@1.0.0-rc.151':
+ resolution: {integrity: sha512-mABFuxsZ2OhQPKIMAocwkT42cD1G9OI3vBGuQ0dbpheHdbm7hmClmazySd1fV22exBcC+IIhgJYdtOQT3mozCw==}
+
+ '@tevm/predeploys@1.0.0-rc.151':
+ resolution: {integrity: sha512-f82mrrr0Ast4+vw1S4XfIv38em70smo4K40CGTFJ7w3a2rRtXdwMKnJNTaucNdnhi4yj6Sih4AMnIK/z+g2M3Q==}
+
+ '@tevm/receipt-manager@1.0.0-rc.151':
+ resolution: {integrity: sha512-gDoNRMSzQFtI8QT5A0QX3vUnpEeXLeaeIyyKRBgKPC2PfMYmyLz4RK8r27v4XJSQJPyiUvYVzKL9HA7hH+QL0Q==}
+
+ '@tevm/resolutions@1.0.0-rc.151':
+ resolution: {integrity: sha512-KYQ9tokr523usldSLElPqCzbw1FmL/G4RlAfVR7EndTP+kEIo9iDh3KdeZbXlQHgkYNHpIqY6Smm5qQHRtnntg==}
+
+ '@tevm/rollup-plugin@1.0.0-rc.151':
+ resolution: {integrity: sha512-hTc/s4Zki9ibWLF2BsY6Z5WFRdvSlFg2w2hRzHNl9YqmxGoKyFsFLKpTXWhSUdAXWKYSO6CreRWHOIxdiHM3Xw==}
+
+ '@tevm/rspack-plugin@1.0.0-rc.151':
+ resolution: {integrity: sha512-FAjBW/o667yGGcW0LSuskQcSPj/QqZkuDM4jb3lMWZwPUh50wKBloxouodFMvg7DJlWbUb/jTycEmwNw08QsTw==}
+
+ '@tevm/runtime@1.0.0-rc.151':
+ resolution: {integrity: sha512-eZi4g01PPmTIeS6uBfJQX31YxLEXE3LoRV2z63XcKBrEpe8WwAp/M4Ob90+9+qxtd4hS8mv0CkX1JE5eLhTroQ==}
+
+ '@tevm/server@1.0.0-rc.151':
+ resolution: {integrity: sha512-3BBNPReFgKUnycYzQs0YdgnQ+NXXrTyqSUjoPel6MEic4Iaq/VOqpzq16ykgK+zhryEkVloFAz7oSd7QXOlypw==}
+
+ '@tevm/solc@1.0.0-rc.151':
+ resolution: {integrity: sha512-LYNDMNz9JyS+NBMQJJqeSbzaazrDnJ5r2iFtTISFmdGHCDFoXJVNgCMx5ZmpvhrE0XOPueZQGUri1nV25Jsecg==}
+
+ '@tevm/state@1.0.0-rc.151':
+ resolution: {integrity: sha512-aSgXdKI34+w/8MaQcjZEg0SSt/zjA+BJkYMnekf3LEIvUaGigvjwEODnxECmq6+yLFoQzQ5vcwFQ1zFiCDX0pQ==}
+ peerDependencies:
+ viem: ^2.49.3
+
+ '@tevm/sync-storage-persister@1.0.0-rc.151':
+ resolution: {integrity: sha512-w8yYpE9CUyuR9YMLWXIA+5f4ujtXrvx59STW8iwxzm6Ag4/QfJEf6Bna/DwUSLmoh4xeYrZqrQMYVQDDWvJE5A==}
+
+ '@tevm/test-matchers@1.0.0-rc.151':
+ resolution: {integrity: sha512-NQalCXcXqGLbi37RuGq6dpEQiRBmqMx4E6kToZPnIo722PrEFa8enTj+ddg+eodMk1CHLaxP7XcAtfyPAgXp2Q==}
+
+ '@tevm/test-utils@1.0.0-rc.151':
+ resolution: {integrity: sha512-AwtMQyxuDi12H1isX6B0MA9gliK+3N5XOfpXFEFydXGiGckSg7i9QRGJjkG5zS6Tw/P0bq9f1VOXmkqfzVYBYA==}
+
+ '@tevm/ts-plugin@1.0.0-rc.151':
+ resolution: {integrity: sha512-MkglYXhuoQ3W8R167JZvR/aOoZVzQ+7/dZvGzpkfXyuG+vuxoYhMRt+MWesJrBwyr3+siCvJh6lolBMkDopHew==}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.0.0'
+
+ '@tevm/tsconfig@1.0.0-rc.151':
+ resolution: {integrity: sha512-N0RFm8DhMLAk3T9EExLroDcY8TVfULzJKDQ1ENy5mVfWXwsssIeoKbOk46sx1L9U9LQt1If2w0MSCcNbo4ihFg==}
+
+ '@tevm/tsupconfig@1.0.0-rc.151':
+ resolution: {integrity: sha512-O/6V2iZaA95REre+mZ+FmzYkg82A8m0jt0OvZ3/Oc9VSvGPxaaePVymg1u/nCRCR5tolX7zuags4xKDE8FB1FA==}
+
+ '@tevm/tx@1.0.0-rc.151':
+ resolution: {integrity: sha512-dxHBYtEvGf+8Q4oAirJI6X2pUeueQ6/FPWjbA2cKxRqtEv9+eMCSRcc+wJbLrSnQX0obTgirWxrLqGhfni0YuA==}
+
+ '@tevm/txpool@1.0.0-rc.151':
+ resolution: {integrity: sha512-x01SVbqIzYk2oHi/k33nDN33/CCfPse+aq83DIZQ2nVOovhAijGry6rVewxj3yogY23WITluahxiWYndw0J7WA==}
+
+ '@tevm/unplugin@1.0.0-rc.151':
+ resolution: {integrity: sha512-vV2mxwehVAaVF7F/q0eIKdgfOa1p9U4/ncaeZV/cQSdA8VuW/i3fTIxLxb2wGcifaMNygZCJIjF1fyE9hdnRFw==}
+
+ '@tevm/utils@1.0.0-rc.151':
+ resolution: {integrity: sha512-lwd2Ue0KY9sI1TYLc+eAwE97XHLIrgDTtckWgoGwWfxeeCbI0T1nh6g3Dkm8WYOK11nzqxZCx/6rFV8TNLYU9A==}
+ peerDependencies:
+ viem: ^2.49.3
+
+ '@tevm/viem@1.0.0-rc.151':
+ resolution: {integrity: sha512-9ur1qqgo/Cvv7xri25+PtL57yqXsWMVIdLZmOLoLbPggkRd8xv31weaYd91LrgvxziuRvALr30Ex+q9qOrNfhg==}
+ peerDependencies:
+ viem: ^2.49.3
+
+ '@tevm/vite-plugin@1.0.0-rc.151':
+ resolution: {integrity: sha512-5J3jTIj9XsU44w1MzJXk5MJQneV0pbErjf3aH/RlYAie4VUG9q95Lim2hvoOPTavwN3bp3JWW7qHnGDhTPcXLw==}
+
+ '@tevm/vm@1.0.0-rc.151':
+ resolution: {integrity: sha512-o7mjWa29//tsrauRuBS31YfyDFp++rneTEPUsuYmNNAD5356KGwqHA8eZuDsehXW7KBhuhtzRMxa2SuAAj8+Fg==}
+ peerDependencies:
+ viem: ^2.49.3
+
+ '@tevm/voltaire@0.1.40':
+ resolution: {integrity: sha512-4SevKepbFYqBpguJIpX9tIf8mQ1XtAvtay7JTPpGWgJ2agPM4d78eKDBM3tL3eeeLDN1MgvReduJsIBqIid8qg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ abitype: ^1.1.1
+ peerDependenciesMeta:
+ abitype:
+ optional: true
+
+ '@tevm/webpack-plugin@1.0.0-rc.151':
+ resolution: {integrity: sha512-6/3IMmTU932xIrp9oaQZDM/7pQIbfipxSpwjq1rLxy/d0RUOiWiaohmy0vvJBl0s4rRnT+nT5rTn4fJ+lCN04Q==}
+ peerDependencies:
+ webpack: '>5.0.0'
+
+ '@tootallnate/quickjs-emscripten@0.23.0':
+ resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
+
+ '@trezor/analytics@1.5.0':
+ resolution: {integrity: sha512-evILW5XJEmfPlf0TY1duOLtGJ47pdGeSKVE3P75ODEUsRNxtPVqlkOUBPmYpCxPnzS8XDmkatT8lf9/DF0G6nA==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/blockchain-link-types@1.5.0':
+ resolution: {integrity: sha512-wD6FKKxNr89MTWYL+NikRkBcWXhiWNFR0AuDHW6GHmlCEHhKu/hAvQtcER8X5jt/Wd0hSKNZqtHBXJ1ZkpJ6rg==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/blockchain-link-utils@1.5.1':
+ resolution: {integrity: sha512-2tDGLEj5jzydjsJQONGTWVmCDDy6FTZ4ytr1/2gE6anyYEJU8MbaR+liTt3UvcP5jwZTNutwYLvZixRfrb8JpA==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/blockchain-link@2.6.1':
+ resolution: {integrity: sha512-SPwxkihOMI0o79BOy0RkfgVL2meuJhIe1yWHCeR8uoqf5KGblUyeXxvNCy6w8ckJ9LRpM1+bZhsUODuNs3083Q==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/connect-analytics@1.4.0':
+ resolution: {integrity: sha512-hy2J2oeIhRC/e1bOWXo5dsVMVnDwO2UKnxhR6FD8PINR3jgM6PWAXc6k33WJsBcyiTzwMP7/xPysLcgNJH5o4w==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/connect-common@0.5.0':
+ resolution: {integrity: sha512-WE71iaFcWmfQxDCiTUNynj2DccRgUiLBJ+g3nrqCBJqEYzu+cD6eZ5k/OLtZ3hfh5gyB5EQwXdGvRT07iNdxAA==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/connect-web@9.7.1':
+ resolution: {integrity: sha512-L9rv8R4bOwXoZlbWr8NnsdR2bYjehNY+eEog7fhOPzcRqW30+P06Ari1ZzOMeg469s4GlwvkVA34wqSGxLeelQ==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/connect@9.7.1':
+ resolution: {integrity: sha512-W2ym0bs4FVmXByEr9gANBp+bRErzNcmqqqYzSJLOVkawxikqYXag2aCpdiXU3LlZbFbhFhIsT/fpDLfwiLRySA==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/crypto-utils@1.2.0':
+ resolution: {integrity: sha512-9i1NrfW1IE6JO910ut7xrx4u5LxE++GETbpJhWLj4P5xpuGDDSDLEn/MXaYisls2DpE897aOrGPaa1qyt8V6tw==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/device-authenticity@1.1.1':
resolution: {integrity: sha512-WlYbQgc5l0pWUVP9GkMp+Oj3rVAqMKsWF0HyxujoymNjEB7rLTl2hXs+GFjlz7VnldaSslECc6EBex/eQiNOnA==}
'@trezor/device-utils@1.2.0':
@@ -3810,6 +4343,9 @@ packages:
'@types/node@24.5.2':
resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==}
+ '@types/node@25.9.5':
+ resolution: {integrity: sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg==}
+
'@types/react-dom@19.0.3':
resolution: {integrity: sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==}
peerDependencies:
@@ -3818,6 +4354,12 @@ packages:
'@types/react@19.0.8':
resolution: {integrity: sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw==}
+ '@types/readable-stream@2.3.15':
+ resolution: {integrity: sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==}
+
+ '@types/retry@0.12.1':
+ resolution: {integrity: sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==}
+
'@types/shimmer@1.2.0':
resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==}
@@ -3855,6 +4397,126 @@ packages:
resolution: {integrity: sha512-RnlSOPh14QbopGCApgkSx5UBgGda5MX1cHqp2fsqfiDyCwGL/m1jaeB9fzu7didVS81LQqGZZuxFBcg8YU8EVw==}
hasBin: true
+ '@typescript/typescript-aix-ppc64@7.0.2':
+ resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@typescript/typescript-darwin-arm64@7.0.2':
+ resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@typescript/typescript-darwin-x64@7.0.2':
+ resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@typescript/typescript-freebsd-arm64@7.0.2':
+ resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@typescript/typescript-freebsd-x64@7.0.2':
+ resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@typescript/typescript-linux-arm64@7.0.2':
+ resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@typescript/typescript-linux-arm@7.0.2':
+ resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@typescript/typescript-linux-loong64@7.0.2':
+ resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@typescript/typescript-linux-mips64el@7.0.2':
+ resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@typescript/typescript-linux-ppc64@7.0.2':
+ resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@typescript/typescript-linux-riscv64@7.0.2':
+ resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@typescript/typescript-linux-s390x@7.0.2':
+ resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==}
+ engines: {node: '>=16.20.0'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@typescript/typescript-linux-x64@7.0.2':
+ resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@typescript/typescript-netbsd-arm64@7.0.2':
+ resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@typescript/typescript-netbsd-x64@7.0.2':
+ resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@typescript/typescript-openbsd-arm64@7.0.2':
+ resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@typescript/typescript-openbsd-x64@7.0.2':
+ resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@typescript/typescript-sunos-x64@7.0.2':
+ resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@typescript/typescript-win32-arm64@7.0.2':
+ resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@typescript/typescript-win32-x64@7.0.2':
+ resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [win32]
+
'@typescript/vfs@1.6.1':
resolution: {integrity: sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==}
peerDependencies:
@@ -3862,6 +4524,7 @@ packages:
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+ deprecated: Potential CWE-502 - Update to 1.3.1 or higher
'@vanilla-extract/babel-plugin-debug-ids@1.2.2':
resolution: {integrity: sha512-MeDWGICAF9zA/OZLOKwhoRlsUW+fiMwnfuOAqFVohL31Agj7Q/RBWAYweqjHLgFBCsdnr6XIfwjJnmb2znEWxw==}
@@ -3898,20 +4561,20 @@ packages:
peerDependencies:
vite: 6.4.1
- '@vitest/coverage-v8@4.0.15':
- resolution: {integrity: sha512-FUJ+1RkpTFW7rQITdgTi93qOCWJobWhBirEPCeXh2SW2wsTlFxy51apDz5gzG+ZEYt/THvWeNmhdAoS9DTwpCw==}
+ '@vitest/coverage-v8@4.1.10':
+ resolution: {integrity: sha512-IM49HmthevbgAO4anp1hwtoT9wYe59w0LR00gr+eagHE+ZJ5lK4sLPeO0ubgoJcwLk6dehU3R24N+FbEEKDc8g==}
peerDependencies:
- '@vitest/browser': 4.0.15
- vitest: 4.0.15
+ '@vitest/browser': 4.1.10
+ vitest: 4.1.10
peerDependenciesMeta:
'@vitest/browser':
optional: true
- '@vitest/expect@4.0.15':
- resolution: {integrity: sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w==}
+ '@vitest/expect@4.1.10':
+ resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==}
- '@vitest/mocker@4.0.15':
- resolution: {integrity: sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==}
+ '@vitest/mocker@4.1.10':
+ resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==}
peerDependencies:
msw: ^2.4.9
vite: 6.4.1
@@ -3921,20 +4584,20 @@ packages:
vite:
optional: true
- '@vitest/pretty-format@4.0.15':
- resolution: {integrity: sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==}
+ '@vitest/pretty-format@4.1.10':
+ resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==}
- '@vitest/runner@4.0.15':
- resolution: {integrity: sha512-+A+yMY8dGixUhHmNdPUxOh0la6uVzun86vAbuMT3hIDxMrAOmn5ILBHm8ajrqHE0t8R9T1dGnde1A5DTnmi3qw==}
+ '@vitest/runner@4.1.10':
+ resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==}
- '@vitest/snapshot@4.0.15':
- resolution: {integrity: sha512-A7Ob8EdFZJIBjLjeO0DZF4lqR6U7Ydi5/5LIZ0xcI+23lYlsYJAfGn8PrIWTYdZQRNnSRlzhg0zyGu37mVdy5g==}
+ '@vitest/snapshot@4.1.10':
+ resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==}
- '@vitest/spy@4.0.15':
- resolution: {integrity: sha512-+EIjOJmnY6mIfdXtE/bnozKEvTC4Uczg19yeZ2vtCz5Yyb0QQ31QWVQ8hswJ3Ysx/K2EqaNsVanjr//2+P3FHw==}
+ '@vitest/spy@4.1.10':
+ resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==}
- '@vitest/utils@4.0.15':
- resolution: {integrity: sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==}
+ '@vitest/utils@4.1.10':
+ resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==}
'@webassemblyjs/ast@1.14.1':
resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
@@ -3994,6 +4657,15 @@ packages:
'@xtuc/long@4.2.2':
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+ abitype@0.7.1:
+ resolution: {integrity: sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==}
+ peerDependencies:
+ typescript: '>=4.9.4'
+ zod: ^3 >=3.19.1
+ peerDependenciesMeta:
+ zod:
+ optional: true
+
abitype@0.8.11:
resolution: {integrity: sha512-bM4v2dKvX08sZ9IU38IN5BKmN+ZkOSd2oI4a9f0ejHYZQYV6cDr7j+d95ga0z2XHG36Y4jzoG5Z7qDqxp7fi/A==}
peerDependencies:
@@ -4003,6 +4675,17 @@ packages:
zod:
optional: true
+ abitype@1.0.9:
+ resolution: {integrity: sha512-oN0S++TQmlwWuB+rkA6aiEefLv3SP+2l/tC5mux/TLj6qdA6rF15Vbpex4fHovLsMkwLwTIRj8/Q8vXCS3GfOg==}
+ peerDependencies:
+ typescript: '>=5.0.4'
+ zod: ^3 >=3.22.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ zod:
+ optional: true
+
abitype@1.2.3:
resolution: {integrity: sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==}
peerDependencies:
@@ -4014,6 +4697,17 @@ packages:
zod:
optional: true
+ abitype@1.3.0:
+ resolution: {integrity: sha512-fk6Te+bojIFrMvMZrnOO+SxCB+RUksTGOzq/60ZRvs1L+BVzvi2bqt9L3W/17ZLdZsyM1FuYf65P5nlmoiH1Bg==}
+ peerDependencies:
+ typescript: '>=5.0.4'
+ zod: ^3.22.0 || ^4.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ zod:
+ optional: true
+
abort-controller@3.0.0:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
engines: {node: '>=6.5'}
@@ -4101,6 +4795,9 @@ packages:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
+ antlr4ts@0.5.0-alpha.4:
+ resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==}
+
any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
@@ -4125,6 +4822,9 @@ packages:
arkregex@0.0.4:
resolution: {integrity: sha512-biS/FkvSwQq59TZ453piUp8bxMui11pgOMV9WHAnli1F8o0ayNCZzUwQadL/bGIUic5TkS/QlPcyMuI8ZIwedQ==}
+ arktype@2.0.0-beta.6:
+ resolution: {integrity: sha512-tbH5/h0z371sgrJIAhZhH2BcrErWv8uQIPVcLmknJ8ffov5/ZbMNufrQ3hG9avGKTcVnVmdQoPhl1WuKuagqXA==}
+
arktype@2.1.28:
resolution: {integrity: sha512-LVZqXl2zWRpNFnbITrtFmqeqNkPPo+KemuzbGSY6jvJwCb4v8NsDzrWOLHnQgWl26TkJeWWcUNUeBpq2Mst1/Q==}
@@ -4142,8 +4842,8 @@ packages:
resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==}
engines: {node: '>=4'}
- ast-v8-to-istanbul@0.3.8:
- resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==}
+ ast-v8-to-istanbul@1.0.5:
+ resolution: {integrity: sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA==}
astring@1.9.0:
resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
@@ -4194,6 +4894,10 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ balanced-match@4.0.4:
+ resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
+ engines: {node: 18 || 20 || >=22}
+
bare-events@2.7.0:
resolution: {integrity: sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==}
@@ -4240,6 +4944,7 @@ packages:
basic-ftp@5.0.5:
resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==}
engines: {node: '>=10.0.0'}
+ deprecated: Security vulnerability fixed in 5.2.1, please upgrade
bcp-47-match@2.0.3:
resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==}
@@ -4298,6 +5003,10 @@ packages:
brace-expansion@2.0.2:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+ brace-expansion@5.0.8:
+ resolution: {integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==}
+ engines: {node: 20 || >=22}
+
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
@@ -4420,8 +5129,8 @@ packages:
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
- chai@6.2.1:
- resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==}
+ chai@6.2.2:
+ resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
engines: {node: '>=18'}
chalk@4.1.2:
@@ -4554,6 +5263,9 @@ packages:
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+ command-exists@1.2.9:
+ resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==}
+
commander@10.0.1:
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
engines: {node: '>=14'}
@@ -4566,6 +5278,10 @@ packages:
resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
engines: {node: '>=20'}
+ commander@14.0.3:
+ resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==}
+ engines: {node: '>=20'}
+
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
@@ -4892,6 +5608,9 @@ packages:
supports-color:
optional: true
+ decimal.js@10.6.0:
+ resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
+
decode-named-character-reference@1.0.2:
resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
@@ -4947,6 +5666,10 @@ packages:
detect-europe-js@0.1.2:
resolution: {integrity: sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow==}
+ detect-file@1.0.0:
+ resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
+ engines: {node: '>=0.10.0'}
+
detect-indent@6.1.0:
resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
engines: {node: '>=8'}
@@ -5021,6 +5744,9 @@ packages:
effect@3.19.14:
resolution: {integrity: sha512-3vwdq0zlvQOxXzXNKRIPKTqZNMyGCdaFUBfMPqpsyzZDre67kgC1EEHDV4EoQTovJ4w5fmJW756f86kkuz7WFA==}
+ effect@3.21.2:
+ resolution: {integrity: sha512-rXd2FGDM8KdjSIrc+mqEELo7ScW7xTVxEf1iInmPSpIde9/nyGuFM710cjTo7/EreGXiUX2MOonPpprbz2XHCg==}
+
eip55@2.1.1:
resolution: {integrity: sha512-WcagVAmNu2Ww2cDUfzuWVntYwFxbvZ5MvIyLZpMjTTkjD6sCvkGOiS86jTppzu9/gWsc8isLHAeMBWK02OnZmA==}
@@ -5087,12 +5813,12 @@ packages:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
- es-module-lexer@1.6.0:
- resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==}
-
es-module-lexer@1.7.0:
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+ es-module-lexer@2.3.1:
+ resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==}
+
es-object-atoms@1.1.1:
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
engines: {node: '>= 0.4'}
@@ -5123,6 +5849,11 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ esbuild@0.28.1:
+ resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -5207,6 +5938,9 @@ packages:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
+ ethereum-cryptography@2.2.1:
+ resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==}
+
ethereum-cryptography@3.2.0:
resolution: {integrity: sha512-Urr5YVsalH+Jo0sYkTkv1MyI9bLYZwW8BENZCeE1QYaTHETEYx0Nv/SVsWkSqpYrzweg6d8KMY1wTjH/1m/BIg==}
engines: {node: ^14.21.3 || >=16, npm: '>=9'}
@@ -5232,6 +5966,9 @@ packages:
eventemitter3@5.0.1:
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+ eventemitter3@5.0.4:
+ resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==}
+
events-universal@1.0.1:
resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==}
@@ -5258,8 +5995,12 @@ packages:
resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
engines: {node: '>= 0.8.0'}
- expect-type@1.2.2:
- resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==}
+ expand-tilde@2.0.2:
+ resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==}
+ engines: {node: '>=0.10.0'}
+
+ expect-type@1.4.0:
+ resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==}
engines: {node: '>=12.0.0'}
exsolve@1.0.7:
@@ -5388,6 +6129,14 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
+ find-up@6.3.0:
+ resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ findup-sync@5.0.0:
+ resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==}
+ engines: {node: '>= 10.13.0'}
+
follow-redirects@1.15.9:
resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
engines: {node: '>=4.0'}
@@ -5432,10 +6181,6 @@ packages:
fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
- fs-extra@11.3.0:
- resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
- engines: {node: '>=14.14'}
-
fs-extra@11.3.2:
resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==}
engines: {node: '>=14.14'}
@@ -5464,6 +6209,10 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+ generator-function@2.0.1:
+ resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
+ engines: {node: '>= 0.4'}
+
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
@@ -5529,10 +6278,22 @@ packages:
engines: {node: 20 || >=22}
hasBin: true
+ glob@13.0.6:
+ resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==}
+ engines: {node: 18 || 20 || >=22}
+
glob@8.1.0:
resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
engines: {node: '>=12'}
- deprecated: Glob versions prior to v9 are no longer supported
+ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
+
+ global-modules@1.0.0:
+ resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
+ engines: {node: '>=0.10.0'}
+
+ global-prefix@1.0.2:
+ resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
+ engines: {node: '>=0.10.0'}
globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
@@ -5582,6 +6343,10 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
+ hasown@2.0.4:
+ resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
+ engines: {node: '>= 0.4'}
+
hast-util-classnames@3.0.0:
resolution: {integrity: sha512-tI3JjoGDEBVorMAWK4jNRsfLMYmih1BUOG3VV36pH36njs1IEl7xkNrVTD2mD2yYHmQCa5R/fj61a8IAF4bRaQ==}
@@ -5645,6 +6410,10 @@ packages:
hmac-drbg@1.0.1:
resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
+ homedir-polyfill@1.0.3:
+ resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
+ engines: {node: '>=0.10.0'}
+
hono@4.10.3:
resolution: {integrity: sha512-2LOYWUbnhdxdL8MNbNg9XZig6k+cZXm5IjHn2Aviv7honhBMOHb+jxrKIeJRZJRmn+htUCKhaicxwXuUDlchRA==}
engines: {node: '>=16.9.0'}
@@ -5721,6 +6490,9 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+
inline-style-parser@0.2.4:
resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==}
@@ -5756,6 +6528,10 @@ packages:
is-alphanumerical@2.0.1:
resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+ is-arguments@1.2.0:
+ resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
+ engines: {node: '>= 0.4'}
+
is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
@@ -5764,6 +6540,10 @@ packages:
resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
engines: {node: '>= 0.4'}
+ is-core-module@2.16.2:
+ resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==}
+ engines: {node: '>= 0.4'}
+
is-decimal@2.0.1:
resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
@@ -5775,6 +6555,10 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
+ is-generator-function@1.1.2:
+ resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
+ engines: {node: '>= 0.4'}
+
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -5794,6 +6578,10 @@ packages:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
+ is-regex@1.2.1:
+ resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
+ engines: {node: '>= 0.4'}
+
is-retry-allowed@3.0.0:
resolution: {integrity: sha512-9xH0xvoggby+u0uGF7cZXdrutWiBiaFG8ZT4YFPXL8NzkyAwX3AKGLeFQLvzDpM430+nDFBZ1LHkie/8ocL06A==}
engines: {node: '>=12'}
@@ -5851,10 +6639,6 @@ packages:
resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
engines: {node: '>=10'}
- istanbul-lib-source-maps@5.0.6:
- resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
- engines: {node: '>=10'}
-
istanbul-reports@3.2.0:
resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
engines: {node: '>=8'}
@@ -5885,12 +6669,12 @@ packages:
js-sha3@0.8.0:
resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==}
+ js-tokens@10.0.0:
+ resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==}
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- js-tokens@9.0.1:
- resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
-
js-yaml@3.14.2:
resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
hasBin: true
@@ -5902,6 +6686,10 @@ packages:
jsbn@1.1.0:
resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
+ jsel@1.1.6:
+ resolution: {integrity: sha512-7E6r8kVzjmKhwXR/82Z+43edfOJGRvLvx6cJZ+SS2MGAPPtYZGnaIsFHpQMA1IbIPA9twDProkob4IIAJ0ZqSw==}
+ engines: {node: '>=0.10.0'}
+
jsesc@3.0.2:
resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
engines: {node: '>=6'}
@@ -5926,6 +6714,9 @@ packages:
engines: {node: '>=6'}
hasBin: true
+ jsonc-parser@3.3.1:
+ resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==}
+
jsonfile@4.0.0:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
@@ -5969,6 +6760,9 @@ packages:
kolorist@1.8.0:
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+ kzg-wasm@1.0.0:
+ resolution: {integrity: sha512-jMvFK5uiV41BgcLrCaHbNeDeQeZdoTcqOYm7yS1Xdvl4MAykjou+SLlnt+P1bWz5C0YWHOmgUUjIpCuU83zNTA==}
+
langium@3.3.1:
resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==}
engines: {node: '>=16.0.0'}
@@ -6086,6 +6880,10 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
+ locate-path@7.2.0:
+ resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
lodash-es@4.17.21:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
@@ -6124,9 +6922,17 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
+ lru-cache@10.1.0:
+ resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==}
+ engines: {node: 14 || >=16.14}
+
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+ lru-cache@11.0.2:
+ resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==}
+ engines: {node: 20 || >=22}
+
lru-cache@11.2.2:
resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==}
engines: {node: 20 || >=22}
@@ -6153,8 +6959,8 @@ packages:
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
- magicast@0.5.1:
- resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==}
+ magicast@0.5.3:
+ resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==}
make-dir@4.0.0:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
@@ -6253,6 +7059,10 @@ packages:
media-query-parser@2.0.2:
resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==}
+ memorystream@0.3.1:
+ resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
+ engines: {node: '>= 0.10.0'}
+
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -6431,6 +7241,10 @@ packages:
resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
engines: {node: 20 || >=22}
+ minimatch@10.2.6:
+ resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==}
+ engines: {node: 18 || 20 || >=22}
+
minimatch@5.1.6:
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
engines: {node: '>=10'}
@@ -6442,6 +7256,10 @@ packages:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
+ minipass@7.1.3:
+ resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
minisearch@7.2.0:
resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==}
@@ -6697,6 +7515,10 @@ packages:
resolution: {integrity: sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==}
engines: {node: '>=16'}
+ os-tmpdir@1.0.2:
+ resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+ engines: {node: '>=0.10.0'}
+
outdent@0.5.0:
resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==}
@@ -6711,6 +7533,22 @@ packages:
typescript:
optional: true
+ ox@0.14.20:
+ resolution: {integrity: sha512-rby38C3nDn8eQkf29Zgw4hkCZJ64Qqi0zRPWL8ENUQ7JVuoITqrVtwWQgM/He19SCMUEc7hS/Sjw0jIOSLJhOw==}
+ peerDependencies:
+ typescript: '>=5.4.0'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ ox@0.14.33:
+ resolution: {integrity: sha512-rooA/4o7bBof4Ge2VH/eovfNPb/AEEYyrNj03wggc55g5HZD8Pjs/OeWhttgjic3dDcqn0r29bDuvQEdTiUemQ==}
+ peerDependencies:
+ typescript: '>=5.4.0'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
ox@0.9.17:
resolution: {integrity: sha512-rKAnhzhRU3Xh3hiko+i1ZxywZ55eWQzeS/Q4HRKLx2PqfHOolisZHErSsJVipGlmQKHW5qwOED/GighEw9dbLg==}
peerDependencies:
@@ -6734,6 +7572,10 @@ packages:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
+ p-limit@4.0.0:
+ resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
p-limit@5.0.0:
resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==}
engines: {node: '>=18'}
@@ -6746,10 +7588,26 @@ packages:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
- p-map@2.1.0:
+ p-locate@6.0.0:
+ resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ p-map@2.1.0:
resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
engines: {node: '>=6'}
+ p-queue@7.4.1:
+ resolution: {integrity: sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==}
+ engines: {node: '>=12'}
+
+ p-retry@5.1.2:
+ resolution: {integrity: sha512-couX95waDu98NfNZV+i/iLt+fdVxmI7CbrrdC2uDWfPdUAApyxT4wmDlyOtR5KtTDmkDO0zDScDjDou9YHhd9g==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ p-timeout@5.1.0:
+ resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==}
+ engines: {node: '>=12'}
+
p-try@2.2.0:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
@@ -6782,6 +7640,10 @@ packages:
resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==}
engines: {node: '>=18'}
+ parse-passwd@1.0.0:
+ resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==}
+ engines: {node: '>=0.10.0'}
+
parse5-htmlparser2-tree-adapter@6.0.1:
resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==}
@@ -6805,6 +7667,10 @@ packages:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
+ path-exists@5.0.0:
+ resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
@@ -6820,6 +7686,10 @@ packages:
resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==}
engines: {node: 20 || >=22}
+ path-scurry@2.0.2:
+ resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
+ engines: {node: 18 || 20 || >=22}
+
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -6858,6 +7728,10 @@ packages:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
+ picomatch@4.0.5:
+ resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==}
+ engines: {node: '>=12'}
+
pify@4.0.1:
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
engines: {node: '>=6'}
@@ -6868,6 +7742,9 @@ packages:
pino-abstract-transport@2.0.0:
resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
+ pino-abstract-transport@3.0.0:
+ resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==}
+
pino-http@8.6.1:
resolution: {integrity: sha512-J0hiJgUExtBXP2BjrK4VB305tHXS31sCmWJ9XJo2wPkLHa1NFPuW4V9wjG27PAc2fmBCigiNhQKpvrx+kntBPA==}
@@ -6881,6 +7758,10 @@ packages:
pino-std-serializers@7.0.0:
resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==}
+ pino@10.3.1:
+ resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==}
+ hasBin: true
+
pino@8.21.0:
resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==}
hasBin: true
@@ -6926,11 +7807,22 @@ packages:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
+ prettier-plugin-solidity@1.3.1:
+ resolution: {integrity: sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ prettier: '>=2.3.0'
+
prettier@2.8.8:
resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
engines: {node: '>=10.13.0'}
hasBin: true
+ prettier@3.2.5:
+ resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==}
+ engines: {node: '>=14'}
+ hasBin: true
+
prettier@3.6.2:
resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
engines: {node: '>=14'}
@@ -7161,6 +8053,9 @@ packages:
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
engines: {node: '>= 12.13.0'}
+ real-require@1.0.0:
+ resolution: {integrity: sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==}
+
recma-build-jsx@1.0.0:
resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
@@ -7273,10 +8168,19 @@ packages:
reselect@5.1.1:
resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==}
+ resolve-dir@1.0.1:
+ resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
+ engines: {node: '>=0.10.0'}
+
resolve-from@5.0.0:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
engines: {node: '>=8'}
+ resolve@1.22.12:
+ resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
@@ -7293,6 +8197,10 @@ packages:
resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
engines: {node: '>= 4'}
+ retry@0.13.1:
+ resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
+ engines: {node: '>= 4'}
+
reusify@1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -7337,6 +8245,9 @@ packages:
rw@1.3.3:
resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
+ rxjs@7.5.5:
+ resolution: {integrity: sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==}
+
rxjs@7.8.2:
resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
@@ -7350,6 +8261,10 @@ packages:
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+ safe-regex-test@1.1.0:
+ resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
+ engines: {node: '>= 0.4'}
+
safe-regex2@3.1.0:
resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==}
@@ -7373,6 +8288,10 @@ packages:
secure-json-parse@2.7.0:
resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
+ semver@5.7.2:
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+ hasBin: true
+
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -7519,6 +8438,31 @@ packages:
resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==}
engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
+ solc-typed-ast@18.2.6:
+ resolution: {integrity: sha512-JObIRpPYO4zvQkAgr3koBr5Du+IkYzVNofykZpGv/44iJ0VRsaEq/X+LrrFD0SDqFcnyYcBOPWDiOXwNOStKlg==}
+ hasBin: true
+
+ solc@0.8.25:
+ resolution: {integrity: sha512-7P0TF8gPeudl1Ko3RGkyY6XVCxe2SdD/qQhtns1vl3yAbK/PDifKDLHGtx1t7mX3LgR7ojV7Fg/Kc6Q9D2T8UQ==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+
+ solc@0.8.35:
+ resolution: {integrity: sha512-OaP/4zyoKRo2CjqZDxbtkeRlEo6MxP4FLCxntw1Agf9OSoecmwYKoFBSB34UcSKBFBucrTh3Mb0nRoJou62ibw==}
+ engines: {node: '>=12.0.0'}
+ hasBin: true
+
+ solc@0.8.36:
+ resolution: {integrity: sha512-cnDhjWo8dC5FxnEwCrWxUsJS7RPsHf+pVUe9Tr/+b15sQ40WCVn4vX4R+tOvN5gRfEgiquvFzfF4VV0kSnknhw==}
+ engines: {node: '>=12.0.0'}
+ hasBin: true
+
+ solidity-ast@0.4.62:
+ resolution: {integrity: sha512-jSC7msQCkJXIzM8LlDjRZ5cif5w40g6THlXHFk3zchbL5dm3YLoBETvqPGo5KndYkftjhcs5kz1fnTu4d34lVQ==}
+
+ solidity-comments-extractor@0.0.8:
+ resolution: {integrity: sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==}
+
sonic-boom@3.8.1:
resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==}
@@ -7562,6 +8506,9 @@ packages:
sprintf-js@1.1.3:
resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
+ src-location@1.1.0:
+ resolution: {integrity: sha512-idBVZgLZGzB3B2Et317AFDQto7yRgp1tOuFd+VKIH2dw1jO1b6p07zNjtQoVhkW+CY6oGTp9Y5UIfbJoZRsoFQ==}
+
ssh-remote-port-forward@1.0.4:
resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==}
@@ -7582,8 +8529,8 @@ packages:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
- std-env@3.10.0:
- resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+ std-env@4.2.0:
+ resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==}
stdin-discarder@0.1.0:
resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==}
@@ -7717,6 +8664,7 @@ packages:
tar@7.2.0:
resolution: {integrity: sha512-hctwP0Nb4AB60bj8WQgRYaMOuJYRAPMGiQUAotms5igN8ppfQM+IvjQ5HcKu1MaZh2Wy2KWVTe563Yj8dfc14w==}
engines: {node: '>=18'}
+ deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
tdigest@0.1.2:
resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==}
@@ -7749,6 +8697,10 @@ packages:
testcontainers@11.10.0:
resolution: {integrity: sha512-8hwK2EnrOZfrHPpDC7CPe03q7H8Vv8j3aXdcmFFyNV8dzpBzgZYmqyDtduJ8YQ5kbzj+A+jUXMQ6zI8B5U3z+g==}
+ tevm@1.0.0-rc.151:
+ resolution: {integrity: sha512-LyFVsmOZUo4ZnFlZa4zgchK1Z2bHiXyihTlh3Ozin6IbgZa2ReJgdDz2I+UI+27IXzrRKGpMLy1WNAWbhaVSJA==}
+ hasBin: true
+
text-decoder@1.2.1:
resolution: {integrity: sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==}
@@ -7765,6 +8717,10 @@ packages:
thread-stream@3.1.0:
resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
+ thread-stream@4.2.0:
+ resolution: {integrity: sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==}
+ engines: {node: '>=20'}
+
through2@4.0.2:
resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
@@ -7786,10 +8742,14 @@ packages:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
- tinyrainbow@3.0.3:
- resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
+ tinyrainbow@3.1.0:
+ resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
engines: {node: '>=14.0.0'}
+ tmp@0.0.33:
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+ engines: {node: '>=0.6.0'}
+
tmp@0.2.5:
resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==}
engines: {node: '>=14.14'}
@@ -7839,6 +8799,11 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+ tsx@4.23.1:
+ resolution: {integrity: sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
tweetnacl@0.14.5:
resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
@@ -7887,6 +8852,11 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ typescript@7.0.2:
+ resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==}
+ engines: {node: '>=16.20.0'}
+ hasBin: true
+
ua-is-frozen@0.1.2:
resolution: {integrity: sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw==}
@@ -7917,6 +8887,9 @@ packages:
undici-types@7.12.0:
resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==}
+ undici-types@7.24.6:
+ resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==}
+
undici@7.16.0:
resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==}
engines: {node: '>=20.18.1'}
@@ -7967,6 +8940,39 @@ packages:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
+ unplugin@3.3.0:
+ resolution: {integrity: sha512-qa66K+crbfyE6JK10GjvbJeRrOsuC/JpbnHctfyp/i4oBTxWOzJfRZyDiOk1PtErMFRu8JhsU/wPvOdBNWe5Rg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ '@farmfe/core': '*'
+ '@rspack/core': '*'
+ bun-types-no-globals: '*'
+ esbuild: '*'
+ rolldown: '*'
+ rollup: '*'
+ unloader: '*'
+ vite: 6.4.1
+ webpack: '*'
+ peerDependenciesMeta:
+ '@farmfe/core':
+ optional: true
+ '@rspack/core':
+ optional: true
+ bun-types-no-globals:
+ optional: true
+ esbuild:
+ optional: true
+ rolldown:
+ optional: true
+ rollup:
+ optional: true
+ unloader:
+ optional: true
+ vite:
+ optional: true
+ webpack:
+ optional: true
+
update-browserslist-db@1.1.1:
resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
hasBin: true
@@ -8012,12 +9018,16 @@ packages:
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ util@0.12.5:
+ resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+
utility-types@3.11.0:
resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==}
engines: {node: '>= 4'}
uuid@10.0.0:
resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==}
+ deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).
hasBin: true
uuid@11.1.0:
@@ -8026,10 +9036,12 @@ packages:
uuid@8.3.2:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).
hasBin: true
uuid@9.0.1:
resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+ deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).
hasBin: true
validate-npm-package-name@5.0.1:
@@ -8055,8 +9067,16 @@ packages:
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
- viem@2.43.5:
- resolution: {integrity: sha512-QuJpuEMEPM3EreN+vX4mVY68Sci0+zDxozYfbh/WfV+SSy/Gthm74PH8XmitXdty1xY54uTCJ+/Gbbd1IiMPSA==}
+ viem@2.49.3:
+ resolution: {integrity: sha512-FlIXd2kRygDxJtvjtPp74vjmyOKMjKlXXgTNdMxr8h3kcDrQ4bYb9q1MpSWyCVa3L2NJc9gSv+u8HcHYIZQUkw==}
+ peerDependencies:
+ typescript: '>=5.0.4'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ viem@2.55.10:
+ resolution: {integrity: sha512-Q9Ba+/ma81U2M5o5P2AQ7Ux8rTIwmCZvUcr8rKdQ22bV0IBFHllM2m5gWDP8hFaUN2nH2oW3QG44amRazflYNQ==}
peerDependencies:
typescript: '>=5.0.4'
peerDependenciesMeta:
@@ -8156,18 +9176,20 @@ packages:
yaml:
optional: true
- vitest@4.0.15:
- resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==}
+ vitest@4.1.10:
+ resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@opentelemetry/api': ~1.7.0
'@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
- '@vitest/browser-playwright': 4.0.15
- '@vitest/browser-preview': 4.0.15
- '@vitest/browser-webdriverio': 4.0.15
- '@vitest/ui': 4.0.15
+ '@vitest/browser-playwright': 4.1.10
+ '@vitest/browser-preview': 4.1.10
+ '@vitest/browser-webdriverio': 4.1.10
+ '@vitest/coverage-istanbul': 4.1.10
+ '@vitest/coverage-v8': 4.1.10
+ '@vitest/ui': 4.1.10
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
@@ -8183,6 +9205,10 @@ packages:
optional: true
'@vitest/browser-webdriverio':
optional: true
+ '@vitest/coverage-istanbul':
+ optional: true
+ '@vitest/coverage-v8':
+ optional: true
'@vitest/ui':
optional: true
happy-dom:
@@ -8232,6 +9258,26 @@ packages:
web-namespaces@2.0.1:
resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
+ web3-errors@1.3.1:
+ resolution: {integrity: sha512-w3NMJujH+ZSW4ltIZZKtdbkbyQEvBzyp3JRn59Ckli0Nz4VMsVq8aF1bLWM7A2kuQ+yVEm3ySeNU+7mSRwx7RQ==}
+ engines: {node: '>=14', npm: '>=6.12.0'}
+
+ web3-eth-abi@4.4.1:
+ resolution: {integrity: sha512-60ecEkF6kQ9zAfbTY04Nc9q4eEYM0++BySpGi8wZ2PD1tw/c0SDvsKhV6IKURxLJhsDlb08dATc3iD6IbtWJmg==}
+ engines: {node: '>=14', npm: '>=6.12.0'}
+
+ web3-types@1.10.0:
+ resolution: {integrity: sha512-0IXoaAFtFc8Yin7cCdQfB9ZmjafrbP6BO0f0KT/khMhXKUpoJ6yShrVhiNpyRBo8QQjuOagsWzwSK2H49I7sbw==}
+ engines: {node: '>=14', npm: '>=6.12.0'}
+
+ web3-utils@4.3.3:
+ resolution: {integrity: sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==}
+ engines: {node: '>=14', npm: '>=6.12.0'}
+
+ web3-validator@2.0.6:
+ resolution: {integrity: sha512-qn9id0/l1bWmvH4XfnG/JtGKKwut2Vokl6YXP5Kfg424npysmtRLe9DgiNBM9Op7QL/aSiaA0TVXibuIuWcizg==}
+ engines: {node: '>=14', npm: '>=6.12.0'}
+
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
@@ -8239,6 +9285,9 @@ packages:
resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
engines: {node: '>=10.13.0'}
+ webpack-virtual-modules@0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+
webpack@5.101.3:
resolution: {integrity: sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==}
engines: {node: '>=10.13.0'}
@@ -8256,6 +9305,10 @@ packages:
resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
engines: {node: '>= 0.4'}
+ which@1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
@@ -8304,6 +9357,18 @@ packages:
utf-8-validate:
optional: true
+ ws@8.21.0:
+ resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==}
+ 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
+
xrpl@4.4.3:
resolution: {integrity: sha512-vi2OjuNkiaP8nv1j+nqHp8GZwwEjO6Y8+j/OuVMg6M4LwXEwyHdIj33dlg7cyY1Lw5+jb9HqFOQvABhaywVbTQ==}
engines: {node: '>=18.0.0'}
@@ -8383,6 +9448,9 @@ packages:
zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
+ zod@4.4.3:
+ resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==}
+
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
@@ -8444,10 +9512,16 @@ snapshots:
'@ark/fs@0.56.0': {}
+ '@ark/schema@0.3.3':
+ dependencies:
+ '@ark/util': 0.2.2
+
'@ark/schema@0.56.0':
dependencies:
'@ark/util': 0.56.0
+ '@ark/util@0.2.2': {}
+
'@ark/util@0.56.0': {}
'@babel/code-frame@7.26.2':
@@ -8580,12 +9654,16 @@ snapshots:
'@babel/helper-string-parser@7.27.1': {}
+ '@babel/helper-string-parser@7.29.7': {}
+
'@babel/helper-validator-identifier@7.25.9': {}
'@babel/helper-validator-identifier@7.27.1': {}
'@babel/helper-validator-identifier@7.28.5': {}
+ '@babel/helper-validator-identifier@7.29.7': {}
+
'@babel/helper-validator-option@7.25.9': {}
'@babel/helper-validator-option@7.27.1': {}
@@ -8612,6 +9690,10 @@ snapshots:
dependencies:
'@babel/types': 7.28.5
+ '@babel/parser@7.29.7':
+ dependencies:
+ '@babel/types': 7.29.7
+
'@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
@@ -8703,6 +9785,11 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
+ '@babel/types@7.29.7':
+ dependencies:
+ '@babel/helper-string-parser': 7.29.7
+ '@babel/helper-validator-identifier': 7.29.7
+
'@balena/dockerignore@1.0.2': {}
'@bcoe/v8-coverage@1.0.2': {}
@@ -9046,6 +10133,11 @@ snapshots:
'@colors/colors@1.5.0':
optional: true
+ '@effect/schema@0.75.5(effect@3.21.2)':
+ dependencies:
+ effect: 3.21.2
+ fast-check: 3.23.2
+
'@emnapi/core@1.5.0':
dependencies:
'@emnapi/wasi-threads': 1.1.0
@@ -9071,87 +10163,231 @@ snapshots:
'@esbuild/aix-ppc64@0.25.0':
optional: true
+ '@esbuild/aix-ppc64@0.28.1':
+ optional: true
+
'@esbuild/android-arm64@0.25.0':
optional: true
+ '@esbuild/android-arm64@0.28.1':
+ optional: true
+
'@esbuild/android-arm@0.25.0':
optional: true
+ '@esbuild/android-arm@0.28.1':
+ optional: true
+
'@esbuild/android-x64@0.25.0':
optional: true
+ '@esbuild/android-x64@0.28.1':
+ optional: true
+
'@esbuild/darwin-arm64@0.25.0':
optional: true
+ '@esbuild/darwin-arm64@0.28.1':
+ optional: true
+
'@esbuild/darwin-x64@0.25.0':
optional: true
+ '@esbuild/darwin-x64@0.28.1':
+ optional: true
+
'@esbuild/freebsd-arm64@0.25.0':
optional: true
+ '@esbuild/freebsd-arm64@0.28.1':
+ optional: true
+
'@esbuild/freebsd-x64@0.25.0':
optional: true
+ '@esbuild/freebsd-x64@0.28.1':
+ optional: true
+
'@esbuild/linux-arm64@0.25.0':
optional: true
+ '@esbuild/linux-arm64@0.28.1':
+ optional: true
+
'@esbuild/linux-arm@0.25.0':
optional: true
+ '@esbuild/linux-arm@0.28.1':
+ optional: true
+
'@esbuild/linux-ia32@0.25.0':
optional: true
+ '@esbuild/linux-ia32@0.28.1':
+ optional: true
+
'@esbuild/linux-loong64@0.25.0':
optional: true
+ '@esbuild/linux-loong64@0.28.1':
+ optional: true
+
'@esbuild/linux-mips64el@0.25.0':
optional: true
+ '@esbuild/linux-mips64el@0.28.1':
+ optional: true
+
'@esbuild/linux-ppc64@0.25.0':
optional: true
+ '@esbuild/linux-ppc64@0.28.1':
+ optional: true
+
'@esbuild/linux-riscv64@0.25.0':
optional: true
+ '@esbuild/linux-riscv64@0.28.1':
+ optional: true
+
'@esbuild/linux-s390x@0.25.0':
optional: true
+ '@esbuild/linux-s390x@0.28.1':
+ optional: true
+
'@esbuild/linux-x64@0.25.0':
optional: true
+ '@esbuild/linux-x64@0.28.1':
+ optional: true
+
'@esbuild/netbsd-arm64@0.25.0':
optional: true
+ '@esbuild/netbsd-arm64@0.28.1':
+ optional: true
+
'@esbuild/netbsd-x64@0.25.0':
optional: true
+ '@esbuild/netbsd-x64@0.28.1':
+ optional: true
+
'@esbuild/openbsd-arm64@0.25.0':
optional: true
+ '@esbuild/openbsd-arm64@0.28.1':
+ optional: true
+
'@esbuild/openbsd-x64@0.25.0':
optional: true
+ '@esbuild/openbsd-x64@0.28.1':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.28.1':
+ optional: true
+
'@esbuild/sunos-x64@0.25.0':
optional: true
+ '@esbuild/sunos-x64@0.28.1':
+ optional: true
+
'@esbuild/win32-arm64@0.25.0':
optional: true
+ '@esbuild/win32-arm64@0.28.1':
+ optional: true
+
'@esbuild/win32-ia32@0.25.0':
optional: true
+ '@esbuild/win32-ia32@0.28.1':
+ optional: true
+
'@esbuild/win32-x64@0.25.0':
optional: true
+ '@esbuild/win32-x64@0.28.1':
+ optional: true
+
+ '@ethereumjs/binarytree@10.1.2':
+ dependencies:
+ '@ethereumjs/rlp': 10.1.2
+ '@ethereumjs/util': 10.1.2
+ '@noble/hashes': 2.2.0
+ debug: 4.4.3
+ lru-cache: 11.0.2
+ transitivePeerDependencies:
+ - supports-color
+
'@ethereumjs/common@10.1.0':
dependencies:
'@ethereumjs/util': 10.1.0
- eventemitter3: 5.0.1
+ eventemitter3: 5.0.4
+
+ '@ethereumjs/common@10.1.2':
+ dependencies:
+ '@ethereumjs/util': 10.1.2
+ eventemitter3: 5.0.4
+
+ '@ethereumjs/evm@10.1.2':
+ dependencies:
+ '@ethereumjs/binarytree': 10.1.2
+ '@ethereumjs/common': 10.1.2
+ '@ethereumjs/statemanager': 10.1.2
+ '@ethereumjs/util': 10.1.2
+ '@noble/curves': 2.2.0
+ '@noble/hashes': 2.2.0
+ debug: 4.4.3
+ eventemitter3: 5.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@ethereumjs/mpt@10.1.2':
+ dependencies:
+ '@ethereumjs/rlp': 10.1.2
+ '@ethereumjs/util': 10.1.2
+ '@noble/hashes': 2.2.0
+ debug: 4.4.3
+ lru-cache: 11.0.2
+ transitivePeerDependencies:
+ - supports-color
'@ethereumjs/rlp@10.1.0': {}
+ '@ethereumjs/rlp@10.1.2': {}
+
'@ethereumjs/rlp@5.0.2': {}
+ '@ethereumjs/statemanager@10.1.2':
+ dependencies:
+ '@ethereumjs/binarytree': 10.1.2
+ '@ethereumjs/common': 10.1.2
+ '@ethereumjs/mpt': 10.1.2
+ '@ethereumjs/rlp': 10.1.2
+ '@ethereumjs/util': 10.1.2
+ '@js-sdsl/ordered-map': 4.4.2
+ '@noble/hashes': 2.2.0
+ debug: 4.4.3
+ lru-cache: 11.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@ethereumjs/trie@6.2.1':
+ dependencies:
+ '@ethereumjs/rlp': 5.0.2
+ '@ethereumjs/util': 9.1.0
+ '@types/readable-stream': 2.3.15
+ debug: 4.4.3
+ ethereum-cryptography: 2.2.1
+ lru-cache: 10.1.0
+ readable-stream: 3.6.2
+ transitivePeerDependencies:
+ - supports-color
+
'@ethereumjs/tx@10.1.0':
dependencies:
'@ethereumjs/common': 10.1.0
@@ -9159,11 +10395,30 @@ snapshots:
'@ethereumjs/util': 10.1.0
ethereum-cryptography: 3.2.0
+ '@ethereumjs/tx@10.1.2':
+ dependencies:
+ '@ethereumjs/common': 10.1.2
+ '@ethereumjs/rlp': 10.1.2
+ '@ethereumjs/util': 10.1.2
+ '@noble/curves': 2.2.0
+ '@noble/hashes': 2.2.0
+
'@ethereumjs/util@10.1.0':
dependencies:
'@ethereumjs/rlp': 10.1.0
ethereum-cryptography: 3.2.0
+ '@ethereumjs/util@10.1.2':
+ dependencies:
+ '@ethereumjs/rlp': 10.1.2
+ '@noble/curves': 2.2.0
+ '@noble/hashes': 2.2.0
+
+ '@ethereumjs/util@9.1.0':
+ dependencies:
+ '@ethereumjs/rlp': 5.0.2
+ ethereum-cryptography: 2.2.1
+
'@ethersproject/abi@5.8.0':
dependencies:
'@ethersproject/address': 5.8.0
@@ -9287,6 +10542,34 @@ snapshots:
'@ethersproject/properties': 5.8.0
'@ethersproject/strings': 5.8.0
+ '@evmts/zevm-darwin-arm64@0.0.0':
+ optional: true
+
+ '@evmts/zevm-darwin-x64@0.0.0':
+ optional: true
+
+ '@evmts/zevm-linux-arm64-gnu@0.0.0':
+ optional: true
+
+ '@evmts/zevm-linux-x64-gnu@0.0.0':
+ optional: true
+
+ '@evmts/zevm@0.0.0':
+ dependencies:
+ '@ethereumjs/common': 10.1.2
+ '@ethereumjs/evm': 10.1.2
+ '@ethereumjs/trie': 6.2.1
+ '@ethereumjs/tx': 10.1.2
+ '@noble/curves': 2.2.0
+ '@noble/hashes': 2.2.0
+ optionalDependencies:
+ '@evmts/zevm-darwin-arm64': 0.0.0
+ '@evmts/zevm-darwin-x64': 0.0.0
+ '@evmts/zevm-linux-arm64-gnu': 0.0.0
+ '@evmts/zevm-linux-x64-gnu': 0.0.0
+ transitivePeerDependencies:
+ - supports-color
+
'@fastify/ajv-compiler@3.6.0':
dependencies:
ajv: 8.17.1
@@ -9539,36 +10822,143 @@ snapshots:
'@js-sdsl/ordered-map@4.4.2': {}
- '@ledgerhq/client-ids@0.2.1(react@18.3.1)':
+ '@latticexyz/block-logs-stream@2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
dependencies:
- '@ledgerhq/live-env': 2.23.0
- '@reduxjs/toolkit': 2.8.2(react@18.3.1)
- uuid: 9.0.1
+ '@latticexyz/common': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ debug: 4.4.3
+ rxjs: 7.5.5
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
transitivePeerDependencies:
- - react
- - react-redux
+ - '@aws-sdk/client-kms'
+ - asn1.js
+ - supports-color
+ - typescript
+ - zod
- '@ledgerhq/client-ids@0.2.1(react@19.0.0)':
+ '@latticexyz/common@2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
dependencies:
- '@ledgerhq/live-env': 2.23.0
- '@reduxjs/toolkit': 2.8.2(react@19.0.0)
- uuid: 9.0.1
+ '@latticexyz/schema-type': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@solidity-parser/parser': 0.16.2
+ abitype: 1.0.9(typescript@5.9.3)(zod@4.4.3)
+ debug: 4.4.3
+ execa: 9.5.2
+ p-queue: 7.4.1
+ p-retry: 5.1.2
+ prettier: 3.2.5
+ prettier-plugin-solidity: 1.3.1(prettier@3.2.5)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
transitivePeerDependencies:
- - react
- - react-redux
+ - supports-color
+ - typescript
+ - zod
- '@ledgerhq/cryptoassets-evm-signatures@13.7.1':
+ '@latticexyz/config@2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
dependencies:
- '@ledgerhq/live-env': 2.23.0
- axios: 1.12.2
+ '@ark/util': 0.2.2
+ '@latticexyz/common': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@latticexyz/schema-type': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ find-up: 6.3.0
+ tsx: 4.23.1
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
transitivePeerDependencies:
- - debug
+ - '@aws-sdk/client-kms'
+ - asn1.js
+ - supports-color
+ - typescript
+ - zod
- '@ledgerhq/devices@8.7.0':
+ '@latticexyz/protocol-parser@2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
dependencies:
- '@ledgerhq/errors': 6.28.0
- '@ledgerhq/logs': 6.13.0
- rxjs: 7.8.2
+ '@latticexyz/common': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@latticexyz/config': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@latticexyz/schema-type': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ abitype: 1.0.9(typescript@5.9.3)(zod@4.4.3)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - asn1.js
+ - supports-color
+ - typescript
+ - zod
+
+ '@latticexyz/schema-type@2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
+ dependencies:
+ abitype: 1.0.9(typescript@5.9.3)(zod@4.4.3)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - typescript
+ - zod
+
+ '@latticexyz/store@2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
+ dependencies:
+ '@ark/util': 0.2.2
+ '@latticexyz/common': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@latticexyz/config': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@latticexyz/protocol-parser': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@latticexyz/schema-type': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ abitype: 1.0.9(typescript@5.9.3)(zod@4.4.3)
+ arktype: 2.0.0-beta.6
+ debug: 4.4.3
+ optionalDependencies:
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - asn1.js
+ - supports-color
+ - typescript
+ - zod
+
+ '@latticexyz/world@2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
+ dependencies:
+ '@ark/util': 0.2.2
+ '@latticexyz/block-logs-stream': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@latticexyz/common': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@latticexyz/config': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@latticexyz/protocol-parser': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@latticexyz/schema-type': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@latticexyz/store': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ abitype: 1.0.9(typescript@5.9.3)(zod@4.4.3)
+ arktype: 2.0.0-beta.6
+ debug: 4.4.3
+ optionalDependencies:
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - asn1.js
+ - supports-color
+ - typescript
+ - zod
+
+ '@ledgerhq/client-ids@0.2.1(react@18.3.1)':
+ dependencies:
+ '@ledgerhq/live-env': 2.23.0
+ '@reduxjs/toolkit': 2.8.2(react@18.3.1)
+ uuid: 9.0.1
+ transitivePeerDependencies:
+ - react
+ - react-redux
+
+ '@ledgerhq/client-ids@0.2.1(react@19.0.0)':
+ dependencies:
+ '@ledgerhq/live-env': 2.23.0
+ '@reduxjs/toolkit': 2.8.2(react@19.0.0)
+ uuid: 9.0.1
+ transitivePeerDependencies:
+ - react
+ - react-redux
+
+ '@ledgerhq/cryptoassets-evm-signatures@13.7.1':
+ dependencies:
+ '@ledgerhq/live-env': 2.23.0
+ axios: 1.12.2
+ transitivePeerDependencies:
+ - debug
+
+ '@ledgerhq/devices@8.7.0':
+ dependencies:
+ '@ledgerhq/errors': 6.28.0
+ '@ledgerhq/logs': 6.13.0
+ rxjs: 7.8.2
semver: 7.7.2
'@ledgerhq/devices@8.8.0':
@@ -9837,6 +11227,10 @@ snapshots:
dependencies:
'@noble/hashes': 1.3.2
+ '@noble/curves@1.4.2':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
'@noble/curves@1.8.2':
dependencies:
'@noble/hashes': 1.7.2
@@ -9857,14 +11251,22 @@ snapshots:
dependencies:
'@noble/hashes': 2.0.1
+ '@noble/curves@2.2.0':
+ dependencies:
+ '@noble/hashes': 2.2.0
+
'@noble/hashes@1.3.2': {}
+ '@noble/hashes@1.4.0': {}
+
'@noble/hashes@1.7.2': {}
'@noble/hashes@1.8.0': {}
'@noble/hashes@2.0.1': {}
+ '@noble/hashes@2.2.0': {}
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -10128,6 +11530,8 @@ snapshots:
'@opentelemetry/semantic-conventions@1.27.0': {}
+ '@openzeppelin/contracts@5.6.1': {}
+
'@oven/bun-darwin-aarch64@1.2.22':
optional: true
@@ -10252,7 +11656,7 @@ snapshots:
pino-pretty: 10.3.1
prom-client: 14.2.0
type-fest: 4.39.0
- viem: 2.43.5(typescript@5.9.3)(zod@3.23.8)
+ viem: 2.55.10(typescript@5.9.3)(zod@3.23.8)
yargs: 17.7.2
zod: 3.23.8
zod-validation-error: 1.5.0(zod@3.23.8)
@@ -10269,10 +11673,18 @@ snapshots:
- '@opentelemetry/api'
- supports-color
+ '@pinojs/redact@0.4.0': {}
+
'@playwright/test@1.55.1':
dependencies:
playwright: 1.55.1
+ '@ponder/utils@0.2.18(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))':
+ dependencies:
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ optionalDependencies:
+ typescript: 5.9.3
+
'@prettier/sync@0.6.1(prettier@3.6.2)':
dependencies:
make-synchronized: 0.8.0
@@ -11140,10 +12552,18 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.52.2':
optional: true
+ '@scure/base@1.1.9': {}
+
'@scure/base@1.2.5': {}
'@scure/base@2.0.0': {}
+ '@scure/bip32@1.4.0':
+ dependencies:
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@scure/base': 1.1.9
+
'@scure/bip32@1.7.0':
dependencies:
'@noble/curves': 1.9.1
@@ -11156,6 +12576,11 @@ snapshots:
'@noble/hashes': 2.0.1
'@scure/base': 2.0.0
+ '@scure/bip39@1.3.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+ '@scure/base': 1.1.9
+
'@scure/bip39@1.6.0':
dependencies:
'@noble/hashes': 1.8.0
@@ -11200,26 +12625,26 @@ snapshots:
dependencies:
'@sentry/types': 7.119.2
- '@shazow/whatsabi@0.23.0(@noble/hashes@1.8.0)(typescript@5.6.2)(zod@3.25.76)':
+ '@shazow/whatsabi@0.23.0(@noble/hashes@1.8.0)(typescript@5.6.2)(zod@4.4.3)':
dependencies:
'@noble/hashes': 1.8.0
- ox: 0.9.17(typescript@5.6.2)(zod@3.25.76)
+ ox: 0.9.17(typescript@5.6.2)(zod@4.4.3)
transitivePeerDependencies:
- typescript
- zod
- '@shazow/whatsabi@0.23.0(@noble/hashes@1.8.0)(typescript@5.9.3)(zod@3.25.76)':
+ '@shazow/whatsabi@0.23.0(@noble/hashes@1.8.0)(typescript@7.0.2)(zod@4.4.3)':
dependencies:
'@noble/hashes': 1.8.0
- ox: 0.9.17(typescript@5.9.3)(zod@3.25.76)
+ ox: 0.9.17(typescript@7.0.2)(zod@4.4.3)
transitivePeerDependencies:
- typescript
- zod
- '@shazow/whatsabi@0.23.0(@noble/hashes@2.0.1)(typescript@5.9.3)(zod@3.25.76)':
+ '@shazow/whatsabi@0.23.0(@noble/hashes@2.2.0)(typescript@5.9.3)(zod@4.4.3)':
dependencies:
- '@noble/hashes': 2.0.1
- ox: 0.9.17(typescript@5.9.3)(zod@3.25.76)
+ '@noble/hashes': 2.2.0
+ ox: 0.9.17(typescript@5.9.3)(zod@4.4.3)
transitivePeerDependencies:
- typescript
- zod
@@ -11266,11 +12691,11 @@ snapshots:
'@shikijs/core': 1.29.2
'@shikijs/types': 1.29.2
- '@shikijs/twoslash@1.29.2(typescript@5.9.3)':
+ '@shikijs/twoslash@1.29.2(typescript@7.0.2)':
dependencies:
'@shikijs/core': 1.29.2
'@shikijs/types': 1.29.2
- twoslash: 0.2.12(typescript@5.9.3)
+ twoslash: 0.2.12(typescript@7.0.2)
transitivePeerDependencies:
- supports-color
- typescript
@@ -11298,11 +12723,11 @@ snapshots:
dependencies:
size-limit: 11.2.0
- '@size-limit/preset-big-lib@11.2.0(size-limit@11.2.0)':
+ '@size-limit/preset-big-lib@11.2.0(esbuild@0.28.1)(size-limit@11.2.0)':
dependencies:
'@size-limit/file': 11.2.0(size-limit@11.2.0)
'@size-limit/time': 11.2.0(size-limit@11.2.0)
- '@size-limit/webpack': 11.2.0(size-limit@11.2.0)
+ '@size-limit/webpack': 11.2.0(esbuild@0.28.1)(size-limit@11.2.0)
size-limit: 11.2.0
transitivePeerDependencies:
- '@swc/core'
@@ -11324,11 +12749,11 @@ snapshots:
- supports-color
- utf-8-validate
- '@size-limit/webpack@11.2.0(size-limit@11.2.0)':
+ '@size-limit/webpack@11.2.0(esbuild@0.28.1)(size-limit@11.2.0)':
dependencies:
nanoid: 5.1.6
size-limit: 11.2.0
- webpack: 5.101.3
+ webpack: 5.101.3(esbuild@0.28.1)
transitivePeerDependencies:
- '@swc/core'
- esbuild
@@ -11339,43 +12764,69 @@ snapshots:
dependencies:
'@solana/kit': 2.3.0(typescript@5.6.2)(ws@8.18.3)
- '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3))':
+ '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(typescript@5.9.3))':
+ dependencies:
+ '@solana/kit': 2.3.0(typescript@5.9.3)
+
+ '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))':
dependencies:
- '@solana/kit': 2.3.0(typescript@5.9.3)(ws@8.18.3)
+ '@solana/kit': 2.3.0(typescript@7.0.2)(ws@8.18.3)
'@solana-program/stake@0.2.1(@solana/kit@2.3.0(typescript@5.6.2)(ws@8.18.3))':
dependencies:
'@solana/kit': 2.3.0(typescript@5.6.2)(ws@8.18.3)
- '@solana-program/stake@0.2.1(@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3))':
+ '@solana-program/stake@0.2.1(@solana/kit@2.3.0(typescript@5.9.3))':
+ dependencies:
+ '@solana/kit': 2.3.0(typescript@5.9.3)
+
+ '@solana-program/stake@0.2.1(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))':
dependencies:
- '@solana/kit': 2.3.0(typescript@5.9.3)(ws@8.18.3)
+ '@solana/kit': 2.3.0(typescript@7.0.2)(ws@8.18.3)
'@solana-program/system@0.7.0(@solana/kit@2.3.0(typescript@5.6.2)(ws@8.18.3))':
dependencies:
'@solana/kit': 2.3.0(typescript@5.6.2)(ws@8.18.3)
- '@solana-program/system@0.7.0(@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3))':
+ '@solana-program/system@0.7.0(@solana/kit@2.3.0(typescript@5.9.3))':
+ dependencies:
+ '@solana/kit': 2.3.0(typescript@5.9.3)
+
+ '@solana-program/system@0.7.0(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))':
dependencies:
- '@solana/kit': 2.3.0(typescript@5.9.3)(ws@8.18.3)
+ '@solana/kit': 2.3.0(typescript@7.0.2)(ws@8.18.3)
'@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(typescript@5.6.2)(ws@8.18.3))(@solana/sysvars@2.3.0(typescript@5.9.3))':
dependencies:
'@solana/kit': 2.3.0(typescript@5.6.2)(ws@8.18.3)
'@solana/sysvars': 2.3.0(typescript@5.9.3)
- '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3))(@solana/sysvars@2.3.0(typescript@5.9.3))':
+ '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(typescript@5.9.3))(@solana/sysvars@2.3.0(typescript@5.9.3))':
+ dependencies:
+ '@solana/kit': 2.3.0(typescript@5.9.3)
+ '@solana/sysvars': 2.3.0(typescript@5.9.3)
+
+ '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))(@solana/sysvars@2.3.0(typescript@5.9.3))':
dependencies:
- '@solana/kit': 2.3.0(typescript@5.9.3)(ws@8.18.3)
+ '@solana/kit': 2.3.0(typescript@7.0.2)(ws@8.18.3)
'@solana/sysvars': 2.3.0(typescript@5.9.3)
+ '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))(@solana/sysvars@2.3.0(typescript@7.0.2))':
+ dependencies:
+ '@solana/kit': 2.3.0(typescript@7.0.2)(ws@8.18.3)
+ '@solana/sysvars': 2.3.0(typescript@7.0.2)
+
'@solana-program/token@0.5.1(@solana/kit@2.3.0(typescript@5.6.2)(ws@8.18.3))':
dependencies:
'@solana/kit': 2.3.0(typescript@5.6.2)(ws@8.18.3)
- '@solana-program/token@0.5.1(@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3))':
+ '@solana-program/token@0.5.1(@solana/kit@2.3.0(typescript@5.9.3))':
dependencies:
- '@solana/kit': 2.3.0(typescript@5.9.3)(ws@8.18.3)
+ '@solana/kit': 2.3.0(typescript@5.9.3)
+
+ '@solana-program/token@0.5.1(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))':
+ dependencies:
+ '@solana/kit': 2.3.0(typescript@7.0.2)(ws@8.18.3)
'@solana/accounts@2.3.0(typescript@5.6.2)':
dependencies:
@@ -11401,6 +12852,18 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/accounts@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/addresses': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-strings': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-spec': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-types': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/addresses@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/assertions': 2.3.0(typescript@5.6.2)
@@ -11423,6 +12886,17 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/addresses@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/assertions': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-strings': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/nominal-types': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/assertions@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/errors': 2.3.0(typescript@5.6.2)
@@ -11433,6 +12907,11 @@ snapshots:
'@solana/errors': 2.3.0(typescript@5.9.3)
typescript: 5.9.3
+ '@solana/assertions@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+
'@solana/codecs-core@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/errors': 2.3.0(typescript@5.6.2)
@@ -11443,6 +12922,11 @@ snapshots:
'@solana/errors': 2.3.0(typescript@5.9.3)
typescript: 5.9.3
+ '@solana/codecs-core@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+
'@solana/codecs-data-structures@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/codecs-core': 2.3.0(typescript@5.6.2)
@@ -11457,6 +12941,13 @@ snapshots:
'@solana/errors': 2.3.0(typescript@5.9.3)
typescript: 5.9.3
+ '@solana/codecs-data-structures@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-numbers': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+
'@solana/codecs-numbers@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/codecs-core': 2.3.0(typescript@5.6.2)
@@ -11469,6 +12960,12 @@ snapshots:
'@solana/errors': 2.3.0(typescript@5.9.3)
typescript: 5.9.3
+ '@solana/codecs-numbers@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+
'@solana/codecs-strings@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/codecs-core': 2.3.0(typescript@5.6.2)
@@ -11483,6 +12980,13 @@ snapshots:
'@solana/errors': 2.3.0(typescript@5.9.3)
typescript: 5.9.3
+ '@solana/codecs-strings@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-numbers': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+
'@solana/codecs@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/codecs-core': 2.3.0(typescript@5.6.2)
@@ -11505,6 +13009,17 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/codecs@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-data-structures': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-numbers': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-strings': 2.3.0(typescript@7.0.2)
+ '@solana/options': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/errors@2.3.0(typescript@5.6.2)':
dependencies:
chalk: 5.4.1
@@ -11517,6 +13032,12 @@ snapshots:
commander: 14.0.2
typescript: 5.9.3
+ '@solana/errors@2.3.0(typescript@7.0.2)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 14.0.2
+ typescript: 7.0.2
+
'@solana/fast-stable-stringify@2.3.0(typescript@5.6.2)':
dependencies:
typescript: 5.6.2
@@ -11525,6 +13046,10 @@ snapshots:
dependencies:
typescript: 5.9.3
+ '@solana/fast-stable-stringify@2.3.0(typescript@7.0.2)':
+ dependencies:
+ typescript: 7.0.2
+
'@solana/functional@2.3.0(typescript@5.6.2)':
dependencies:
typescript: 5.6.2
@@ -11533,6 +13058,10 @@ snapshots:
dependencies:
typescript: 5.9.3
+ '@solana/functional@2.3.0(typescript@7.0.2)':
+ dependencies:
+ typescript: 7.0.2
+
'@solana/instructions@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/codecs-core': 2.3.0(typescript@5.6.2)
@@ -11545,6 +13074,12 @@ snapshots:
'@solana/errors': 2.3.0(typescript@5.9.3)
typescript: 5.9.3
+ '@solana/instructions@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+
'@solana/keys@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/assertions': 2.3.0(typescript@5.6.2)
@@ -11567,6 +13102,17 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/keys@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/assertions': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-strings': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/nominal-types': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/kit@2.3.0(typescript@5.6.2)(ws@8.18.3)':
dependencies:
'@solana/accounts': 2.3.0(typescript@5.6.2)
@@ -11592,7 +13138,7 @@ snapshots:
- fastestsmallesttextencoderdecoder
- ws
- '@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3)':
+ '@solana/kit@2.3.0(typescript@5.9.3)':
dependencies:
'@solana/accounts': 2.3.0(typescript@5.9.3)
'@solana/addresses': 2.3.0(typescript@5.9.3)
@@ -11605,11 +13151,11 @@ snapshots:
'@solana/rpc': 2.3.0(typescript@5.9.3)
'@solana/rpc-parsed-types': 2.3.0(typescript@5.9.3)
'@solana/rpc-spec-types': 2.3.0(typescript@5.9.3)
- '@solana/rpc-subscriptions': 2.3.0(typescript@5.9.3)(ws@8.18.3)
+ '@solana/rpc-subscriptions': 2.3.0(typescript@5.9.3)
'@solana/rpc-types': 2.3.0(typescript@5.9.3)
'@solana/signers': 2.3.0(typescript@5.9.3)
'@solana/sysvars': 2.3.0(typescript@5.9.3)
- '@solana/transaction-confirmation': 2.3.0(typescript@5.9.3)(ws@8.18.3)
+ '@solana/transaction-confirmation': 2.3.0(typescript@5.9.3)
'@solana/transaction-messages': 2.3.0(typescript@5.9.3)
'@solana/transactions': 2.3.0(typescript@5.9.3)
typescript: 5.9.3
@@ -11617,6 +13163,31 @@ snapshots:
- fastestsmallesttextencoderdecoder
- ws
+ '@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3)':
+ dependencies:
+ '@solana/accounts': 2.3.0(typescript@7.0.2)
+ '@solana/addresses': 2.3.0(typescript@7.0.2)
+ '@solana/codecs': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/functional': 2.3.0(typescript@7.0.2)
+ '@solana/instructions': 2.3.0(typescript@7.0.2)
+ '@solana/keys': 2.3.0(typescript@7.0.2)
+ '@solana/programs': 2.3.0(typescript@7.0.2)
+ '@solana/rpc': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-parsed-types': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-spec-types': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-subscriptions': 2.3.0(typescript@7.0.2)(ws@8.18.3)
+ '@solana/rpc-types': 2.3.0(typescript@7.0.2)
+ '@solana/signers': 2.3.0(typescript@7.0.2)
+ '@solana/sysvars': 2.3.0(typescript@7.0.2)
+ '@solana/transaction-confirmation': 2.3.0(typescript@7.0.2)(ws@8.18.3)
+ '@solana/transaction-messages': 2.3.0(typescript@7.0.2)
+ '@solana/transactions': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - ws
+
'@solana/nominal-types@2.3.0(typescript@5.6.2)':
dependencies:
typescript: 5.6.2
@@ -11625,6 +13196,10 @@ snapshots:
dependencies:
typescript: 5.9.3
+ '@solana/nominal-types@2.3.0(typescript@7.0.2)':
+ dependencies:
+ typescript: 7.0.2
+
'@solana/options@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/codecs-core': 2.3.0(typescript@5.6.2)
@@ -11647,6 +13222,17 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/options@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-data-structures': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-numbers': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-strings': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/programs@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/addresses': 2.3.0(typescript@5.6.2)
@@ -11663,6 +13249,14 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/programs@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/addresses': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/promises@2.3.0(typescript@5.6.2)':
dependencies:
typescript: 5.6.2
@@ -11671,6 +13265,10 @@ snapshots:
dependencies:
typescript: 5.9.3
+ '@solana/promises@2.3.0(typescript@7.0.2)':
+ dependencies:
+ typescript: 7.0.2
+
'@solana/rpc-api@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/addresses': 2.3.0(typescript@5.6.2)
@@ -11705,6 +13303,23 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/rpc-api@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/addresses': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-strings': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/keys': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-parsed-types': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-spec': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-transformers': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-types': 2.3.0(typescript@7.0.2)
+ '@solana/transaction-messages': 2.3.0(typescript@7.0.2)
+ '@solana/transactions': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/rpc-parsed-types@2.3.0(typescript@5.6.2)':
dependencies:
typescript: 5.6.2
@@ -11713,6 +13328,10 @@ snapshots:
dependencies:
typescript: 5.9.3
+ '@solana/rpc-parsed-types@2.3.0(typescript@7.0.2)':
+ dependencies:
+ typescript: 7.0.2
+
'@solana/rpc-spec-types@2.3.0(typescript@5.6.2)':
dependencies:
typescript: 5.6.2
@@ -11721,6 +13340,10 @@ snapshots:
dependencies:
typescript: 5.9.3
+ '@solana/rpc-spec-types@2.3.0(typescript@7.0.2)':
+ dependencies:
+ typescript: 7.0.2
+
'@solana/rpc-spec@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/errors': 2.3.0(typescript@5.6.2)
@@ -11733,6 +13356,12 @@ snapshots:
'@solana/rpc-spec-types': 2.3.0(typescript@5.9.3)
typescript: 5.9.3
+ '@solana/rpc-spec@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-spec-types': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+
'@solana/rpc-subscriptions-api@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/addresses': 2.3.0(typescript@5.6.2)
@@ -11759,6 +13388,19 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/rpc-subscriptions-api@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/addresses': 2.3.0(typescript@7.0.2)
+ '@solana/keys': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-subscriptions-spec': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-transformers': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-types': 2.3.0(typescript@7.0.2)
+ '@solana/transaction-messages': 2.3.0(typescript@7.0.2)
+ '@solana/transactions': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.6.2)(ws@8.18.3)':
dependencies:
'@solana/errors': 2.3.0(typescript@5.6.2)
@@ -11768,13 +13410,21 @@ snapshots:
typescript: 5.6.2
ws: 8.18.3
- '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.9.3)(ws@8.18.3)':
+ '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.9.3)':
dependencies:
'@solana/errors': 2.3.0(typescript@5.9.3)
'@solana/functional': 2.3.0(typescript@5.9.3)
'@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3)
'@solana/subscribable': 2.3.0(typescript@5.9.3)
typescript: 5.9.3
+
+ '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@7.0.2)(ws@8.18.3)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/functional': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-subscriptions-spec': 2.3.0(typescript@7.0.2)
+ '@solana/subscribable': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
ws: 8.18.3
'@solana/rpc-subscriptions-spec@2.3.0(typescript@5.6.2)':
@@ -11793,6 +13443,14 @@ snapshots:
'@solana/subscribable': 2.3.0(typescript@5.9.3)
typescript: 5.9.3
+ '@solana/rpc-subscriptions-spec@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/promises': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-spec-types': 2.3.0(typescript@7.0.2)
+ '@solana/subscribable': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+
'@solana/rpc-subscriptions@2.3.0(typescript@5.6.2)(ws@8.18.3)':
dependencies:
'@solana/errors': 2.3.0(typescript@5.6.2)
@@ -11811,7 +13469,7 @@ snapshots:
- fastestsmallesttextencoderdecoder
- ws
- '@solana/rpc-subscriptions@2.3.0(typescript@5.9.3)(ws@8.18.3)':
+ '@solana/rpc-subscriptions@2.3.0(typescript@5.9.3)':
dependencies:
'@solana/errors': 2.3.0(typescript@5.9.3)
'@solana/fast-stable-stringify': 2.3.0(typescript@5.9.3)
@@ -11819,7 +13477,7 @@ snapshots:
'@solana/promises': 2.3.0(typescript@5.9.3)
'@solana/rpc-spec-types': 2.3.0(typescript@5.9.3)
'@solana/rpc-subscriptions-api': 2.3.0(typescript@5.9.3)
- '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.9.3)(ws@8.18.3)
+ '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.9.3)
'@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3)
'@solana/rpc-transformers': 2.3.0(typescript@5.9.3)
'@solana/rpc-types': 2.3.0(typescript@5.9.3)
@@ -11829,6 +13487,24 @@ snapshots:
- fastestsmallesttextencoderdecoder
- ws
+ '@solana/rpc-subscriptions@2.3.0(typescript@7.0.2)(ws@8.18.3)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/fast-stable-stringify': 2.3.0(typescript@7.0.2)
+ '@solana/functional': 2.3.0(typescript@7.0.2)
+ '@solana/promises': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-spec-types': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-subscriptions-api': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@7.0.2)(ws@8.18.3)
+ '@solana/rpc-subscriptions-spec': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-transformers': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-types': 2.3.0(typescript@7.0.2)
+ '@solana/subscribable': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - ws
+
'@solana/rpc-transformers@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/errors': 2.3.0(typescript@5.6.2)
@@ -11851,6 +13527,17 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/rpc-transformers@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/functional': 2.3.0(typescript@7.0.2)
+ '@solana/nominal-types': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-spec-types': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-types': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/rpc-transport-http@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/errors': 2.3.0(typescript@5.6.2)
@@ -11867,6 +13554,14 @@ snapshots:
typescript: 5.9.3
undici-types: 7.12.0
+ '@solana/rpc-transport-http@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-spec': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-spec-types': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ undici-types: 7.12.0
+
'@solana/rpc-types@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/addresses': 2.3.0(typescript@5.6.2)
@@ -11891,6 +13586,18 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/rpc-types@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/addresses': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-numbers': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-strings': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/nominal-types': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/rpc@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/errors': 2.3.0(typescript@5.6.2)
@@ -11921,6 +13628,21 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/rpc@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/fast-stable-stringify': 2.3.0(typescript@7.0.2)
+ '@solana/functional': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-api': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-spec': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-spec-types': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-transformers': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-transport-http': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-types': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/signers@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/addresses': 2.3.0(typescript@5.6.2)
@@ -11949,6 +13671,20 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/signers@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/addresses': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/instructions': 2.3.0(typescript@7.0.2)
+ '@solana/keys': 2.3.0(typescript@7.0.2)
+ '@solana/nominal-types': 2.3.0(typescript@7.0.2)
+ '@solana/transaction-messages': 2.3.0(typescript@7.0.2)
+ '@solana/transactions': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/subscribable@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/errors': 2.3.0(typescript@5.6.2)
@@ -11959,6 +13695,11 @@ snapshots:
'@solana/errors': 2.3.0(typescript@5.9.3)
typescript: 5.9.3
+ '@solana/subscribable@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+
'@solana/sysvars@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/accounts': 2.3.0(typescript@5.6.2)
@@ -11979,6 +13720,16 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/sysvars@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/accounts': 2.3.0(typescript@7.0.2)
+ '@solana/codecs': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-types': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/transaction-confirmation@2.3.0(typescript@5.6.2)(ws@8.18.3)':
dependencies:
'@solana/addresses': 2.3.0(typescript@5.6.2)
@@ -11996,7 +13747,7 @@ snapshots:
- fastestsmallesttextencoderdecoder
- ws
- '@solana/transaction-confirmation@2.3.0(typescript@5.9.3)(ws@8.18.3)':
+ '@solana/transaction-confirmation@2.3.0(typescript@5.9.3)':
dependencies:
'@solana/addresses': 2.3.0(typescript@5.9.3)
'@solana/codecs-strings': 2.3.0(typescript@5.9.3)
@@ -12004,7 +13755,7 @@ snapshots:
'@solana/keys': 2.3.0(typescript@5.9.3)
'@solana/promises': 2.3.0(typescript@5.9.3)
'@solana/rpc': 2.3.0(typescript@5.9.3)
- '@solana/rpc-subscriptions': 2.3.0(typescript@5.9.3)(ws@8.18.3)
+ '@solana/rpc-subscriptions': 2.3.0(typescript@5.9.3)
'@solana/rpc-types': 2.3.0(typescript@5.9.3)
'@solana/transaction-messages': 2.3.0(typescript@5.9.3)
'@solana/transactions': 2.3.0(typescript@5.9.3)
@@ -12013,6 +13764,23 @@ snapshots:
- fastestsmallesttextencoderdecoder
- ws
+ '@solana/transaction-confirmation@2.3.0(typescript@7.0.2)(ws@8.18.3)':
+ dependencies:
+ '@solana/addresses': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-strings': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/keys': 2.3.0(typescript@7.0.2)
+ '@solana/promises': 2.3.0(typescript@7.0.2)
+ '@solana/rpc': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-subscriptions': 2.3.0(typescript@7.0.2)(ws@8.18.3)
+ '@solana/rpc-types': 2.3.0(typescript@7.0.2)
+ '@solana/transaction-messages': 2.3.0(typescript@7.0.2)
+ '@solana/transactions': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - ws
+
'@solana/transaction-messages@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/addresses': 2.3.0(typescript@5.6.2)
@@ -12043,6 +13811,21 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/transaction-messages@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/addresses': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-data-structures': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-numbers': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/functional': 2.3.0(typescript@7.0.2)
+ '@solana/instructions': 2.3.0(typescript@7.0.2)
+ '@solana/nominal-types': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-types': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
'@solana/transactions@2.3.0(typescript@5.6.2)':
dependencies:
'@solana/addresses': 2.3.0(typescript@5.6.2)
@@ -12079,8 +13862,34 @@ snapshots:
transitivePeerDependencies:
- fastestsmallesttextencoderdecoder
+ '@solana/transactions@2.3.0(typescript@7.0.2)':
+ dependencies:
+ '@solana/addresses': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-core': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-data-structures': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-numbers': 2.3.0(typescript@7.0.2)
+ '@solana/codecs-strings': 2.3.0(typescript@7.0.2)
+ '@solana/errors': 2.3.0(typescript@7.0.2)
+ '@solana/functional': 2.3.0(typescript@7.0.2)
+ '@solana/instructions': 2.3.0(typescript@7.0.2)
+ '@solana/keys': 2.3.0(typescript@7.0.2)
+ '@solana/nominal-types': 2.3.0(typescript@7.0.2)
+ '@solana/rpc-types': 2.3.0(typescript@7.0.2)
+ '@solana/transaction-messages': 2.3.0(typescript@7.0.2)
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solidity-parser/parser@0.16.2':
+ dependencies:
+ antlr4ts: 0.5.0-alpha.4
+
+ '@solidity-parser/parser@0.17.0': {}
+
'@standard-schema/spec@1.0.0': {}
+ '@standard-schema/spec@1.1.0': {}
+
'@standard-schema/utils@0.3.0': {}
'@stellar/js-xdr@3.1.2': {}
@@ -12174,74 +13983,1024 @@ snapshots:
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.15
'@tailwindcss/oxide-win32-x64-msvc': 4.1.15
- '@tailwindcss/vite@4.1.15(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))':
+ '@tailwindcss/vite@4.1.15(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))':
dependencies:
'@tailwindcss/node': 4.1.15
'@tailwindcss/oxide': 4.1.15
tailwindcss: 4.1.15
- vite: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ vite: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
+
+ '@tevm/actions@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)':
+ dependencies:
+ '@evmts/zevm': 0.0.0
+ '@tevm/address': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/block': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/blockchain': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/common': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/consensus': 1.0.0-rc.152
+ '@tevm/contract': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/jsonrpc': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))
+ '@tevm/node': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/receipt-manager': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/state': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/vm': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ zod: 4.4.3
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@farmfe/core'
+ - '@rspack/core'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - vite
+ - webpack
- '@tevm/chains@0.0.1(typescript@5.6.2)':
+ '@tevm/address@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
dependencies:
- typescript: 5.6.2
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - zod
- '@tevm/chains@0.0.1(typescript@5.9.3)':
+ '@tevm/base-bundler@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
+ dependencies:
+ '@tevm/bundler-cache': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/compiler': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/config': 1.0.0-rc.151
+ '@tevm/runtime': 1.0.0-rc.151
+ '@tevm/solc': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/tsconfig': 1.0.0-rc.151
+ '@tevm/tsupconfig': 1.0.0-rc.151
+ '@types/node': 25.9.5
+ effect: 3.21.2
+ solc: 0.8.35
+ solidity-ast: 0.4.62
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - viem
+ - zod
+
+ '@tevm/block@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
dependencies:
- typescript: 5.9.3
+ '@evmts/zevm': 0.0.0
+ '@tevm/common': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - viem
+ - zod
- '@tevm/voltaire@0.1.40(@noble/hashes@1.8.0)(@solana/sysvars@2.3.0(typescript@5.9.3))(abitype@1.2.3(typescript@5.9.3)(zod@3.25.76))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.6.2)(ws@8.18.3)(zod@3.25.76)':
+ '@tevm/blockchain@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
dependencies:
- '@adraffy/ens-normalize': 1.11.1
- '@codesandbox/sandpack-react': 2.20.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@ledgerhq/hw-app-eth': 6.47.1(react@19.0.0)
- '@ledgerhq/hw-transport-webusb': 6.29.15
- '@noble/ciphers': 2.1.1
- '@scure/bip32': 2.0.1
- '@scure/bip39': 2.0.1
- '@shazow/whatsabi': 0.23.0(@noble/hashes@1.8.0)(typescript@5.6.2)(zod@3.25.76)
- '@tevm/chains': 0.0.1(typescript@5.6.2)
- '@trezor/connect-web': 9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.6.2)(ws@8.18.3)
- modern-monaco: 0.3.6(typescript@5.6.2)
- optionalDependencies:
- abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76)
- effect: 3.19.14
- ffi-napi: 4.0.3
- ref-napi: 3.0.3
+ '@evmts/zevm': 0.0.0
+ '@tevm/block': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/common': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/jsonrpc': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))
+ '@tevm/logger': 1.0.0-rc.151
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
transitivePeerDependencies:
- - '@noble/hashes'
- - '@solana/sysvars'
- bufferutil
- - debug
- - encoding
- - expo-constants
- - expo-localization
- - fastestsmallesttextencoderdecoder
- - react
- - react-dom
- - react-native
- - react-redux
- supports-color
- - tslib
- typescript
- utf-8-validate
- - ws
- zod
- '@tevm/voltaire@0.1.40(@noble/hashes@1.8.0)(@solana/sysvars@2.3.0(typescript@5.9.3))(abitype@1.2.3(typescript@5.9.3)(zod@3.25.76))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.9.3)(ws@8.18.3)(zod@3.25.76)':
+ '@tevm/bun-plugin@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
dependencies:
- '@adraffy/ens-normalize': 1.11.1
+ '@tevm/base-bundler': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/bundler-cache': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/config': 1.0.0-rc.151
+ '@tevm/solc': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ effect: 3.21.2
+ solc: 0.8.35
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - viem
+ - zod
+
+ '@tevm/bundler-cache@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
+ dependencies:
+ '@tevm/compiler': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/tsconfig': 1.0.0-rc.151
+ '@tevm/tsupconfig': 1.0.0-rc.151
+ '@types/node': 25.9.5
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - viem
+ - zod
+
+ '@tevm/chains@0.0.1(typescript@5.6.2)':
+ dependencies:
+ typescript: 5.6.2
+
+ '@tevm/chains@0.0.1(typescript@5.9.3)':
+ dependencies:
+ typescript: 5.9.3
+
+ '@tevm/chains@0.0.1(typescript@7.0.2)':
+ dependencies:
+ typescript: 7.0.2
+
+ '@tevm/client-types@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)':
+ dependencies:
+ '@tevm/actions': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@farmfe/core'
+ - '@rspack/core'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - viem
+ - vite
+ - webpack
+ - zod
+
+ '@tevm/common@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
+ dependencies:
+ '@evmts/zevm': 0.0.0
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/logger': 1.0.0-rc.151
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - zod
+
+ '@tevm/compiler@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
+ dependencies:
+ '@tevm/config': 1.0.0-rc.151
+ '@tevm/logger': 1.0.0-rc.151
+ '@tevm/resolutions': 1.0.0-rc.151
+ '@tevm/solc': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@types/node': 25.9.5
+ abitype: 1.2.3(typescript@5.9.3)(zod@4.4.3)
+ effect: 3.21.2
+ resolve: 1.22.12
+ solc-typed-ast: 18.2.6(typescript@5.9.3)(zod@4.4.3)
+ solidity-ast: 0.4.62
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - viem
+ - zod
+
+ '@tevm/config@1.0.0-rc.151':
+ dependencies:
+ '@effect/schema': 0.75.5(effect@3.21.2)
+ '@tevm/effect': 1.0.0-rc.151
+ '@types/node': 25.9.5
+ effect: 3.21.2
+ zod: 4.4.3
+
+ '@tevm/consensus@1.0.0-rc.152': {}
+
+ '@tevm/contract@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
+ dependencies:
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - viem
+ - zod
+
+ '@tevm/decorators@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)':
+ dependencies:
+ '@tevm/actions': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/node': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@farmfe/core'
+ - '@rspack/core'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - vite
+ - webpack
+ - zod
+
+ '@tevm/effect@1.0.0-rc.151':
+ dependencies:
+ effect: 3.21.2
+ jsonc-parser: 3.3.1
+ resolve: 1.22.12
+
+ '@tevm/errors@1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)':
+ dependencies:
+ '@evmts/zevm': 0.0.0
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - zod
+
+ '@tevm/esbuild-plugin@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))':
+ dependencies:
+ '@tevm/unplugin': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - viem
+ - vite
+ - webpack
+
+ '@tevm/evm@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)':
+ dependencies:
+ '@evmts/zevm': 0.0.0
+ '@tevm/blockchain': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/common': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/logger': 1.0.0-rc.151
+ '@tevm/predeploys': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/state': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@farmfe/core'
+ - '@rspack/core'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - viem
+ - vite
+ - webpack
+ - zod
+
+ '@tevm/http-client@1.0.0-rc.151(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.6.0)(lightningcss@1.30.2)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(yaml@2.8.1)(zod@4.4.3)':
+ dependencies:
+ '@tevm/address': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/contract': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/memory-client': 1.0.0-rc.151(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.6.0)(lightningcss@1.30.2)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(yaml@2.8.1)(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/viem': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@edge-runtime/vm'
+ - '@farmfe/core'
+ - '@opentelemetry/api'
+ - '@rspack/core'
+ - '@types/node'
+ - '@vitest/browser-playwright'
+ - '@vitest/browser-preview'
+ - '@vitest/browser-webdriverio'
+ - '@vitest/coverage-istanbul'
+ - '@vitest/coverage-v8'
+ - '@vitest/ui'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - happy-dom
+ - jiti
+ - jsdom
+ - less
+ - lightningcss
+ - msw
+ - rolldown
+ - rollup
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - typescript
+ - unloader
+ - utf-8-validate
+ - vite
+ - webpack
+ - yaml
+ - zod
+
+ '@tevm/jsonrpc@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))':
+ dependencies:
+ '@ponder/utils': 0.2.18(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - typescript
+
+ '@tevm/logger@1.0.0-rc.151':
+ dependencies:
+ pino: 10.3.1
+
+ '@tevm/memory-client@1.0.0-rc.151(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.6.0)(lightningcss@1.30.2)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(yaml@2.8.1)(zod@4.4.3)':
+ dependencies:
+ '@tevm/actions': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/address': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/common': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/contract': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/decorators': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/node': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/predeploys': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ kzg-wasm: 1.0.0
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ vitest: 4.1.10(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@edge-runtime/vm'
+ - '@farmfe/core'
+ - '@opentelemetry/api'
+ - '@rspack/core'
+ - '@types/node'
+ - '@vitest/browser-playwright'
+ - '@vitest/browser-preview'
+ - '@vitest/browser-webdriverio'
+ - '@vitest/coverage-istanbul'
+ - '@vitest/coverage-v8'
+ - '@vitest/ui'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - happy-dom
+ - jiti
+ - jsdom
+ - less
+ - lightningcss
+ - msw
+ - rolldown
+ - rollup
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - typescript
+ - unloader
+ - utf-8-validate
+ - vite
+ - webpack
+ - yaml
+ - zod
+
+ '@tevm/node@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)':
+ dependencies:
+ '@evmts/zevm': 0.0.0
+ '@tevm/address': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/block': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/blockchain': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/common': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/consensus': 1.0.0-rc.152
+ '@tevm/evm': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/jsonrpc': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))
+ '@tevm/logger': 1.0.0-rc.151
+ '@tevm/precompiles': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/predeploys': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/receipt-manager': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/state': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/sync-storage-persister': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/txpool': 1.0.0-rc.151
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/vm': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@farmfe/core'
+ - '@rspack/core'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - vite
+ - webpack
+ - zod
+
+ '@tevm/precompiles@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
+ dependencies:
+ '@evmts/zevm': 0.0.0
+ '@noble/curves': 2.2.0
+ '@tevm/address': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/contract': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - viem
+ - zod
+
+ '@tevm/predeploys@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
+ dependencies:
+ '@tevm/address': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/contract': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - viem
+ - zod
+
+ '@tevm/receipt-manager@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
+ dependencies:
+ '@evmts/zevm': 0.0.0
+ '@tevm/block': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/blockchain': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/common': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - viem
+ - zod
+
+ '@tevm/resolutions@1.0.0-rc.151':
+ dependencies:
+ '@tevm/tsconfig': 1.0.0-rc.151
+ '@tevm/tsupconfig': 1.0.0-rc.151
+ '@types/node': 25.9.5
+ effect: 3.21.2
+ resolve: 1.22.12
+
+ '@tevm/rollup-plugin@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))':
+ dependencies:
+ '@tevm/unplugin': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - viem
+ - vite
+ - webpack
+
+ '@tevm/rspack-plugin@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))':
+ dependencies:
+ '@tevm/unplugin': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - viem
+ - vite
+ - webpack
+
+ '@tevm/runtime@1.0.0-rc.151':
+ dependencies:
+ '@tevm/tsconfig': 1.0.0-rc.151
+ '@tevm/tsupconfig': 1.0.0-rc.151
+ effect: 3.21.2
+
+ '@tevm/server@1.0.0-rc.151(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.6.0)(lightningcss@1.30.2)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(yaml@2.8.1)':
+ dependencies:
+ '@tevm/common': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/decorators': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/jsonrpc': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))
+ '@tevm/memory-client': 1.0.0-rc.151(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.6.0)(lightningcss@1.30.2)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(yaml@2.8.1)(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ commander: 14.0.3
+ zod: 4.4.3
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@edge-runtime/vm'
+ - '@farmfe/core'
+ - '@opentelemetry/api'
+ - '@rspack/core'
+ - '@types/node'
+ - '@vitest/browser-playwright'
+ - '@vitest/browser-preview'
+ - '@vitest/browser-webdriverio'
+ - '@vitest/coverage-istanbul'
+ - '@vitest/coverage-v8'
+ - '@vitest/ui'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - happy-dom
+ - jiti
+ - jsdom
+ - less
+ - lightningcss
+ - msw
+ - rolldown
+ - rollup
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - typescript
+ - unloader
+ - utf-8-validate
+ - viem
+ - vite
+ - webpack
+ - yaml
+
+ '@tevm/solc@1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)':
+ dependencies:
+ '@tevm/tsconfig': 1.0.0-rc.151
+ '@tevm/tsupconfig': 1.0.0-rc.151
+ abitype: 1.3.0(typescript@5.9.3)(zod@4.4.3)
+ solidity-ast: 0.4.62
+ transitivePeerDependencies:
+ - typescript
+ - zod
+
+ '@tevm/state@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)':
+ dependencies:
+ '@evmts/zevm': 0.0.0
+ '@tevm/address': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/common': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/logger': 1.0.0-rc.151
+ '@tevm/test-utils': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ ethereum-cryptography: 3.2.0
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@farmfe/core'
+ - '@rspack/core'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - vite
+ - webpack
+ - zod
+
+ '@tevm/sync-storage-persister@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)':
+ dependencies:
+ '@tevm/state': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@farmfe/core'
+ - '@rspack/core'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - viem
+ - vite
+ - webpack
+ - zod
+
+ '@tevm/test-matchers@1.0.0-rc.151(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.6.0)(lightningcss@1.30.2)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@5.9.3)(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(yaml@2.8.1)(zod@4.4.3)':
+ dependencies:
+ '@tevm/actions': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/contract': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/node': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ abitype: 1.3.0(typescript@5.9.3)(zod@4.4.3)
+ ox: 0.14.33(typescript@5.9.3)(zod@4.4.3)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ vitest: 4.1.10(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@edge-runtime/vm'
+ - '@farmfe/core'
+ - '@opentelemetry/api'
+ - '@rspack/core'
+ - '@types/node'
+ - '@vitest/browser-playwright'
+ - '@vitest/browser-preview'
+ - '@vitest/browser-webdriverio'
+ - '@vitest/coverage-istanbul'
+ - '@vitest/coverage-v8'
+ - '@vitest/ui'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - happy-dom
+ - jiti
+ - jsdom
+ - less
+ - lightningcss
+ - msw
+ - rolldown
+ - rollup
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - typescript
+ - unloader
+ - utf-8-validate
+ - vite
+ - webpack
+ - yaml
+ - zod
+
+ '@tevm/test-utils@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)':
+ dependencies:
+ '@latticexyz/schema-type': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@latticexyz/store': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@latticexyz/world': 2.2.23(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@openzeppelin/contracts': 5.6.1
+ '@ponder/utils': 0.2.18(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))
+ '@tevm/common': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/contract': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/esbuild-plugin': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))
+ '@tevm/ts-plugin': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@farmfe/core'
+ - '@rspack/core'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - vite
+ - webpack
+ - zod
+
+ '@tevm/ts-plugin@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
+ dependencies:
+ '@tevm/base-bundler': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/bundler-cache': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ effect: 3.21.2
+ glob: 13.0.6
+ minimatch: 10.2.6
+ solc: 0.8.35
+ solidity-ast: 0.4.62
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ - viem
+ - zod
+
+ '@tevm/tsconfig@1.0.0-rc.151': {}
+
+ '@tevm/tsupconfig@1.0.0-rc.151':
+ dependencies:
+ '@tevm/tsconfig': 1.0.0-rc.151
+ '@types/node': 25.9.5
+
+ '@tevm/tx@1.0.0-rc.151':
+ dependencies:
+ '@evmts/zevm': 0.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@tevm/txpool@1.0.0-rc.151':
+ dependencies:
+ '@evmts/zevm': 0.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@tevm/unplugin@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))':
+ dependencies:
+ '@tevm/base-bundler': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/bundler-cache': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/config': 1.0.0-rc.151
+ '@tevm/solc': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ effect: 3.21.2
+ solc: 0.8.35
+ unplugin: 3.3.0(esbuild@0.28.1)(rollup@4.52.2)(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))
+ zod: 4.4.3
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - viem
+ - vite
+ - webpack
+
+ '@tevm/utils@1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)':
+ dependencies:
+ '@evmts/zevm': 0.0.0
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ abitype: 1.3.0(typescript@5.9.3)(zod@4.4.3)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - zod
+
+ '@tevm/viem@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)':
+ dependencies:
+ '@tevm/decorators': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/jsonrpc': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))
+ '@tevm/node': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@farmfe/core'
+ - '@rspack/core'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - vite
+ - webpack
+ - zod
+
+ '@tevm/vite-plugin@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))':
+ dependencies:
+ '@tevm/unplugin': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - viem
+ - vite
+ - webpack
+
+ '@tevm/vm@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)':
+ dependencies:
+ '@evmts/zevm': 0.0.0
+ '@tevm/block': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/blockchain': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/common': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/evm': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/state': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ eventemitter3: 5.0.4
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@farmfe/core'
+ - '@rspack/core'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - vite
+ - webpack
+ - zod
+
+ '@tevm/voltaire@0.1.40(@noble/hashes@1.8.0)(@solana/sysvars@2.3.0(typescript@5.9.3))(abitype@1.2.3(typescript@5.6.2)(zod@4.4.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.6.2)(ws@8.18.3)(zod@4.4.3)':
+ dependencies:
+ '@adraffy/ens-normalize': 1.11.1
'@codesandbox/sandpack-react': 2.20.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@ledgerhq/hw-app-eth': 6.47.1(react@19.0.0)
'@ledgerhq/hw-transport-webusb': 6.29.15
'@noble/ciphers': 2.1.1
'@scure/bip32': 2.0.1
'@scure/bip39': 2.0.1
- '@shazow/whatsabi': 0.23.0(@noble/hashes@1.8.0)(typescript@5.9.3)(zod@3.25.76)
- '@tevm/chains': 0.0.1(typescript@5.9.3)
- '@trezor/connect-web': 9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3)(ws@8.18.3)
- modern-monaco: 0.3.6(typescript@5.9.3)
+ '@shazow/whatsabi': 0.23.0(@noble/hashes@1.8.0)(typescript@5.6.2)(zod@4.4.3)
+ '@tevm/chains': 0.0.1(typescript@5.6.2)
+ '@trezor/connect-web': 9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.6.2)(ws@8.18.3)
+ modern-monaco: 0.3.6(typescript@5.6.2)
+ optionalDependencies:
+ abitype: 1.2.3(typescript@5.6.2)(zod@4.4.3)
+ effect: 3.19.14
+ ffi-napi: 4.0.3
+ ref-napi: 3.0.3
+ transitivePeerDependencies:
+ - '@noble/hashes'
+ - '@solana/sysvars'
+ - bufferutil
+ - debug
+ - encoding
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - react
+ - react-dom
+ - react-native
+ - react-redux
+ - supports-color
+ - tslib
+ - typescript
+ - utf-8-validate
+ - ws
+ - zod
+
+ '@tevm/voltaire@0.1.40(@noble/hashes@1.8.0)(@solana/sysvars@2.3.0(typescript@5.9.3))(abitype@1.2.3(typescript@7.0.2)(zod@4.4.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)(zod@4.4.3)':
+ dependencies:
+ '@adraffy/ens-normalize': 1.11.1
+ '@codesandbox/sandpack-react': 2.20.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@ledgerhq/hw-app-eth': 6.47.1(react@19.0.0)
+ '@ledgerhq/hw-transport-webusb': 6.29.15
+ '@noble/ciphers': 2.1.1
+ '@scure/bip32': 2.0.1
+ '@scure/bip39': 2.0.1
+ '@shazow/whatsabi': 0.23.0(@noble/hashes@1.8.0)(typescript@7.0.2)(zod@4.4.3)
+ '@tevm/chains': 0.0.1(typescript@7.0.2)
+ '@trezor/connect-web': 9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)
+ modern-monaco: 0.3.6(typescript@7.0.2)
+ optionalDependencies:
+ abitype: 1.2.3(typescript@7.0.2)(zod@4.4.3)
+ effect: 3.19.14
+ ffi-napi: 4.0.3
+ ref-napi: 3.0.3
+ transitivePeerDependencies:
+ - '@noble/hashes'
+ - '@solana/sysvars'
+ - bufferutil
+ - debug
+ - encoding
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - react
+ - react-dom
+ - react-native
+ - react-redux
+ - supports-color
+ - tslib
+ - typescript
+ - utf-8-validate
+ - ws
+ - zod
+
+ '@tevm/voltaire@0.1.40(@noble/hashes@1.8.0)(@solana/sysvars@2.3.0(typescript@7.0.2))(abitype@1.2.3(typescript@7.0.2)(zod@4.4.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)(zod@4.4.3)':
+ dependencies:
+ '@adraffy/ens-normalize': 1.11.1
+ '@codesandbox/sandpack-react': 2.20.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@ledgerhq/hw-app-eth': 6.47.1(react@19.0.0)
+ '@ledgerhq/hw-transport-webusb': 6.29.15
+ '@noble/ciphers': 2.1.1
+ '@scure/bip32': 2.0.1
+ '@scure/bip39': 2.0.1
+ '@shazow/whatsabi': 0.23.0(@noble/hashes@1.8.0)(typescript@7.0.2)(zod@4.4.3)
+ '@tevm/chains': 0.0.1(typescript@7.0.2)
+ '@trezor/connect-web': 9.7.1(@solana/sysvars@2.3.0(typescript@7.0.2))(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)
+ modern-monaco: 0.3.6(typescript@7.0.2)
optionalDependencies:
- abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76)
+ abitype: 1.2.3(typescript@7.0.2)(zod@4.4.3)
effect: 3.19.14
ffi-napi: 4.0.3
ref-napi: 3.0.3
@@ -12265,7 +15024,7 @@ snapshots:
- ws
- zod
- '@tevm/voltaire@0.1.40(@noble/hashes@2.0.1)(@solana/sysvars@2.3.0(typescript@5.9.3))(abitype@1.2.3(typescript@5.9.3)(zod@3.25.76))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.9.3)(ws@8.18.3)(zod@3.25.76)':
+ '@tevm/voltaire@0.1.40(@noble/hashes@2.2.0)(@solana/sysvars@2.3.0(typescript@5.9.3))(abitype@1.3.0(typescript@5.9.3)(zod@4.4.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.9.3)(zod@4.4.3)':
dependencies:
'@adraffy/ens-normalize': 1.11.1
'@codesandbox/sandpack-react': 2.20.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -12274,12 +15033,12 @@ snapshots:
'@noble/ciphers': 2.1.1
'@scure/bip32': 2.0.1
'@scure/bip39': 2.0.1
- '@shazow/whatsabi': 0.23.0(@noble/hashes@2.0.1)(typescript@5.9.3)(zod@3.25.76)
+ '@shazow/whatsabi': 0.23.0(@noble/hashes@2.2.0)(typescript@5.9.3)(zod@4.4.3)
'@tevm/chains': 0.0.1(typescript@5.9.3)
- '@trezor/connect-web': 9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3)(ws@8.18.3)
+ '@trezor/connect-web': 9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3)
modern-monaco: 0.3.6(typescript@5.9.3)
optionalDependencies:
- abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76)
+ abitype: 1.3.0(typescript@5.9.3)(zod@4.4.3)
effect: 3.19.14
ffi-napi: 4.0.3
ref-napi: 3.0.3
@@ -12303,6 +15062,26 @@ snapshots:
- ws
- zod
+ '@tevm/webpack-plugin@1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))':
+ dependencies:
+ '@tevm/unplugin': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))
+ webpack: 5.101.3(esbuild@0.28.1)
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - rolldown
+ - rollup
+ - supports-color
+ - typescript
+ - unloader
+ - utf-8-validate
+ - viem
+ - vite
+
'@tootallnate/quickjs-emscripten@0.23.0': {}
'@trezor/analytics@1.5.0(tslib@2.8.1)':
@@ -12372,13 +15151,13 @@ snapshots:
- utf-8-validate
- ws
- '@trezor/blockchain-link@2.6.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3)(ws@8.18.3)':
+ '@trezor/blockchain-link@2.6.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3)':
dependencies:
- '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3))
- '@solana-program/stake': 0.2.1(@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3))
- '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3))
- '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3))(@solana/sysvars@2.3.0(typescript@5.9.3))
- '@solana/kit': 2.3.0(typescript@5.9.3)(ws@8.18.3)
+ '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.9.3))
+ '@solana-program/stake': 0.2.1(@solana/kit@2.3.0(typescript@5.9.3))
+ '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.9.3))
+ '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(typescript@5.9.3))(@solana/sysvars@2.3.0(typescript@5.9.3))
+ '@solana/kit': 2.3.0(typescript@5.9.3)
'@solana/rpc-types': 2.3.0(typescript@5.9.3)
'@stellar/stellar-sdk': 14.2.0
'@trezor/blockchain-link-types': 1.5.0(tslib@2.8.1)
@@ -12406,6 +15185,74 @@ snapshots:
- utf-8-validate
- ws
+ '@trezor/blockchain-link@2.6.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)':
+ dependencies:
+ '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))
+ '@solana-program/stake': 0.2.1(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))
+ '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))
+ '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))(@solana/sysvars@2.3.0(typescript@5.9.3))
+ '@solana/kit': 2.3.0(typescript@7.0.2)(ws@8.18.3)
+ '@solana/rpc-types': 2.3.0(typescript@7.0.2)
+ '@stellar/stellar-sdk': 14.2.0
+ '@trezor/blockchain-link-types': 1.5.0(tslib@2.8.1)
+ '@trezor/blockchain-link-utils': 1.5.1(tslib@2.8.1)
+ '@trezor/env-utils': 1.5.0(tslib@2.8.1)
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ '@trezor/utxo-lib': 2.5.0(tslib@2.8.1)
+ '@trezor/websocket-client': 1.3.0(tslib@2.8.1)
+ '@types/web': 0.0.197
+ crypto-browserify: 3.12.0
+ socks-proxy-agent: 8.0.5
+ stream-browserify: 3.0.0
+ tslib: 2.8.1
+ xrpl: 4.4.3
+ transitivePeerDependencies:
+ - '@solana/sysvars'
+ - bufferutil
+ - debug
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - react-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - ws
+
+ '@trezor/blockchain-link@2.6.1(@solana/sysvars@2.3.0(typescript@7.0.2))(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)':
+ dependencies:
+ '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))
+ '@solana-program/stake': 0.2.1(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))
+ '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))
+ '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))(@solana/sysvars@2.3.0(typescript@7.0.2))
+ '@solana/kit': 2.3.0(typescript@7.0.2)(ws@8.18.3)
+ '@solana/rpc-types': 2.3.0(typescript@7.0.2)
+ '@stellar/stellar-sdk': 14.2.0
+ '@trezor/blockchain-link-types': 1.5.0(tslib@2.8.1)
+ '@trezor/blockchain-link-utils': 1.5.1(tslib@2.8.1)
+ '@trezor/env-utils': 1.5.0(tslib@2.8.1)
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ '@trezor/utxo-lib': 2.5.0(tslib@2.8.1)
+ '@trezor/websocket-client': 1.3.0(tslib@2.8.1)
+ '@types/web': 0.0.197
+ crypto-browserify: 3.12.0
+ socks-proxy-agent: 8.0.5
+ stream-browserify: 3.0.0
+ tslib: 2.8.1
+ xrpl: 4.4.3
+ transitivePeerDependencies:
+ - '@solana/sysvars'
+ - bufferutil
+ - debug
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - react-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - ws
+
'@trezor/connect-analytics@1.4.0(tslib@2.8.1)':
dependencies:
'@trezor/analytics': 1.5.0(tslib@2.8.1)
@@ -12431,7 +15278,120 @@ snapshots:
'@trezor/connect': 9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.6.2)(ws@8.18.3)
'@trezor/connect-common': 0.5.0(tslib@2.8.1)
'@trezor/utils': 9.5.0(tslib@2.8.1)
- '@trezor/websocket-client': 1.3.0(tslib@2.8.1)
+ '@trezor/websocket-client': 1.3.0(tslib@2.8.1)
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@solana/sysvars'
+ - bufferutil
+ - debug
+ - encoding
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - react-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - ws
+
+ '@trezor/connect-web@9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3)':
+ dependencies:
+ '@trezor/connect': 9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3)
+ '@trezor/connect-common': 0.5.0(tslib@2.8.1)
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ '@trezor/websocket-client': 1.3.0(tslib@2.8.1)
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@solana/sysvars'
+ - bufferutil
+ - debug
+ - encoding
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - react-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - ws
+
+ '@trezor/connect-web@9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)':
+ dependencies:
+ '@trezor/connect': 9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)
+ '@trezor/connect-common': 0.5.0(tslib@2.8.1)
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ '@trezor/websocket-client': 1.3.0(tslib@2.8.1)
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@solana/sysvars'
+ - bufferutil
+ - debug
+ - encoding
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - react-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - ws
+
+ '@trezor/connect-web@9.7.1(@solana/sysvars@2.3.0(typescript@7.0.2))(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)':
+ dependencies:
+ '@trezor/connect': 9.7.1(@solana/sysvars@2.3.0(typescript@7.0.2))(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)
+ '@trezor/connect-common': 0.5.0(tslib@2.8.1)
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ '@trezor/websocket-client': 1.3.0(tslib@2.8.1)
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@solana/sysvars'
+ - bufferutil
+ - debug
+ - encoding
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - react-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - ws
+
+ '@trezor/connect@9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.6.2)(ws@8.18.3)':
+ dependencies:
+ '@ethereumjs/common': 10.1.0
+ '@ethereumjs/tx': 10.1.0
+ '@fivebinaries/coin-selection': 3.0.0
+ '@mobily/ts-belt': 3.13.1
+ '@noble/hashes': 1.8.0
+ '@scure/bip39': 1.6.0
+ '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.6.2)(ws@8.18.3))
+ '@solana-program/system': 0.7.0(@solana/kit@2.3.0(typescript@5.6.2)(ws@8.18.3))
+ '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.6.2)(ws@8.18.3))
+ '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(typescript@5.6.2)(ws@8.18.3))(@solana/sysvars@2.3.0(typescript@5.9.3))
+ '@solana/kit': 2.3.0(typescript@5.6.2)(ws@8.18.3)
+ '@trezor/blockchain-link': 2.6.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.6.2)(ws@8.18.3)
+ '@trezor/blockchain-link-types': 1.5.0(tslib@2.8.1)
+ '@trezor/blockchain-link-utils': 1.5.1(tslib@2.8.1)
+ '@trezor/connect-analytics': 1.4.0(tslib@2.8.1)
+ '@trezor/connect-common': 0.5.0(tslib@2.8.1)
+ '@trezor/crypto-utils': 1.2.0(tslib@2.8.1)
+ '@trezor/device-authenticity': 1.1.1(tslib@2.8.1)
+ '@trezor/device-utils': 1.2.0
+ '@trezor/env-utils': 1.5.0(tslib@2.8.1)
+ '@trezor/protobuf': 1.5.1(tslib@2.8.1)
+ '@trezor/protocol': 1.3.0(tslib@2.8.1)
+ '@trezor/schema-utils': 1.4.0(tslib@2.8.1)
+ '@trezor/transport': 1.6.1(tslib@2.8.1)
+ '@trezor/type-utils': 1.2.0
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ '@trezor/utxo-lib': 2.5.0(tslib@2.8.1)
+ blakejs: 1.2.1
+ bs58: 6.0.0
+ bs58check: 4.0.0
+ cbor: 10.0.11
+ cross-fetch: 4.1.0
+ jws: 4.0.1
tslib: 2.8.1
transitivePeerDependencies:
- '@solana/sysvars'
@@ -12447,12 +15407,41 @@ snapshots:
- utf-8-validate
- ws
- '@trezor/connect-web@9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3)(ws@8.18.3)':
+ '@trezor/connect@9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3)':
dependencies:
- '@trezor/connect': 9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3)(ws@8.18.3)
+ '@ethereumjs/common': 10.1.0
+ '@ethereumjs/tx': 10.1.0
+ '@fivebinaries/coin-selection': 3.0.0
+ '@mobily/ts-belt': 3.13.1
+ '@noble/hashes': 1.8.0
+ '@scure/bip39': 1.6.0
+ '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.9.3))
+ '@solana-program/system': 0.7.0(@solana/kit@2.3.0(typescript@5.9.3))
+ '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.9.3))
+ '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(typescript@5.9.3))(@solana/sysvars@2.3.0(typescript@5.9.3))
+ '@solana/kit': 2.3.0(typescript@5.9.3)
+ '@trezor/blockchain-link': 2.6.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3)
+ '@trezor/blockchain-link-types': 1.5.0(tslib@2.8.1)
+ '@trezor/blockchain-link-utils': 1.5.1(tslib@2.8.1)
+ '@trezor/connect-analytics': 1.4.0(tslib@2.8.1)
'@trezor/connect-common': 0.5.0(tslib@2.8.1)
+ '@trezor/crypto-utils': 1.2.0(tslib@2.8.1)
+ '@trezor/device-authenticity': 1.1.1(tslib@2.8.1)
+ '@trezor/device-utils': 1.2.0
+ '@trezor/env-utils': 1.5.0(tslib@2.8.1)
+ '@trezor/protobuf': 1.5.1(tslib@2.8.1)
+ '@trezor/protocol': 1.3.0(tslib@2.8.1)
+ '@trezor/schema-utils': 1.4.0(tslib@2.8.1)
+ '@trezor/transport': 1.6.1(tslib@2.8.1)
+ '@trezor/type-utils': 1.2.0
'@trezor/utils': 9.5.0(tslib@2.8.1)
- '@trezor/websocket-client': 1.3.0(tslib@2.8.1)
+ '@trezor/utxo-lib': 2.5.0(tslib@2.8.1)
+ blakejs: 1.2.1
+ bs58: 6.0.0
+ bs58check: 4.0.0
+ cbor: 10.0.11
+ cross-fetch: 4.1.0
+ jws: 4.0.1
tslib: 2.8.1
transitivePeerDependencies:
- '@solana/sysvars'
@@ -12468,7 +15457,7 @@ snapshots:
- utf-8-validate
- ws
- '@trezor/connect@9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.6.2)(ws@8.18.3)':
+ '@trezor/connect@9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)':
dependencies:
'@ethereumjs/common': 10.1.0
'@ethereumjs/tx': 10.1.0
@@ -12476,12 +15465,12 @@ snapshots:
'@mobily/ts-belt': 3.13.1
'@noble/hashes': 1.8.0
'@scure/bip39': 1.6.0
- '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.6.2)(ws@8.18.3))
- '@solana-program/system': 0.7.0(@solana/kit@2.3.0(typescript@5.6.2)(ws@8.18.3))
- '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.6.2)(ws@8.18.3))
- '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(typescript@5.6.2)(ws@8.18.3))(@solana/sysvars@2.3.0(typescript@5.9.3))
- '@solana/kit': 2.3.0(typescript@5.6.2)(ws@8.18.3)
- '@trezor/blockchain-link': 2.6.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.6.2)(ws@8.18.3)
+ '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))
+ '@solana-program/system': 0.7.0(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))
+ '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))
+ '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))(@solana/sysvars@2.3.0(typescript@5.9.3))
+ '@solana/kit': 2.3.0(typescript@7.0.2)(ws@8.18.3)
+ '@trezor/blockchain-link': 2.6.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)
'@trezor/blockchain-link-types': 1.5.0(tslib@2.8.1)
'@trezor/blockchain-link-utils': 1.5.1(tslib@2.8.1)
'@trezor/connect-analytics': 1.4.0(tslib@2.8.1)
@@ -12518,7 +15507,7 @@ snapshots:
- utf-8-validate
- ws
- '@trezor/connect@9.7.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3)(ws@8.18.3)':
+ '@trezor/connect@9.7.1(@solana/sysvars@2.3.0(typescript@7.0.2))(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)':
dependencies:
'@ethereumjs/common': 10.1.0
'@ethereumjs/tx': 10.1.0
@@ -12526,12 +15515,12 @@ snapshots:
'@mobily/ts-belt': 3.13.1
'@noble/hashes': 1.8.0
'@scure/bip39': 1.6.0
- '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3))
- '@solana-program/system': 0.7.0(@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3))
- '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3))
- '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(typescript@5.9.3)(ws@8.18.3))(@solana/sysvars@2.3.0(typescript@5.9.3))
- '@solana/kit': 2.3.0(typescript@5.9.3)(ws@8.18.3)
- '@trezor/blockchain-link': 2.6.1(@solana/sysvars@2.3.0(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3)(ws@8.18.3)
+ '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))
+ '@solana-program/system': 0.7.0(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))
+ '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))
+ '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.18.3))(@solana/sysvars@2.3.0(typescript@7.0.2))
+ '@solana/kit': 2.3.0(typescript@7.0.2)(ws@8.18.3)
+ '@trezor/blockchain-link': 2.6.1(@solana/sysvars@2.3.0(typescript@7.0.2))(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)
'@trezor/blockchain-link-types': 1.5.0(tslib@2.8.1)
'@trezor/blockchain-link-utils': 1.5.1(tslib@2.8.1)
'@trezor/connect-analytics': 1.4.0(tslib@2.8.1)
@@ -12574,7 +15563,7 @@ snapshots:
'@trezor/device-authenticity@1.1.1(tslib@2.8.1)':
dependencies:
- '@noble/curves': 2.0.1
+ '@noble/curves': 2.2.0
'@trezor/crypto-utils': 1.2.0(tslib@2.8.1)
'@trezor/protobuf': 1.5.1(tslib@2.8.1)
'@trezor/schema-utils': 1.4.0(tslib@2.8.1)
@@ -12879,6 +15868,10 @@ snapshots:
dependencies:
undici-types: 7.12.0
+ '@types/node@25.9.5':
+ dependencies:
+ undici-types: 7.24.6
+
'@types/react-dom@19.0.3(@types/react@19.0.8)':
dependencies:
'@types/react': 19.0.8
@@ -12887,6 +15880,13 @@ snapshots:
dependencies:
csstype: 3.1.3
+ '@types/readable-stream@2.3.15':
+ dependencies:
+ '@types/node': 24.5.2
+ safe-buffer: 5.1.2
+
+ '@types/retry@0.12.1': {}
+
'@types/shimmer@1.2.0': {}
'@types/ssh2-streams@0.1.13':
@@ -12933,6 +15933,66 @@ snapshots:
treeify: 1.1.0
yargs: 16.2.0
+ '@typescript/typescript-aix-ppc64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-darwin-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-darwin-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-freebsd-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-freebsd-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-arm@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-loong64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-mips64el@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-ppc64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-riscv64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-s390x@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-netbsd-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-netbsd-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-openbsd-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-openbsd-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-sunos-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-win32-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-win32-x64@7.0.2':
+ optional: true
+
'@typescript/vfs@1.6.1(typescript@5.9.3)':
dependencies:
debug: 4.4.3
@@ -12940,6 +16000,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript/vfs@1.6.1(typescript@7.0.2)':
+ dependencies:
+ debug: 4.4.3
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - supports-color
+
'@ungap/structured-clone@1.3.0': {}
'@vanilla-extract/babel-plugin-debug-ids@1.2.2':
@@ -12948,12 +16015,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@vanilla-extract/compiler@0.3.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)':
+ '@vanilla-extract/compiler@0.3.1(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)':
dependencies:
'@vanilla-extract/css': 1.17.4
'@vanilla-extract/integration': 8.0.4
- vite: 6.4.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
- vite-node: 3.2.4(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ vite: 6.4.1(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
+ vite-node: 3.2.4(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@@ -13008,11 +16075,11 @@ snapshots:
'@vanilla-extract/private@1.0.9': {}
- '@vanilla-extract/vite-plugin@5.1.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))(yaml@2.8.1)':
+ '@vanilla-extract/vite-plugin@5.1.1(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(yaml@2.8.1)':
dependencies:
- '@vanilla-extract/compiler': 0.3.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ '@vanilla-extract/compiler': 0.3.1(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
'@vanilla-extract/integration': 8.0.4
- vite: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ vite: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@@ -13028,18 +16095,18 @@ snapshots:
- tsx
- yaml
- '@vitejs/plugin-react@4.3.2(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))':
+ '@vitejs/plugin-react@4.3.2(vite@7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))':
dependencies:
'@babel/core': 7.26.0
'@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0)
'@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0)
'@types/babel__core': 7.20.5
react-refresh: 0.14.2
- vite: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ vite: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-react@5.0.4(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))':
+ '@vitejs/plugin-react@5.0.4(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))':
dependencies:
'@babel/core': 7.28.5
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5)
@@ -13047,65 +16114,64 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-beta.38
'@types/babel__core': 7.20.5
react-refresh: 0.17.0
- vite: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ vite: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
- '@vitest/coverage-v8@4.0.15(vitest@4.0.15(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))':
+ '@vitest/coverage-v8@4.1.10(vitest@4.1.10)':
dependencies:
'@bcoe/v8-coverage': 1.0.2
- '@vitest/utils': 4.0.15
- ast-v8-to-istanbul: 0.3.8
+ '@vitest/utils': 4.1.10
+ ast-v8-to-istanbul: 1.0.5
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
- istanbul-lib-source-maps: 5.0.6
istanbul-reports: 3.2.0
- magicast: 0.5.1
+ magicast: 0.5.3
obug: 2.1.1
- std-env: 3.10.0
- tinyrainbow: 3.0.3
- vitest: 4.0.15(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
- transitivePeerDependencies:
- - supports-color
+ std-env: 4.2.0
+ tinyrainbow: 3.1.0
+ vitest: 4.1.10(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
- '@vitest/expect@4.0.15':
+ '@vitest/expect@4.1.10':
dependencies:
- '@standard-schema/spec': 1.0.0
+ '@standard-schema/spec': 1.1.0
'@types/chai': 5.2.2
- '@vitest/spy': 4.0.15
- '@vitest/utils': 4.0.15
- chai: 6.2.1
- tinyrainbow: 3.0.3
+ '@vitest/spy': 4.1.10
+ '@vitest/utils': 4.1.10
+ chai: 6.2.2
+ tinyrainbow: 3.1.0
- '@vitest/mocker@4.0.15(vite@6.4.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))':
+ '@vitest/mocker@4.1.10(vite@6.4.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))':
dependencies:
- '@vitest/spy': 4.0.15
+ '@vitest/spy': 4.1.10
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 6.4.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ vite: 6.4.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
- '@vitest/pretty-format@4.0.15':
+ '@vitest/pretty-format@4.1.10':
dependencies:
- tinyrainbow: 3.0.3
+ tinyrainbow: 3.1.0
- '@vitest/runner@4.0.15':
+ '@vitest/runner@4.1.10':
dependencies:
- '@vitest/utils': 4.0.15
+ '@vitest/utils': 4.1.10
pathe: 2.0.3
- '@vitest/snapshot@4.0.15':
+ '@vitest/snapshot@4.1.10':
dependencies:
- '@vitest/pretty-format': 4.0.15
+ '@vitest/pretty-format': 4.1.10
+ '@vitest/utils': 4.1.10
magic-string: 0.30.21
pathe: 2.0.3
- '@vitest/spy@4.0.15': {}
+ '@vitest/spy@4.1.10': {}
- '@vitest/utils@4.0.15':
+ '@vitest/utils@4.1.10':
dependencies:
- '@vitest/pretty-format': 4.0.15
- tinyrainbow: 3.0.3
+ '@vitest/pretty-format': 4.1.10
+ convert-source-map: 2.0.0
+ tinyrainbow: 3.1.0
'@webassemblyjs/ast@1.14.1':
dependencies:
@@ -13204,26 +16270,47 @@ snapshots:
'@xtuc/long@4.2.2': {}
+ abitype@0.7.1(typescript@5.9.3)(zod@4.4.3):
+ dependencies:
+ typescript: 5.9.3
+ optionalDependencies:
+ zod: 4.4.3
+
abitype@0.8.11(typescript@5.9.3)(zod@3.23.8):
dependencies:
typescript: 5.9.3
optionalDependencies:
zod: 3.23.8
- abitype@1.2.3(typescript@5.6.2)(zod@3.25.76):
+ abitype@1.0.9(typescript@5.9.3)(zod@4.4.3):
+ optionalDependencies:
+ typescript: 5.9.3
+ zod: 4.4.3
+
+ abitype@1.2.3(typescript@5.6.2)(zod@4.4.3):
optionalDependencies:
typescript: 5.6.2
- zod: 3.25.76
+ zod: 4.4.3
abitype@1.2.3(typescript@5.9.3)(zod@3.23.8):
optionalDependencies:
typescript: 5.9.3
zod: 3.23.8
- abitype@1.2.3(typescript@5.9.3)(zod@3.25.76):
+ abitype@1.2.3(typescript@5.9.3)(zod@4.4.3):
optionalDependencies:
typescript: 5.9.3
- zod: 3.25.76
+ zod: 4.4.3
+
+ abitype@1.2.3(typescript@7.0.2)(zod@4.4.3):
+ optionalDependencies:
+ typescript: 7.0.2
+ zod: 4.4.3
+
+ abitype@1.3.0(typescript@5.9.3)(zod@4.4.3):
+ optionalDependencies:
+ typescript: 5.9.3
+ zod: 4.4.3
abort-controller@3.0.0:
dependencies:
@@ -13293,6 +16380,8 @@ snapshots:
ansi-styles@6.2.1: {}
+ antlr4ts@0.5.0-alpha.4: {}
+
any-promise@1.3.0: {}
archiver-utils@5.0.2:
@@ -13329,6 +16418,11 @@ snapshots:
dependencies:
'@ark/util': 0.56.0
+ arktype@2.0.0-beta.6:
+ dependencies:
+ '@ark/schema': 0.3.3
+ '@ark/util': 0.2.2
+
arktype@2.1.28:
dependencies:
'@ark/schema': 0.56.0
@@ -13351,11 +16445,11 @@ snapshots:
dependencies:
tslib: 2.8.1
- ast-v8-to-istanbul@0.3.8:
+ ast-v8-to-istanbul@1.0.5:
dependencies:
'@jridgewell/trace-mapping': 0.3.31
estree-walker: 3.0.3
- js-tokens: 9.0.1
+ js-tokens: 10.0.0
astring@1.9.0: {}
@@ -13412,6 +16506,8 @@ snapshots:
balanced-match@1.0.2: {}
+ balanced-match@4.0.4: {}
+
bare-events@2.7.0: {}
bare-fs@4.4.4:
@@ -13507,6 +16603,10 @@ snapshots:
dependencies:
balanced-match: 1.0.2
+ brace-expansion@5.0.8:
+ dependencies:
+ balanced-match: 4.0.4
+
braces@3.0.3:
dependencies:
fill-range: 7.1.1
@@ -13667,7 +16767,7 @@ snapshots:
ccount@2.0.1: {}
- chai@6.2.1: {}
+ chai@6.2.2: {}
chalk@4.1.2:
dependencies:
@@ -13790,12 +16890,16 @@ snapshots:
comma-separated-tokens@2.0.3: {}
+ command-exists@1.2.9: {}
+
commander@10.0.1: {}
commander@12.1.0: {}
commander@14.0.2: {}
+ commander@14.0.3: {}
+
commander@2.20.3: {}
commander@7.2.0: {}
@@ -14149,6 +17253,8 @@ snapshots:
dependencies:
ms: 2.1.3
+ decimal.js@10.6.0: {}
+
decode-named-character-reference@1.0.2:
dependencies:
character-entities: 2.0.2
@@ -14192,6 +17298,8 @@ snapshots:
detect-europe-js@0.1.2: {}
+ detect-file@1.0.0: {}
+
detect-indent@6.1.0: {}
detect-libc@2.1.1: {}
@@ -14280,6 +17388,11 @@ snapshots:
fast-check: 3.23.2
optional: true
+ effect@3.21.2:
+ dependencies:
+ '@standard-schema/spec': 1.0.0
+ fast-check: 3.23.2
+
eip55@2.1.1:
dependencies:
keccak: 3.0.4
@@ -14339,10 +17452,10 @@ snapshots:
es-errors@1.3.0: {}
- es-module-lexer@1.6.0: {}
-
es-module-lexer@1.7.0: {}
+ es-module-lexer@2.3.1: {}
+
es-object-atoms@1.1.1:
dependencies:
es-errors: 1.3.0
@@ -14414,6 +17527,35 @@ snapshots:
'@esbuild/win32-ia32': 0.25.0
'@esbuild/win32-x64': 0.25.0
+ esbuild@0.28.1:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.28.1
+ '@esbuild/android-arm': 0.28.1
+ '@esbuild/android-arm64': 0.28.1
+ '@esbuild/android-x64': 0.28.1
+ '@esbuild/darwin-arm64': 0.28.1
+ '@esbuild/darwin-x64': 0.28.1
+ '@esbuild/freebsd-arm64': 0.28.1
+ '@esbuild/freebsd-x64': 0.28.1
+ '@esbuild/linux-arm': 0.28.1
+ '@esbuild/linux-arm64': 0.28.1
+ '@esbuild/linux-ia32': 0.28.1
+ '@esbuild/linux-loong64': 0.28.1
+ '@esbuild/linux-mips64el': 0.28.1
+ '@esbuild/linux-ppc64': 0.28.1
+ '@esbuild/linux-riscv64': 0.28.1
+ '@esbuild/linux-s390x': 0.28.1
+ '@esbuild/linux-x64': 0.28.1
+ '@esbuild/netbsd-arm64': 0.28.1
+ '@esbuild/netbsd-x64': 0.28.1
+ '@esbuild/openbsd-arm64': 0.28.1
+ '@esbuild/openbsd-x64': 0.28.1
+ '@esbuild/openharmony-arm64': 0.28.1
+ '@esbuild/sunos-x64': 0.28.1
+ '@esbuild/win32-arm64': 0.28.1
+ '@esbuild/win32-ia32': 0.28.1
+ '@esbuild/win32-x64': 0.28.1
+
escalade@3.2.0: {}
escape-carriage@1.3.1: {}
@@ -14508,6 +17650,13 @@ snapshots:
etag@1.8.1: {}
+ ethereum-cryptography@2.2.1:
+ dependencies:
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@scure/bip32': 1.4.0
+ '@scure/bip39': 1.3.0
+
ethereum-cryptography@3.2.0:
dependencies:
'@noble/ciphers': 1.3.0
@@ -14545,6 +17694,8 @@ snapshots:
eventemitter3@5.0.1: {}
+ eventemitter3@5.0.4: {}
+
events-universal@1.0.1:
dependencies:
bare-events: 2.7.0
@@ -14587,7 +17738,11 @@ snapshots:
exit@0.1.2: {}
- expect-type@1.2.2: {}
+ expand-tilde@2.0.2:
+ dependencies:
+ homedir-polyfill: 1.0.3
+
+ expect-type@1.4.0: {}
exsolve@1.0.7: {}
@@ -14612,7 +17767,6 @@ snapshots:
fast-check@3.23.2:
dependencies:
pure-rand: 6.1.0
- optional: true
fast-content-type-parse@1.1.0: {}
@@ -14748,6 +17902,18 @@ snapshots:
locate-path: 6.0.0
path-exists: 4.0.0
+ find-up@6.3.0:
+ dependencies:
+ locate-path: 7.2.0
+ path-exists: 5.0.0
+
+ findup-sync@5.0.0:
+ dependencies:
+ detect-file: 1.0.0
+ is-glob: 4.0.3
+ micromatch: 4.0.8
+ resolve-dir: 1.0.1
+
follow-redirects@1.15.9: {}
for-each@0.3.5:
@@ -14781,12 +17947,6 @@ snapshots:
fs-constants@1.0.0: {}
- fs-extra@11.3.0:
- dependencies:
- graceful-fs: 4.2.11
- jsonfile: 6.1.0
- universalify: 2.0.1
-
fs-extra@11.3.2:
dependencies:
graceful-fs: 4.2.11
@@ -14815,6 +17975,8 @@ snapshots:
function-bind@1.1.2: {}
+ generator-function@2.0.1: {}
+
gensync@1.0.0-beta.2: {}
get-caller-file@2.0.5: {}
@@ -14862,7 +18024,7 @@ snapshots:
basic-ftp: 5.0.5
data-uri-to-buffer: 6.0.2
debug: 4.4.3
- fs-extra: 11.3.0
+ fs-extra: 11.3.2
transitivePeerDependencies:
- supports-color
@@ -14888,6 +18050,12 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 2.0.1
+ glob@13.0.6:
+ dependencies:
+ minimatch: 10.2.6
+ minipass: 7.1.3
+ path-scurry: 2.0.2
+
glob@8.1.0:
dependencies:
fs.realpath: 1.0.0
@@ -14896,6 +18064,20 @@ snapshots:
minimatch: 5.1.6
once: 1.4.0
+ global-modules@1.0.0:
+ dependencies:
+ global-prefix: 1.0.2
+ is-windows: 1.0.2
+ resolve-dir: 1.0.1
+
+ global-prefix@1.0.2:
+ dependencies:
+ expand-tilde: 2.0.2
+ homedir-polyfill: 1.0.3
+ ini: 1.3.8
+ is-windows: 1.0.2
+ which: 1.3.1
+
globals@11.12.0: {}
globals@15.15.0: {}
@@ -14943,6 +18125,10 @@ snapshots:
dependencies:
function-bind: 1.1.2
+ hasown@2.0.4:
+ dependencies:
+ function-bind: 1.1.2
+
hast-util-classnames@3.0.0:
dependencies:
'@types/hast': 3.0.4
@@ -15111,6 +18297,10 @@ snapshots:
minimalistic-assert: 1.0.1
minimalistic-crypto-utils: 1.0.1
+ homedir-polyfill@1.0.3:
+ dependencies:
+ parse-passwd: 1.0.0
+
hono@4.10.3: {}
html-escaper@2.0.2: {}
@@ -15194,6 +18384,8 @@ snapshots:
inherits@2.0.4: {}
+ ini@1.3.8: {}
+
inline-style-parser@0.2.4: {}
int64-buffer@1.1.0: {}
@@ -15232,18 +18424,35 @@ snapshots:
is-alphabetical: 2.0.1
is-decimal: 2.0.1
+ is-arguments@1.2.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
is-callable@1.2.7: {}
is-core-module@2.15.1:
dependencies:
hasown: 2.0.2
+ is-core-module@2.16.2:
+ dependencies:
+ hasown: 2.0.4
+
is-decimal@2.0.1: {}
is-extglob@2.1.1: {}
is-fullwidth-code-point@3.0.0: {}
+ is-generator-function@1.1.2:
+ dependencies:
+ call-bound: 1.0.4
+ generator-function: 2.0.1
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
@@ -15256,6 +18465,13 @@ snapshots:
is-plain-obj@4.1.0: {}
+ is-regex@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
is-retry-allowed@3.0.0: {}
is-standalone-pwa@0.1.1: {}
@@ -15288,6 +18504,10 @@ snapshots:
dependencies:
ws: 8.18.3
+ isows@1.0.7(ws@8.21.0):
+ dependencies:
+ ws: 8.21.0
+
istanbul-lib-coverage@3.2.2: {}
istanbul-lib-report@3.0.1:
@@ -15296,14 +18516,6 @@ snapshots:
make-dir: 4.0.0
supports-color: 7.2.0
- istanbul-lib-source-maps@5.0.6:
- dependencies:
- '@jridgewell/trace-mapping': 0.3.31
- debug: 4.4.3
- istanbul-lib-coverage: 3.2.2
- transitivePeerDependencies:
- - supports-color
-
istanbul-reports@3.2.0:
dependencies:
html-escaper: 2.0.2
@@ -15329,9 +18541,9 @@ snapshots:
js-sha3@0.8.0: {}
- js-tokens@4.0.0: {}
+ js-tokens@10.0.0: {}
- js-tokens@9.0.1: {}
+ js-tokens@4.0.0: {}
js-yaml@3.14.2:
dependencies:
@@ -15344,6 +18556,8 @@ snapshots:
jsbn@1.1.0: {}
+ jsel@1.1.6: {}
+
jsesc@3.0.2: {}
jsesc@3.1.0: {}
@@ -15358,6 +18572,8 @@ snapshots:
json5@2.2.3: {}
+ jsonc-parser@3.3.1: {}
+
jsonfile@4.0.0:
optionalDependencies:
graceful-fs: 4.2.11
@@ -15418,6 +18634,8 @@ snapshots:
kolorist@1.8.0: {}
+ kzg-wasm@1.0.0: {}
+
langium@3.3.1:
dependencies:
chevrotain: 11.0.3
@@ -15515,6 +18733,10 @@ snapshots:
dependencies:
p-locate: 5.0.0
+ locate-path@7.2.0:
+ dependencies:
+ p-locate: 6.0.0
+
lodash-es@4.17.21: {}
lodash.camelcase@4.3.0: {}
@@ -15544,8 +18766,12 @@ snapshots:
dependencies:
js-tokens: 4.0.0
+ lru-cache@10.1.0: {}
+
lru-cache@10.4.3: {}
+ lru-cache@11.0.2: {}
+
lru-cache@11.2.2: {}
lru-cache@5.1.1:
@@ -15566,10 +18792,10 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
- magicast@0.5.1:
+ magicast@0.5.3:
dependencies:
- '@babel/parser': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/parser': 7.29.7
+ '@babel/types': 7.29.7
source-map-js: 1.2.1
make-dir@4.0.0:
@@ -15799,6 +19025,8 @@ snapshots:
dependencies:
'@babel/runtime': 7.26.10
+ memorystream@0.3.1: {}
+
merge-stream@2.0.0: {}
merge2@1.4.1: {}
@@ -16162,6 +19390,10 @@ snapshots:
dependencies:
'@isaacs/brace-expansion': 5.0.0
+ minimatch@10.2.6:
+ dependencies:
+ brace-expansion: 5.0.8
+
minimatch@5.1.6:
dependencies:
brace-expansion: 2.0.2
@@ -16170,6 +19402,8 @@ snapshots:
minipass@7.1.2: {}
+ minipass@7.1.3: {}
+
minisearch@7.2.0: {}
minizlib@3.0.1:
@@ -16202,6 +19436,10 @@ snapshots:
dependencies:
typescript: 5.9.3
+ modern-monaco@0.3.6(typescript@7.0.2):
+ dependencies:
+ typescript: 7.0.2
+
module-details-from-path@1.0.3: {}
mri@1.2.0: {}
@@ -16395,28 +19633,90 @@ snapshots:
string-width: 6.1.0
strip-ansi: 7.1.0
+ os-tmpdir@1.0.2: {}
+
outdent@0.5.0: {}
outvariant@1.4.0: {}
- ox@0.11.1(typescript@5.6.2)(zod@3.25.76):
+ ox@0.11.1(typescript@5.6.2)(zod@4.4.3):
+ dependencies:
+ '@adraffy/ens-normalize': 1.11.0
+ '@noble/ciphers': 1.3.0
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@scure/bip32': 1.7.0
+ '@scure/bip39': 1.6.0
+ abitype: 1.2.3(typescript@5.6.2)(zod@4.4.3)
+ eventemitter3: 5.0.1
+ optionalDependencies:
+ typescript: 5.6.2
+ transitivePeerDependencies:
+ - zod
+
+ ox@0.11.1(typescript@5.9.3)(zod@4.4.3):
+ dependencies:
+ '@adraffy/ens-normalize': 1.11.0
+ '@noble/ciphers': 1.3.0
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@scure/bip32': 1.7.0
+ '@scure/bip39': 1.6.0
+ abitype: 1.2.3(typescript@5.9.3)(zod@4.4.3)
+ eventemitter3: 5.0.1
+ optionalDependencies:
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - zod
+
+ ox@0.11.1(typescript@7.0.2)(zod@4.4.3):
+ dependencies:
+ '@adraffy/ens-normalize': 1.11.0
+ '@noble/ciphers': 1.3.0
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@scure/bip32': 1.7.0
+ '@scure/bip39': 1.6.0
+ abitype: 1.2.3(typescript@7.0.2)(zod@4.4.3)
+ eventemitter3: 5.0.1
+ optionalDependencies:
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - zod
+
+ ox@0.14.20(typescript@5.9.3)(zod@4.4.3):
+ dependencies:
+ '@adraffy/ens-normalize': 1.11.1
+ '@noble/ciphers': 1.3.0
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@scure/bip32': 1.7.0
+ '@scure/bip39': 1.6.0
+ abitype: 1.2.3(typescript@5.9.3)(zod@4.4.3)
+ eventemitter3: 5.0.1
+ optionalDependencies:
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - zod
+
+ ox@0.14.33(typescript@5.6.2)(zod@4.4.3):
dependencies:
- '@adraffy/ens-normalize': 1.11.0
+ '@adraffy/ens-normalize': 1.11.1
'@noble/ciphers': 1.3.0
'@noble/curves': 1.9.1
'@noble/hashes': 1.8.0
'@scure/bip32': 1.7.0
'@scure/bip39': 1.6.0
- abitype: 1.2.3(typescript@5.6.2)(zod@3.25.76)
+ abitype: 1.2.3(typescript@5.6.2)(zod@4.4.3)
eventemitter3: 5.0.1
optionalDependencies:
typescript: 5.6.2
transitivePeerDependencies:
- zod
- ox@0.11.1(typescript@5.9.3)(zod@3.23.8):
+ ox@0.14.33(typescript@5.9.3)(zod@3.23.8):
dependencies:
- '@adraffy/ens-normalize': 1.11.0
+ '@adraffy/ens-normalize': 1.11.1
'@noble/ciphers': 1.3.0
'@noble/curves': 1.9.1
'@noble/hashes': 1.8.0
@@ -16429,22 +19729,22 @@ snapshots:
transitivePeerDependencies:
- zod
- ox@0.11.1(typescript@5.9.3)(zod@3.25.76):
+ ox@0.14.33(typescript@5.9.3)(zod@4.4.3):
dependencies:
- '@adraffy/ens-normalize': 1.11.0
+ '@adraffy/ens-normalize': 1.11.1
'@noble/ciphers': 1.3.0
'@noble/curves': 1.9.1
'@noble/hashes': 1.8.0
'@scure/bip32': 1.7.0
'@scure/bip39': 1.6.0
- abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76)
+ abitype: 1.2.3(typescript@5.9.3)(zod@4.4.3)
eventemitter3: 5.0.1
optionalDependencies:
typescript: 5.9.3
transitivePeerDependencies:
- zod
- ox@0.9.17(typescript@5.6.2)(zod@3.25.76):
+ ox@0.9.17(typescript@5.6.2)(zod@4.4.3):
dependencies:
'@adraffy/ens-normalize': 1.11.1
'@noble/ciphers': 1.3.0
@@ -16452,14 +19752,14 @@ snapshots:
'@noble/hashes': 1.8.0
'@scure/bip32': 1.7.0
'@scure/bip39': 1.6.0
- abitype: 1.2.3(typescript@5.6.2)(zod@3.25.76)
+ abitype: 1.2.3(typescript@5.6.2)(zod@4.4.3)
eventemitter3: 5.0.1
optionalDependencies:
typescript: 5.6.2
transitivePeerDependencies:
- zod
- ox@0.9.17(typescript@5.9.3)(zod@3.25.76):
+ ox@0.9.17(typescript@5.9.3)(zod@4.4.3):
dependencies:
'@adraffy/ens-normalize': 1.11.1
'@noble/ciphers': 1.3.0
@@ -16467,13 +19767,28 @@ snapshots:
'@noble/hashes': 1.8.0
'@scure/bip32': 1.7.0
'@scure/bip39': 1.6.0
- abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76)
+ abitype: 1.2.3(typescript@5.9.3)(zod@4.4.3)
eventemitter3: 5.0.1
optionalDependencies:
typescript: 5.9.3
transitivePeerDependencies:
- zod
+ ox@0.9.17(typescript@7.0.2)(zod@4.4.3):
+ dependencies:
+ '@adraffy/ens-normalize': 1.11.1
+ '@noble/ciphers': 1.3.0
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@scure/bip32': 1.7.0
+ '@scure/bip39': 1.6.0
+ abitype: 1.2.3(typescript@7.0.2)(zod@4.4.3)
+ eventemitter3: 5.0.1
+ optionalDependencies:
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - zod
+
oxc-resolver@11.8.3:
dependencies:
napi-postinstall: 0.3.3
@@ -16510,6 +19825,10 @@ snapshots:
dependencies:
yocto-queue: 0.1.0
+ p-limit@4.0.0:
+ dependencies:
+ yocto-queue: 1.1.1
+
p-limit@5.0.0:
dependencies:
yocto-queue: 1.1.1
@@ -16522,8 +19841,24 @@ snapshots:
dependencies:
p-limit: 3.1.0
+ p-locate@6.0.0:
+ dependencies:
+ p-limit: 4.0.0
+
p-map@2.1.0: {}
+ p-queue@7.4.1:
+ dependencies:
+ eventemitter3: 5.0.4
+ p-timeout: 5.1.0
+
+ p-retry@5.1.2:
+ dependencies:
+ '@types/retry': 0.12.1
+ retry: 0.13.1
+
+ p-timeout@5.1.0: {}
+
p-try@2.2.0: {}
pac-proxy-agent@7.0.2:
@@ -16570,6 +19905,8 @@ snapshots:
parse-ms@4.0.0: {}
+ parse-passwd@1.0.0: {}
+
parse5-htmlparser2-tree-adapter@6.0.1:
dependencies:
parse5: 6.0.1
@@ -16588,6 +19925,8 @@ snapshots:
path-exists@4.0.0: {}
+ path-exists@5.0.0: {}
+
path-key@3.1.1: {}
path-key@4.0.0: {}
@@ -16599,6 +19938,11 @@ snapshots:
lru-cache: 11.2.2
minipass: 7.1.2
+ path-scurry@2.0.2:
+ dependencies:
+ lru-cache: 11.2.2
+ minipass: 7.1.3
+
path-type@4.0.0: {}
pathe@2.0.3: {}
@@ -16614,9 +19958,9 @@ snapshots:
pend@1.2.0: {}
- permissionless@0.2.57(ox@0.11.1(typescript@5.9.3)(zod@3.25.76)):
+ permissionless@0.2.57(ox@0.11.1(typescript@5.9.3)(zod@4.4.3)):
optionalDependencies:
- ox: 0.11.1(typescript@5.9.3)(zod@3.25.76)
+ ox: 0.11.1(typescript@5.9.3)(zod@4.4.3)
picocolors@1.1.1: {}
@@ -16626,6 +19970,8 @@ snapshots:
picomatch@4.0.3: {}
+ picomatch@4.0.5: {}
+
pify@4.0.1: {}
pino-abstract-transport@1.2.0:
@@ -16637,6 +19983,10 @@ snapshots:
dependencies:
split2: 4.2.0
+ pino-abstract-transport@3.0.0:
+ dependencies:
+ split2: 4.2.0
+
pino-http@8.6.1:
dependencies:
get-caller-file: 2.0.5
@@ -16665,6 +20015,20 @@ snapshots:
pino-std-serializers@7.0.0: {}
+ pino@10.3.1:
+ dependencies:
+ '@pinojs/redact': 0.4.0
+ atomic-sleep: 1.0.0
+ on-exit-leak-free: 2.1.2
+ pino-abstract-transport: 3.0.0
+ pino-std-serializers: 7.0.0
+ process-warning: 5.0.0
+ quick-format-unescaped: 4.0.4
+ real-require: 0.2.0
+ safe-stable-stringify: 2.5.0
+ sonic-boom: 4.2.0
+ thread-stream: 4.2.0
+
pino@8.21.0:
dependencies:
atomic-sleep: 1.0.0
@@ -16736,8 +20100,17 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
+ prettier-plugin-solidity@1.3.1(prettier@3.2.5):
+ dependencies:
+ '@solidity-parser/parser': 0.17.0
+ prettier: 3.2.5
+ semver: 7.7.2
+ solidity-comments-extractor: 0.0.8
+
prettier@2.8.8: {}
+ prettier@3.2.5: {}
+
prettier@3.6.2: {}
pretty-ms@9.1.0:
@@ -16854,8 +20227,7 @@ snapshots:
- supports-color
- utf-8-validate
- pure-rand@6.1.0:
- optional: true
+ pure-rand@6.1.0: {}
pushdata-bitcoin@1.0.1:
dependencies:
@@ -17043,6 +20415,8 @@ snapshots:
real-require@0.2.0: {}
+ real-require@1.0.0: {}
+
recma-build-jsx@1.0.0:
dependencies:
'@types/estree': 1.0.8
@@ -17249,8 +20623,20 @@ snapshots:
reselect@5.1.1: {}
+ resolve-dir@1.0.1:
+ dependencies:
+ expand-tilde: 2.0.2
+ global-modules: 1.0.0
+
resolve-from@5.0.0: {}
+ resolve@1.22.12:
+ dependencies:
+ es-errors: 1.3.0
+ is-core-module: 2.16.2
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
resolve@1.22.8:
dependencies:
is-core-module: 2.15.1
@@ -17266,6 +20652,8 @@ snapshots:
retry@0.12.0: {}
+ retry@0.13.1: {}
+
reusify@1.0.4: {}
rfdc@1.4.1: {}
@@ -17348,6 +20736,10 @@ snapshots:
rw@1.3.3: {}
+ rxjs@7.5.5:
+ dependencies:
+ tslib: 2.8.1
+
rxjs@7.8.2:
dependencies:
tslib: 2.8.1
@@ -17360,6 +20752,12 @@ snapshots:
safe-buffer@5.2.1: {}
+ safe-regex-test@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-regex: 1.2.1
+
safe-regex2@3.1.0:
dependencies:
ret: 0.4.3
@@ -17383,6 +20781,8 @@ snapshots:
secure-json-parse@2.7.0: {}
+ semver@5.7.2: {}
+
semver@6.3.1: {}
semver@7.6.0:
@@ -17564,6 +20964,63 @@ snapshots:
ip-address: 9.0.5
smart-buffer: 4.2.0
+ solc-typed-ast@18.2.6(typescript@5.9.3)(zod@4.4.3):
+ dependencies:
+ axios: 1.13.2
+ commander: 12.1.0
+ decimal.js: 10.6.0
+ findup-sync: 5.0.0
+ fs-extra: 11.3.2
+ jsel: 1.1.6
+ semver: 7.7.2
+ solc: 0.8.25
+ src-location: 1.1.0
+ web3-eth-abi: 4.4.1(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - debug
+ - typescript
+ - zod
+
+ solc@0.8.25:
+ dependencies:
+ command-exists: 1.2.9
+ commander: 8.3.0
+ follow-redirects: 1.15.9
+ js-sha3: 0.8.0
+ memorystream: 0.3.1
+ semver: 5.7.2
+ tmp: 0.0.33
+ transitivePeerDependencies:
+ - debug
+
+ solc@0.8.35:
+ dependencies:
+ command-exists: 1.2.9
+ commander: 8.3.0
+ follow-redirects: 1.15.9
+ js-sha3: 0.8.0
+ memorystream: 0.3.1
+ semver: 5.7.2
+ tmp: 0.0.33
+ transitivePeerDependencies:
+ - debug
+
+ solc@0.8.36:
+ dependencies:
+ command-exists: 1.2.9
+ commander: 8.3.0
+ follow-redirects: 1.15.9
+ js-sha3: 0.8.0
+ memorystream: 0.3.1
+ semver: 5.7.2
+ tmp: 0.0.33
+ transitivePeerDependencies:
+ - debug
+
+ solidity-ast@0.4.62: {}
+
+ solidity-comments-extractor@0.0.8: {}
+
sonic-boom@3.8.1:
dependencies:
atomic-sleep: 1.0.0
@@ -17602,6 +21059,8 @@ snapshots:
sprintf-js@1.1.3: {}
+ src-location@1.1.0: {}
+
ssh-remote-port-forward@1.0.4:
dependencies:
'@types/ssh2': 0.5.52
@@ -17628,7 +21087,7 @@ snapshots:
statuses@2.0.1: {}
- std-env@3.10.0: {}
+ std-env@4.2.0: {}
stdin-discarder@0.1.0:
dependencies:
@@ -17780,14 +21239,16 @@ snapshots:
term-size@2.2.1: {}
- terser-webpack-plugin@5.3.14(webpack@5.101.3):
+ terser-webpack-plugin@5.3.14(esbuild@0.28.1)(webpack@5.101.3(esbuild@0.28.1)):
dependencies:
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
schema-utils: 4.3.2
serialize-javascript: 6.0.2
terser: 5.36.0
- webpack: 5.101.3
+ webpack: 5.101.3(esbuild@0.28.1)
+ optionalDependencies:
+ esbuild: 0.28.1
terser@5.36.0:
dependencies:
@@ -17817,6 +21278,92 @@ snapshots:
- bare-buffer
- supports-color
+ tevm@1.0.0-rc.151(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.6.0)(lightningcss@1.30.2)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@5.9.3)(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(yaml@2.8.1)(zod@4.4.3):
+ dependencies:
+ '@tevm/actions': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/address': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/base-bundler': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/block': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/blockchain': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/bun-plugin': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/bundler-cache': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/client-types': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/common': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/compiler': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/config': 1.0.0-rc.151
+ '@tevm/consensus': 1.0.0-rc.152
+ '@tevm/contract': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/decorators': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/errors': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/esbuild-plugin': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))
+ '@tevm/evm': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/http-client': 1.0.0-rc.151(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.6.0)(lightningcss@1.30.2)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(yaml@2.8.1)(zod@4.4.3)
+ '@tevm/jsonrpc': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))
+ '@tevm/memory-client': 1.0.0-rc.151(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.6.0)(lightningcss@1.30.2)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(yaml@2.8.1)(zod@4.4.3)
+ '@tevm/node': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/precompiles': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/predeploys': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/receipt-manager': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/rollup-plugin': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))
+ '@tevm/rspack-plugin': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))
+ '@tevm/server': 1.0.0-rc.151(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.6.0)(lightningcss@1.30.2)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(yaml@2.8.1)
+ '@tevm/solc': 1.0.0-rc.151(typescript@5.9.3)(zod@4.4.3)
+ '@tevm/state': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/sync-storage-persister': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/ts-plugin': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/tx': 1.0.0-rc.151
+ '@tevm/txpool': 1.0.0-rc.151
+ '@tevm/utils': 1.0.0-rc.151(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(zod@4.4.3)
+ '@tevm/viem': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/vite-plugin': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))
+ '@tevm/vm': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))(zod@4.4.3)
+ '@tevm/webpack-plugin': 1.0.0-rc.151(esbuild@0.28.1)(rollup@4.52.2)(typescript@5.9.3)(viem@2.49.3(typescript@5.9.3)(zod@4.4.3))(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1))
+ commander: 14.0.3
+ effect: 3.21.2
+ glob: 13.0.6
+ solc: 0.8.36
+ viem: 2.49.3(typescript@5.9.3)(zod@4.4.3)
+ transitivePeerDependencies:
+ - '@aws-sdk/client-kms'
+ - '@edge-runtime/vm'
+ - '@farmfe/core'
+ - '@opentelemetry/api'
+ - '@rspack/core'
+ - '@types/node'
+ - '@vitest/browser-playwright'
+ - '@vitest/browser-preview'
+ - '@vitest/browser-webdriverio'
+ - '@vitest/coverage-istanbul'
+ - '@vitest/coverage-v8'
+ - '@vitest/ui'
+ - asn1.js
+ - bufferutil
+ - bun-types-no-globals
+ - debug
+ - esbuild
+ - happy-dom
+ - jiti
+ - jsdom
+ - less
+ - lightningcss
+ - msw
+ - rolldown
+ - rollup
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - typescript
+ - unloader
+ - utf-8-validate
+ - vite
+ - webpack
+ - yaml
+ - zod
+
text-decoder@1.2.1: {}
thenify-all@1.6.0:
@@ -17835,6 +21382,10 @@ snapshots:
dependencies:
real-require: 0.2.0
+ thread-stream@4.2.0:
+ dependencies:
+ real-require: 1.0.0
+
through2@4.0.2:
dependencies:
readable-stream: 3.6.2
@@ -17858,7 +21409,11 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
- tinyrainbow@3.0.3: {}
+ tinyrainbow@3.1.0: {}
+
+ tmp@0.0.33:
+ dependencies:
+ os-tmpdir: 1.0.2
tmp@0.2.5: {}
@@ -17894,25 +21449,31 @@ snapshots:
tslib@2.8.1: {}
+ tsx@4.23.1:
+ dependencies:
+ esbuild: 0.28.1
+ optionalDependencies:
+ fsevents: 2.3.3
+
tweetnacl@0.14.5: {}
twoslash-protocol@0.2.12: {}
twoslash-protocol@0.3.4: {}
- twoslash@0.2.12(typescript@5.9.3):
+ twoslash@0.2.12(typescript@7.0.2):
dependencies:
- '@typescript/vfs': 1.6.1(typescript@5.9.3)
+ '@typescript/vfs': 1.6.1(typescript@7.0.2)
twoslash-protocol: 0.2.12
- typescript: 5.9.3
+ typescript: 7.0.2
transitivePeerDependencies:
- supports-color
- twoslash@0.3.4(typescript@5.9.3):
+ twoslash@0.3.4(typescript@7.0.2):
dependencies:
- '@typescript/vfs': 1.6.1(typescript@5.9.3)
+ '@typescript/vfs': 1.6.1(typescript@7.0.2)
twoslash-protocol: 0.3.4
- typescript: 5.9.3
+ typescript: 7.0.2
transitivePeerDependencies:
- supports-color
@@ -17934,6 +21495,29 @@ snapshots:
typescript@5.9.3: {}
+ typescript@7.0.2:
+ optionalDependencies:
+ '@typescript/typescript-aix-ppc64': 7.0.2
+ '@typescript/typescript-darwin-arm64': 7.0.2
+ '@typescript/typescript-darwin-x64': 7.0.2
+ '@typescript/typescript-freebsd-arm64': 7.0.2
+ '@typescript/typescript-freebsd-x64': 7.0.2
+ '@typescript/typescript-linux-arm': 7.0.2
+ '@typescript/typescript-linux-arm64': 7.0.2
+ '@typescript/typescript-linux-loong64': 7.0.2
+ '@typescript/typescript-linux-mips64el': 7.0.2
+ '@typescript/typescript-linux-ppc64': 7.0.2
+ '@typescript/typescript-linux-riscv64': 7.0.2
+ '@typescript/typescript-linux-s390x': 7.0.2
+ '@typescript/typescript-linux-x64': 7.0.2
+ '@typescript/typescript-netbsd-arm64': 7.0.2
+ '@typescript/typescript-netbsd-x64': 7.0.2
+ '@typescript/typescript-openbsd-arm64': 7.0.2
+ '@typescript/typescript-openbsd-x64': 7.0.2
+ '@typescript/typescript-sunos-x64': 7.0.2
+ '@typescript/typescript-win32-arm64': 7.0.2
+ '@typescript/typescript-win32-x64': 7.0.2
+
ua-is-frozen@0.1.2: {}
ua-parser-js@1.0.40: {}
@@ -17959,6 +21543,8 @@ snapshots:
undici-types@7.12.0: {}
+ undici-types@7.24.6: {}
+
undici@7.16.0: {}
unicode-emoji-modifier-base@1.0.0: {}
@@ -18026,6 +21612,17 @@ snapshots:
universalify@2.0.1: {}
+ unplugin@3.3.0(esbuild@0.28.1)(rollup@4.52.2)(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.28.1)):
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ picomatch: 4.0.5
+ webpack-virtual-modules: 0.6.2
+ optionalDependencies:
+ esbuild: 0.28.1
+ rollup: 4.52.2
+ vite: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
+ webpack: 5.101.3(esbuild@0.28.1)
+
update-browserslist-db@1.1.1(browserslist@4.24.2):
dependencies:
browserslist: 4.24.2
@@ -18065,6 +21662,14 @@ snapshots:
util-deprecate@1.0.2: {}
+ util@0.12.5:
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.2.0
+ is-generator-function: 1.1.2
+ is-typed-array: 1.1.15
+ which-typed-array: 1.1.19
+
utility-types@3.11.0: {}
uuid@10.0.0: {}
@@ -18103,16 +21708,33 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.2
- viem@2.43.5(typescript@5.6.2)(zod@3.25.76):
+ viem@2.49.3(typescript@5.9.3)(zod@4.4.3):
dependencies:
'@noble/curves': 1.9.1
'@noble/hashes': 1.8.0
'@scure/bip32': 1.7.0
'@scure/bip39': 1.6.0
- abitype: 1.2.3(typescript@5.6.2)(zod@3.25.76)
+ abitype: 1.2.3(typescript@5.9.3)(zod@4.4.3)
isows: 1.0.7(ws@8.18.3)
- ox: 0.11.1(typescript@5.6.2)(zod@3.25.76)
+ ox: 0.14.20(typescript@5.9.3)(zod@4.4.3)
ws: 8.18.3
+ optionalDependencies:
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ - zod
+
+ viem@2.55.10(typescript@5.6.2)(zod@4.4.3):
+ dependencies:
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@scure/bip32': 1.7.0
+ '@scure/bip39': 1.6.0
+ abitype: 1.2.3(typescript@5.6.2)(zod@4.4.3)
+ isows: 1.0.7(ws@8.21.0)
+ ox: 0.14.33(typescript@5.6.2)(zod@4.4.3)
+ ws: 8.21.0
optionalDependencies:
typescript: 5.6.2
transitivePeerDependencies:
@@ -18120,16 +21742,16 @@ snapshots:
- utf-8-validate
- zod
- viem@2.43.5(typescript@5.9.3)(zod@3.23.8):
+ viem@2.55.10(typescript@5.9.3)(zod@3.23.8):
dependencies:
'@noble/curves': 1.9.1
'@noble/hashes': 1.8.0
'@scure/bip32': 1.7.0
'@scure/bip39': 1.6.0
abitype: 1.2.3(typescript@5.9.3)(zod@3.23.8)
- isows: 1.0.7(ws@8.18.3)
- ox: 0.11.1(typescript@5.9.3)(zod@3.23.8)
- ws: 8.18.3
+ isows: 1.0.7(ws@8.21.0)
+ ox: 0.14.33(typescript@5.9.3)(zod@3.23.8)
+ ws: 8.21.0
optionalDependencies:
typescript: 5.9.3
transitivePeerDependencies:
@@ -18137,16 +21759,16 @@ snapshots:
- utf-8-validate
- zod
- viem@file:src(@solana/sysvars@2.3.0(typescript@5.9.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.6.2)(zod@3.25.76):
+ viem@file:src(@solana/sysvars@2.3.0(typescript@5.9.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.6.2)(zod@4.4.3):
dependencies:
'@noble/curves': 1.9.1
'@noble/hashes': 1.8.0
'@scure/bip32': 1.7.0
'@scure/bip39': 1.6.0
- '@tevm/voltaire': 0.1.40(@noble/hashes@1.8.0)(@solana/sysvars@2.3.0(typescript@5.9.3))(abitype@1.2.3(typescript@5.9.3)(zod@3.25.76))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.6.2)(ws@8.18.3)(zod@3.25.76)
- abitype: 1.2.3(typescript@5.6.2)(zod@3.25.76)
+ '@tevm/voltaire': 0.1.40(@noble/hashes@1.8.0)(@solana/sysvars@2.3.0(typescript@5.9.3))(abitype@1.2.3(typescript@5.6.2)(zod@4.4.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@5.6.2)(ws@8.18.3)(zod@4.4.3)
+ abitype: 1.2.3(typescript@5.6.2)(zod@4.4.3)
isows: 1.0.7(ws@8.18.3)
- ox: 0.11.1(typescript@5.6.2)(zod@3.25.76)
+ ox: 0.11.1(typescript@5.6.2)(zod@4.4.3)
ws: 8.18.3
optionalDependencies:
typescript: 5.6.2
@@ -18167,13 +21789,43 @@ snapshots:
- utf-8-validate
- zod
- vite-node@3.2.4(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1):
+ viem@file:src(@solana/sysvars@2.3.0(typescript@5.9.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@7.0.2)(zod@4.4.3):
+ dependencies:
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@scure/bip32': 1.7.0
+ '@scure/bip39': 1.6.0
+ '@tevm/voltaire': 0.1.40(@noble/hashes@1.8.0)(@solana/sysvars@2.3.0(typescript@5.9.3))(abitype@1.2.3(typescript@7.0.2)(zod@4.4.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)(typescript@7.0.2)(ws@8.18.3)(zod@4.4.3)
+ abitype: 1.2.3(typescript@7.0.2)(zod@4.4.3)
+ isows: 1.0.7(ws@8.18.3)
+ ox: 0.11.1(typescript@7.0.2)(zod@4.4.3)
+ ws: 8.18.3
+ optionalDependencies:
+ typescript: 7.0.2
+ transitivePeerDependencies:
+ - '@solana/sysvars'
+ - bufferutil
+ - debug
+ - encoding
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - react
+ - react-dom
+ - react-native
+ - react-redux
+ - supports-color
+ - tslib
+ - utf-8-validate
+ - zod
+
+ vite-node@3.2.4(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1):
dependencies:
cac: 6.7.14
debug: 4.4.3
es-module-lexer: 1.7.0
pathe: 2.0.3
- vite: 6.4.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ vite: 6.4.1(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -18188,7 +21840,7 @@ snapshots:
- tsx
- yaml
- vite@6.4.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1):
+ vite@6.4.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1):
dependencies:
esbuild: 0.25.0
fdir: 6.5.0(picomatch@4.0.3)
@@ -18202,9 +21854,27 @@ snapshots:
jiti: 2.6.0
lightningcss: 1.30.2
terser: 5.36.0
+ tsx: 4.23.1
+ yaml: 2.8.1
+
+ vite@6.4.1(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1):
+ dependencies:
+ esbuild: 0.25.0
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.52.2
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 25.9.5
+ fsevents: 2.3.3
+ jiti: 2.6.0
+ lightningcss: 1.30.2
+ terser: 5.36.0
+ tsx: 4.23.1
yaml: 2.8.1
- vite@7.1.11(@types/node@20.16.12)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1):
+ vite@7.1.11(@types/node@20.16.12)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1):
dependencies:
esbuild: 0.25.0
fdir: 6.5.0(picomatch@4.0.3)
@@ -18218,9 +21888,10 @@ snapshots:
jiti: 2.6.0
lightningcss: 1.30.2
terser: 5.36.0
+ tsx: 4.23.1
yaml: 2.8.1
- vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1):
+ vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1):
dependencies:
esbuild: 0.25.0
fdir: 6.5.0(picomatch@4.0.3)
@@ -18234,33 +21905,52 @@ snapshots:
jiti: 2.6.0
lightningcss: 1.30.2
terser: 5.36.0
+ tsx: 4.23.1
yaml: 2.8.1
- vitest@4.0.15(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1):
+ vite@7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1):
dependencies:
- '@vitest/expect': 4.0.15
- '@vitest/mocker': 4.0.15(vite@6.4.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))
- '@vitest/pretty-format': 4.0.15
- '@vitest/runner': 4.0.15
- '@vitest/snapshot': 4.0.15
- '@vitest/spy': 4.0.15
- '@vitest/utils': 4.0.15
- es-module-lexer: 1.7.0
- expect-type: 1.2.2
+ esbuild: 0.25.0
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.52.2
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 25.9.5
+ fsevents: 2.3.3
+ jiti: 2.6.0
+ lightningcss: 1.30.2
+ terser: 5.36.0
+ tsx: 4.23.1
+ yaml: 2.8.1
+
+ vitest@4.1.10(@opentelemetry/api@1.7.0)(@types/node@24.5.2)(@vitest/coverage-v8@4.1.10)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1):
+ dependencies:
+ '@vitest/expect': 4.1.10
+ '@vitest/mocker': 4.1.10(vite@6.4.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))
+ '@vitest/pretty-format': 4.1.10
+ '@vitest/runner': 4.1.10
+ '@vitest/snapshot': 4.1.10
+ '@vitest/spy': 4.1.10
+ '@vitest/utils': 4.1.10
+ es-module-lexer: 2.3.1
+ expect-type: 1.4.0
magic-string: 0.30.21
obug: 2.1.1
pathe: 2.0.3
picomatch: 4.0.3
- std-env: 3.10.0
+ std-env: 4.2.0
tinybench: 2.9.0
tinyexec: 1.0.2
tinyglobby: 0.2.15
- tinyrainbow: 3.0.3
- vite: 6.4.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ tinyrainbow: 3.1.0
+ vite: 6.4.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
why-is-node-running: 2.3.0
optionalDependencies:
'@opentelemetry/api': 1.7.0
'@types/node': 24.5.2
+ '@vitest/coverage-v8': 4.1.10(vitest@4.1.10)
transitivePeerDependencies:
- jiti
- less
@@ -18274,7 +21964,7 @@ snapshots:
- tsx
- yaml
- vocs@1.3.1(@types/node@24.5.2)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(jiti@2.6.0)(lightningcss@1.30.2)(next@16.0.10(@opentelemetry/api@1.7.0)(@playwright/test@1.55.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.52.2)(terser@5.36.0)(typescript@5.9.3):
+ vocs@1.3.1(@types/node@25.9.5)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(jiti@2.6.0)(lightningcss@1.30.2)(next@16.0.10(@opentelemetry/api@1.7.0)(@playwright/test@1.55.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.52.2)(terser@5.36.0)(tsx@4.23.1)(typescript@7.0.2):
dependencies:
'@floating-ui/react': 0.27.16(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@hono/node-server': 1.19.5(hono@4.10.3)
@@ -18292,12 +21982,12 @@ snapshots:
'@radix-ui/react-tabs': 1.1.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@shikijs/rehype': 1.29.2
'@shikijs/transformers': 1.29.2
- '@shikijs/twoslash': 1.29.2(typescript@5.9.3)
- '@tailwindcss/vite': 4.1.15(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))
+ '@shikijs/twoslash': 1.29.2(typescript@7.0.2)
+ '@tailwindcss/vite': 4.1.15(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))
'@vanilla-extract/css': 1.17.4
'@vanilla-extract/dynamic': 2.1.5
- '@vanilla-extract/vite-plugin': 5.1.1(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))(yaml@2.8.1)
- '@vitejs/plugin-react': 5.0.4(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1))
+ '@vanilla-extract/vite-plugin': 5.1.1(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))(yaml@2.8.1)
+ '@vitejs/plugin-react': 5.0.4(vite@7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1))
autoprefixer: 10.4.21(postcss@8.5.6)
cac: 6.7.14
chroma-js: 3.1.2
@@ -18342,12 +22032,12 @@ snapshots:
serve-static: 1.16.2
shiki: 1.29.2
toml: 3.0.0
- twoslash: 0.3.4(typescript@5.9.3)
+ twoslash: 0.3.4(typescript@7.0.2)
ua-parser-js: 1.0.40
unified: 11.0.5
unist-util-visit: 5.0.0
vfile-matter: 5.0.1
- vite: 7.1.11(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(yaml@2.8.1)
+ vite: 7.1.11(@types/node@25.9.5)(jiti@2.6.0)(lightningcss@1.30.2)(terser@5.36.0)(tsx@4.23.1)(yaml@2.8.1)
yaml: 2.8.1
transitivePeerDependencies:
- '@remix-run/react'
@@ -18399,11 +22089,46 @@ snapshots:
web-namespaces@2.0.1: {}
+ web3-errors@1.3.1:
+ dependencies:
+ web3-types: 1.10.0
+
+ web3-eth-abi@4.4.1(typescript@5.9.3)(zod@4.4.3):
+ dependencies:
+ abitype: 0.7.1(typescript@5.9.3)(zod@4.4.3)
+ web3-errors: 1.3.1
+ web3-types: 1.10.0
+ web3-utils: 4.3.3
+ web3-validator: 2.0.6
+ transitivePeerDependencies:
+ - typescript
+ - zod
+
+ web3-types@1.10.0: {}
+
+ web3-utils@4.3.3:
+ dependencies:
+ ethereum-cryptography: 2.2.1
+ eventemitter3: 5.0.4
+ web3-errors: 1.3.1
+ web3-types: 1.10.0
+ web3-validator: 2.0.6
+
+ web3-validator@2.0.6:
+ dependencies:
+ ethereum-cryptography: 2.2.1
+ util: 0.12.5
+ web3-errors: 1.3.1
+ web3-types: 1.10.0
+ zod: 3.25.76
+
webidl-conversions@3.0.1: {}
webpack-sources@3.3.3: {}
- webpack@5.101.3:
+ webpack-virtual-modules@0.6.2: {}
+
+ webpack@5.101.3(esbuild@0.28.1):
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.8
@@ -18416,7 +22141,7 @@ snapshots:
browserslist: 4.24.4
chrome-trace-event: 1.0.4
enhanced-resolve: 5.18.1
- es-module-lexer: 1.6.0
+ es-module-lexer: 1.7.0
eslint-scope: 5.1.1
events: 3.3.0
glob-to-regexp: 0.4.1
@@ -18427,7 +22152,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 4.3.2
tapable: 2.2.1
- terser-webpack-plugin: 5.3.14(webpack@5.101.3)
+ terser-webpack-plugin: 5.3.14(esbuild@0.28.1)(webpack@5.101.3(esbuild@0.28.1))
watchpack: 2.4.2
webpack-sources: 3.3.3
transitivePeerDependencies:
@@ -18450,6 +22175,10 @@ snapshots:
gopd: 1.2.0
has-tostringtag: 1.0.2
+ which@1.3.1:
+ dependencies:
+ isexe: 2.0.0
+
which@2.0.2:
dependencies:
isexe: 2.0.0
@@ -18481,6 +22210,8 @@ snapshots:
ws@8.18.3: {}
+ ws@8.21.0: {}
+
xrpl@4.4.3:
dependencies:
'@scure/bip32': 1.7.0
@@ -18488,7 +22219,7 @@ snapshots:
'@xrplf/isomorphic': 1.0.1
'@xrplf/secret-numbers': 2.0.0
bignumber.js: 9.3.1
- eventemitter3: 5.0.1
+ eventemitter3: 5.0.4
fast-json-stable-stringify: 2.1.0
ripple-address-codec: 5.0.0
ripple-binary-codec: 2.6.0
@@ -18562,4 +22293,6 @@ snapshots:
zod@3.25.76: {}
+ zod@4.4.3: {}
+
zwitch@2.0.4: {}
diff --git a/src/account-abstraction/accounts/implementations/toCoinbaseSmartAccount.test.ts b/src/account-abstraction/accounts/implementations/toCoinbaseSmartAccount.test.ts
index 64bb6f4e8f..be821eac7e 100644
--- a/src/account-abstraction/accounts/implementations/toCoinbaseSmartAccount.test.ts
+++ b/src/account-abstraction/accounts/implementations/toCoinbaseSmartAccount.test.ts
@@ -1,5 +1,5 @@
import { beforeEach, describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { bundlerMainnet } from '~test/bundler.js'
import { accounts, typedData } from '~test/constants.js'
import { privateKeyToAccount } from '../../../accounts/privateKeyToAccount.js'
@@ -27,7 +27,7 @@ import {
wrapSignature,
} from './toCoinbaseSmartAccount.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
const bundlerClient = bundlerMainnet.getBundlerClient({ client })
const owner = privateKeyToAccount(accounts[0].privateKey)
diff --git a/src/account-abstraction/accounts/implementations/toSimple7702SmartAccount.test-d.ts b/src/account-abstraction/accounts/implementations/toSimple7702SmartAccount.test-d.ts
index 7a8a45d9ef..03c6f707f7 100644
--- a/src/account-abstraction/accounts/implementations/toSimple7702SmartAccount.test-d.ts
+++ b/src/account-abstraction/accounts/implementations/toSimple7702SmartAccount.test-d.ts
@@ -1,6 +1,6 @@
import { expectTypeOf, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { privateKeyToAccount } from '../../../accounts/privateKeyToAccount.js'
import type { Account } from '../../../types/account.js'
import type { entryPoint08Abi, entryPoint09Abi } from '../../constants/abis.js'
@@ -10,7 +10,7 @@ import {
toSimple7702SmartAccount,
} from './toSimple7702SmartAccount.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const owner = privateKeyToAccount(
'0x0000000000000000000000000000000000000000000000000000000000000001',
)
diff --git a/src/account-abstraction/accounts/implementations/toSimple7702SmartAccount.test.ts b/src/account-abstraction/accounts/implementations/toSimple7702SmartAccount.test.ts
index 0ad3ea1a17..7ed29846b4 100644
--- a/src/account-abstraction/accounts/implementations/toSimple7702SmartAccount.test.ts
+++ b/src/account-abstraction/accounts/implementations/toSimple7702SmartAccount.test.ts
@@ -1,7 +1,7 @@
import type { Address } from 'abitype'
import { beforeAll, beforeEach, describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { accounts, typedData } from '~test/constants.js'
import { deploySimple7702Account_08 } from '~test/utils.js'
import { privateKeyToAccount } from '../../../accounts/privateKeyToAccount.js'
@@ -17,7 +17,7 @@ import { entryPoint06Abi } from '../../constants/abis.js'
import { entryPoint06Address } from '../../constants/address.js'
import { toSimple7702SmartAccount } from './toSimple7702SmartAccount.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
let implementation: Address
beforeAll(async () => {
diff --git a/src/account-abstraction/accounts/implementations/toSoladySmartAccount.test.ts b/src/account-abstraction/accounts/implementations/toSoladySmartAccount.test.ts
index bc7e5fbc17..1bf0081d0a 100644
--- a/src/account-abstraction/accounts/implementations/toSoladySmartAccount.test.ts
+++ b/src/account-abstraction/accounts/implementations/toSoladySmartAccount.test.ts
@@ -1,7 +1,7 @@
import type { Address } from 'abitype'
import { beforeAll, beforeEach, describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { accounts, typedData } from '~test/constants.js'
import { deploySoladyAccount_07 } from '~test/utils.js'
import { privateKeyToAccount } from '../../../accounts/privateKeyToAccount.js'
@@ -15,7 +15,7 @@ import { encodeFunctionData } from '../../../utils/abi/encodeFunctionData.js'
import { pad } from '../../../utils/data/pad.js'
import { toSoladySmartAccount } from './toSoladySmartAccount.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
let factoryAddress: Address
beforeAll(async () => {
diff --git a/src/account-abstraction/accounts/toSmartAccount.test-d.ts b/src/account-abstraction/accounts/toSmartAccount.test-d.ts
index 5f494262de..9d4844a945 100644
--- a/src/account-abstraction/accounts/toSmartAccount.test-d.ts
+++ b/src/account-abstraction/accounts/toSmartAccount.test-d.ts
@@ -1,6 +1,6 @@
import { expectTypeOf, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import type { Account } from '../../types/account.js'
import {
type SoladySmartAccountImplementation,
@@ -8,7 +8,7 @@ import {
} from './implementations/toSoladySmartAccount.js'
import type { SmartAccount } from './types.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const account = await toSoladySmartAccount({
diff --git a/src/account-abstraction/accounts/toSmartAccount.test.ts b/src/account-abstraction/accounts/toSmartAccount.test.ts
index 086afa2d07..f1887e9339 100644
--- a/src/account-abstraction/accounts/toSmartAccount.test.ts
+++ b/src/account-abstraction/accounts/toSmartAccount.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { accounts } from '~test/constants.js'
import { deploySoladyAccount_07 } from '~test/utils.js'
import { mine, writeContract } from '../../actions/index.js'
@@ -8,7 +8,7 @@ import { createNonceManager, pad } from '../../utils/index.js'
import { toSoladySmartAccount } from './implementations/toSoladySmartAccount.js'
import { toSmartAccount } from './toSmartAccount.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
test('default', async () => {
const { factoryAddress } = await deploySoladyAccount_07()
diff --git a/src/account-abstraction/actions/bundler/estimateUserOperationGas.test.ts b/src/account-abstraction/actions/bundler/estimateUserOperationGas.test.ts
index 5ab7cdba84..bc449e9f0e 100644
--- a/src/account-abstraction/actions/bundler/estimateUserOperationGas.test.ts
+++ b/src/account-abstraction/actions/bundler/estimateUserOperationGas.test.ts
@@ -8,7 +8,7 @@ import {
getVerifyingPaymaster_07,
getVerifyingPaymaster_08,
} from '~test/account-abstraction.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { bundlerMainnet } from '~test/bundler.js'
import { accounts } from '~test/constants.js'
import { deployErrorExample } from '~test/utils.js'
@@ -21,7 +21,7 @@ import type { UserOperation } from '../../types/userOperation.js'
import { estimateUserOperationGas } from './estimateUserOperationGas.js'
import { prepareUserOperation } from './prepareUserOperation.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
const bundlerClient = bundlerMainnet.getBundlerClient()
const fees = {
diff --git a/src/account-abstraction/actions/bundler/getUserOperation.test.ts b/src/account-abstraction/actions/bundler/getUserOperation.test.ts
index 5ed82c2f48..7f56124a6b 100644
--- a/src/account-abstraction/actions/bundler/getUserOperation.test.ts
+++ b/src/account-abstraction/actions/bundler/getUserOperation.test.ts
@@ -4,7 +4,7 @@ import {
getSmartAccounts_07,
getSmartAccounts_08,
} from '~test/account-abstraction.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { bundlerMainnet } from '~test/bundler.js'
import { signAuthorization } from '../../../actions/index.js'
import { mine } from '../../../actions/test/mine.js'
@@ -12,7 +12,7 @@ import { parseEther, parseGwei } from '../../../utils/index.js'
import { getUserOperation } from './getUserOperation.js'
import { sendUserOperation } from './sendUserOperation.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
const bundlerClient = bundlerMainnet.getBundlerClient()
const fees = {
diff --git a/src/account-abstraction/actions/bundler/getUserOperationReceipt.test.ts b/src/account-abstraction/actions/bundler/getUserOperationReceipt.test.ts
index 065330f25c..7ae050f0a8 100644
--- a/src/account-abstraction/actions/bundler/getUserOperationReceipt.test.ts
+++ b/src/account-abstraction/actions/bundler/getUserOperationReceipt.test.ts
@@ -4,14 +4,14 @@ import {
getSmartAccounts_07,
getSmartAccounts_08,
} from '~test/account-abstraction.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { bundlerMainnet } from '~test/bundler.js'
import { mine, signAuthorization } from '../../../actions/index.js'
import { parseEther, parseGwei } from '../../../utils/index.js'
import { getUserOperationReceipt } from './getUserOperationReceipt.js'
import { sendUserOperation } from './sendUserOperation.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
const bundlerClient = bundlerMainnet.getBundlerClient()
const fees = {
diff --git a/src/account-abstraction/actions/bundler/prepareUserOperation.test.ts b/src/account-abstraction/actions/bundler/prepareUserOperation.test.ts
index 16abb7da8c..e0a713bd70 100644
--- a/src/account-abstraction/actions/bundler/prepareUserOperation.test.ts
+++ b/src/account-abstraction/actions/bundler/prepareUserOperation.test.ts
@@ -8,7 +8,7 @@ import {
getVerifyingPaymaster_07,
getVerifyingPaymaster_08,
} from '~test/account-abstraction.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { bundlerMainnet } from '~test/bundler.js'
import { accounts } from '~test/constants.js'
import { mine } from '../../../actions/test/mine.js'
@@ -20,7 +20,7 @@ import { getPaymasterData } from '../paymaster/getPaymasterData.js'
import { getPaymasterStubData } from '../paymaster/getPaymasterStubData.js'
import { prepareUserOperation } from './prepareUserOperation.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
const bundlerClient = bundlerMainnet.getBundlerClient({ client })
const fees = {
@@ -482,7 +482,7 @@ describe('entryPointVersion: 0.8', async () => {
})
test('args: paymaster (client w/ no chain)', async () => {
- const client = anvilMainnet.getClient({ account: true, chain: false })
+ const client = tevmMainnet.getClient({ account: true, chain: false })
const paymaster = await getVerifyingPaymaster_08()
const server = await createVerifyingPaymasterServer(client, { paymaster })
@@ -1680,7 +1680,7 @@ describe('entryPointVersion: 0.7', async () => {
})
test('args: paymaster (client w/ no chain)', async () => {
- const client = anvilMainnet.getClient({ account: true, chain: false })
+ const client = tevmMainnet.getClient({ account: true, chain: false })
const paymaster = await getVerifyingPaymaster_07()
const server = await createVerifyingPaymasterServer(client, { paymaster })
diff --git a/src/account-abstraction/actions/bundler/sendUserOperation.test.ts b/src/account-abstraction/actions/bundler/sendUserOperation.test.ts
index ad2662e07e..8c9026e487 100644
--- a/src/account-abstraction/actions/bundler/sendUserOperation.test.ts
+++ b/src/account-abstraction/actions/bundler/sendUserOperation.test.ts
@@ -8,9 +8,9 @@ import {
getVerifyingPaymaster_07,
getVerifyingPaymaster_08,
} from '~test/account-abstraction.js'
-import { anvilMainnet } from '~test/anvil.js'
import { bundlerMainnet } from '~test/bundler.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { privateKeyToAccount } from '../../../accounts/privateKeyToAccount.js'
import {
getBalance,
@@ -31,7 +31,7 @@ import type { UserOperation } from '../../types/userOperation.js'
import { prepareUserOperation } from './prepareUserOperation.js'
import { sendUserOperation } from './sendUserOperation.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
const bundlerClient = bundlerMainnet.getBundlerClient({ client })
const alice = accounts[7].address
@@ -79,7 +79,7 @@ describe('entryPointVersion: 0.8', async () => {
],
...fees,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
await bundlerClient.request({ method: 'debug_bundler_sendBundleNow' })
await mine(client, { blocks: 1 })
@@ -142,7 +142,7 @@ describe('entryPointVersion: 0.8', async () => {
paymaster: paymasterClient,
...fees,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
await bundlerClient.request({ method: 'debug_bundler_sendBundleNow' })
await mine(client, { blocks: 1 })
@@ -175,7 +175,7 @@ describe('entryPointVersion: 0.8', async () => {
],
...fees,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
await bundlerClient.request({ method: 'debug_bundler_sendBundleNow' })
await mine(client, { blocks: 1 })
@@ -210,7 +210,7 @@ describe('entryPointVersion: 0.8', async () => {
signature,
authorization,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
await bundlerClient.request({ method: 'debug_bundler_sendBundleNow' })
await mine(client, { blocks: 1 })
@@ -318,7 +318,7 @@ describe('entryPointVersion: 0.7', async () => {
],
...fees,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
await bundlerClient.request({ method: 'debug_bundler_sendBundleNow' })
await mine(client, { blocks: 1 })
@@ -361,7 +361,7 @@ describe('entryPointVersion: 0.7', async () => {
paymaster: paymasterClient,
...fees,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
await bundlerClient.request({ method: 'debug_bundler_sendBundleNow' })
await mine(client, { blocks: 1 })
@@ -394,7 +394,7 @@ describe('entryPointVersion: 0.7', async () => {
],
...fees,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
await bundlerClient.request({ method: 'debug_bundler_sendBundleNow' })
await mine(client, { blocks: 1 })
@@ -427,7 +427,7 @@ describe('entryPointVersion: 0.7', async () => {
entryPointAddress: account.entryPoint.address,
signature,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
await bundlerClient.request({ method: 'debug_bundler_sendBundleNow' })
await mine(client, { blocks: 1 })
@@ -615,7 +615,7 @@ describe('entryPointVersion: 0.6', async () => {
],
...fees,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
await bundlerClient.request({ method: 'debug_bundler_sendBundleNow' })
await mine(client, { blocks: 1 })
@@ -675,7 +675,7 @@ test.skip('e2e', async () => {
const client = createPublicClient({
chain: sepolia,
- transport: http(process.env.VITE_ANVIL_FORK_URL_SEPOLIA),
+ transport: http(process.env.VITE_TEVM_FORK_URL_SEPOLIA),
})
// const paymasterClient = createPaymasterClient({
diff --git a/src/account-abstraction/actions/bundler/waitForUserOperationReceipt.test.ts b/src/account-abstraction/actions/bundler/waitForUserOperationReceipt.test.ts
index 68243c8d7e..f5fa594932 100644
--- a/src/account-abstraction/actions/bundler/waitForUserOperationReceipt.test.ts
+++ b/src/account-abstraction/actions/bundler/waitForUserOperationReceipt.test.ts
@@ -4,7 +4,7 @@ import {
getSmartAccounts_07,
getSmartAccounts_08,
} from '~test/account-abstraction.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { bundlerMainnet } from '~test/bundler.js'
import { mine, signAuthorization } from '../../../actions/index.js'
import { parseEther, parseGwei } from '../../../utils/index.js'
@@ -13,7 +13,7 @@ import * as getUserOperationReceipt from './getUserOperationReceipt.js'
import { sendUserOperation } from './sendUserOperation.js'
import { waitForUserOperationReceipt } from './waitForUserOperationReceipt.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
const bundlerClient = bundlerMainnet.getBundlerClient()
const fees = {
diff --git a/src/account-abstraction/actions/paymaster/getPaymasterData.test.ts b/src/account-abstraction/actions/paymaster/getPaymasterData.test.ts
index 729da2d9a0..7b7b3dce98 100644
--- a/src/account-abstraction/actions/paymaster/getPaymasterData.test.ts
+++ b/src/account-abstraction/actions/paymaster/getPaymasterData.test.ts
@@ -6,7 +6,7 @@ import {
getVerifyingPaymaster_07,
getVerifyingPaymaster_08,
} from '~test/account-abstraction.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { bundlerMainnet } from '~test/bundler.js'
import { mine, signAuthorization } from '../../../actions/index.js'
import { http } from '../../../clients/transports/http.js'
@@ -19,7 +19,7 @@ import { sendUserOperation } from '../bundler/sendUserOperation.js'
import { getPaymasterData } from './getPaymasterData.js'
import { getPaymasterStubData } from './getPaymasterStubData.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
const bundlerClient = bundlerMainnet.getBundlerClient({ client })
describe('entryPointVersion: 0.8', async () => {
@@ -49,8 +49,8 @@ describe('entryPointVersion: 0.8', async () => {
entryPointAddress: account.entryPoint.address,
...userOperation,
})
- expect(paymaster).toBeDefined()
- expect(paymasterData).toBeDefined()
+ expect(paymaster).toBeAddress({ strict: false })
+ expect(paymasterData).toBeHex()
expect(userOperation_paymasterStub).toMatchInlineSnapshot(`
{
"isFinal": false,
@@ -92,7 +92,7 @@ describe('entryPointVersion: 0.8', async () => {
authorization,
signature: undefined,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
await bundlerClient.request({
method: 'debug_bundler_sendBundleNow',
@@ -133,8 +133,8 @@ describe('entryPointVersion: 0.7', async () => {
entryPointAddress: account.entryPoint.address,
...userOperation,
})
- expect(paymaster).toBeDefined()
- expect(paymasterData).toBeDefined()
+ expect(paymaster).toBeAddress({ strict: false })
+ expect(paymasterData).toBeHex()
expect(userOperation_paymasterStub).toMatchInlineSnapshot(`
{
"isFinal": false,
@@ -174,7 +174,7 @@ describe('entryPointVersion: 0.7', async () => {
...userOperation_paymaster,
signature: undefined,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
await bundlerClient.request({
method: 'debug_bundler_sendBundleNow',
diff --git a/src/account-abstraction/actions/paymaster/getPaymasterStubData.test.ts b/src/account-abstraction/actions/paymaster/getPaymasterStubData.test.ts
index 3bbc4029b3..eabc534ddf 100644
--- a/src/account-abstraction/actions/paymaster/getPaymasterStubData.test.ts
+++ b/src/account-abstraction/actions/paymaster/getPaymasterStubData.test.ts
@@ -6,7 +6,7 @@ import {
getVerifyingPaymaster_07,
getVerifyingPaymaster_08,
} from '~test/account-abstraction.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { bundlerMainnet } from '~test/bundler.js'
import { http } from '../../../clients/transports/http.js'
import { parseEther } from '../../../utils/index.js'
@@ -15,7 +15,7 @@ import { estimateUserOperationGas } from '../bundler/estimateUserOperationGas.js
import { prepareUserOperation } from '../bundler/prepareUserOperation.js'
import { getPaymasterStubData } from './getPaymasterStubData.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
const bundlerClient = bundlerMainnet.getBundlerClient({ client })
describe('entryPointVersion: 0.8', async () => {
@@ -45,8 +45,8 @@ describe('entryPointVersion: 0.8', async () => {
entryPointAddress: account.entryPoint.address,
...userOperation,
})
- expect(paymaster).toBeDefined()
- expect(paymasterData).toBeDefined()
+ expect(paymaster).toBeAddress({ strict: false })
+ expect(paymasterData).toBeHex()
expect(userOperation_paymaster).toMatchInlineSnapshot(`
{
"isFinal": false,
@@ -100,8 +100,8 @@ describe('entryPointVersion: 0.7', async () => {
entryPointAddress: account.entryPoint.address,
...userOperation,
})
- expect(paymaster).toBeDefined()
- expect(paymasterData).toBeDefined()
+ expect(paymaster).toBeAddress({ strict: false })
+ expect(paymasterData).toBeHex()
expect(userOperation_paymaster).toMatchInlineSnapshot(`
{
"isFinal": false,
diff --git a/src/account-abstraction/clients/decorators/bundler.test.ts b/src/account-abstraction/clients/decorators/bundler.test.ts
index eff6d9e721..18bd3f5526 100644
--- a/src/account-abstraction/clients/decorators/bundler.test.ts
+++ b/src/account-abstraction/clients/decorators/bundler.test.ts
@@ -1,11 +1,11 @@
import { beforeEach, describe, expect, test } from 'vitest'
import { getSmartAccounts_07 } from '~test/account-abstraction.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { bundlerMainnet } from '~test/bundler.js'
import { mine } from '../../../actions/index.js'
import { bundlerActions } from './bundler.js'
-const client = anvilMainnet.getClient().extend(bundlerActions)
+const client = tevmMainnet.getClient().extend(bundlerActions)
const bundlerClient = bundlerMainnet.getBundlerClient().extend(bundlerActions)
beforeEach(async () => {
diff --git a/src/accounts/utils/signTransaction.test.ts b/src/accounts/utils/signTransaction.test.ts
index 0a1d845eb2..f00f061fd6 100644
--- a/src/accounts/utils/signTransaction.test.ts
+++ b/src/accounts/utils/signTransaction.test.ts
@@ -1,8 +1,8 @@
import { assertType, describe, expect, test, vi } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
import { blobData, kzg } from '~test/kzg.js'
+import { tevmMainnet } from '~test/tevm.js'
import { prepareTransactionRequest } from '../../actions/index.js'
import { concatHex, stringToHex, toHex, toRlp } from '../../index.js'
import type {
@@ -22,7 +22,7 @@ import { parseGwei } from '../../utils/unit/parseGwei.js'
import { privateKeyToAccount } from '../privateKeyToAccount.js'
import { signTransaction } from './signTransaction.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const base = {
gas: 21000n,
diff --git a/src/actions/ens/getEnsAddress.bench.ts b/src/actions/ens/getEnsAddress.bench.ts
index 76c3088c6a..83008d1100 100644
--- a/src/actions/ens/getEnsAddress.bench.ts
+++ b/src/actions/ens/getEnsAddress.bench.ts
@@ -1,17 +1,14 @@
import { beforeAll, bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { ethersProvider } from '~test/bench.js'
+import { createTevmTestHarness } from '~test/tevm.js'
-import { reset } from '../test/reset.js'
import { getEnsAddress } from './getEnsAddress.js'
-const client = anvilMainnet.getClient()
+const harness = createTevmTestHarness({ forkBlockNumber: 16_773_780n })
+const client = harness.getClient()
beforeAll(async () => {
- await reset(client, {
- blockNumber: 16773780n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
+ await harness.ready()
})
describe('Get ENS Name', () => {
diff --git a/src/actions/ens/getEnsAddress.test.ts b/src/actions/ens/getEnsAddress.test.ts
index f4d459a405..7aba86b1e7 100644
--- a/src/actions/ens/getEnsAddress.test.ts
+++ b/src/actions/ens/getEnsAddress.test.ts
@@ -1,29 +1,36 @@
+import { createServer, type RequestListener } from 'node:http'
+import type { AddressInfo } from 'node:net'
import { beforeAll, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
-import { createHttpServer, setVitalikResolver } from '~test/utils.js'
+import { ensRegistryConfig } from '~test/abis.js'
+import { address } from '~test/constants.js'
+import { createTevmTestHarness } from '~test/tevm.js'
import { linea, mainnet, optimism } from '../../chains/index.js'
import { createClient } from '../../clients/createClient.js'
import { http } from '../../clients/transports/http.js'
import { toCoinType } from '../../ens/index.js'
-import { reset } from '../test/reset.js'
+import { namehash } from '../../utils/ens/namehash.js'
+import { impersonateAccount } from '../test/impersonateAccount.js'
+import { mine } from '../test/mine.js'
+import { stopImpersonatingAccount } from '../test/stopImpersonatingAccount.js'
+import { writeContract } from '../wallet/writeContract.js'
import { getEnsAddress } from './getEnsAddress.js'
-const client = anvilMainnet.getClient()
+const harness = createTevmTestHarness({
+ // The historical fixture's 23_085_558 anchor contains EIP-4844 transactions,
+ // which Tevm cannot deserialize. This is the nearest blob-free block.
+ forkBlockNumber: 23_085_561n,
+})
+const client = harness.getClient()
beforeAll(async () => {
- await reset(client, {
- blockNumber: 23_085_558n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
+ await harness.ready()
await setVitalikResolver()
})
test('gets address for name', async () => {
await expect(
getEnsAddress(client, { name: 'awkweb.eth' }),
- ).resolves.toMatchInlineSnapshot(
- '"0xA0Cf798816D4b9b9866b5330EEa46a18382f251e"',
- )
+ ).resolves.toEqualAddress('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')
})
test('gatewayUrls provided', async () => {
@@ -45,25 +52,19 @@ test('gatewayUrls provided', async () => {
test('gets address that starts with 0s for name', async () => {
await expect(
getEnsAddress(client, { name: 'skeith.eth' }),
- ).resolves.toMatchInlineSnapshot(
- '"0x00A59Ec1F4BF9718EeE07078141b540272BAB807"',
- )
+ ).resolves.toEqualAddress('0x00A59Ec1F4BF9718EeE07078141b540272BAB807')
})
test('gets address for name with coinType', async () => {
await expect(
getEnsAddress(client, { name: 'awkweb.eth', coinType: 60n }),
- ).resolves.toMatchInlineSnapshot(
- '"0xa0cf798816d4b9b9866b5330eea46a18382f251e"',
- )
+ ).resolves.toEqualAddress('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')
})
-test('gets address for name with coinType', async () => {
+test('gets address for name with non-evm coinType', async () => {
await expect(
getEnsAddress(client, { name: 'awkweb.eth', coinType: toCoinType(1) }),
- ).resolves.toMatchInlineSnapshot(
- '"0xa0cf798816d4b9b9866b5330eea46a18382f251e"',
- )
+ ).resolves.toEqualAddress('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')
})
test('name without address with coinType', async () => {
@@ -75,9 +76,7 @@ test('name without address with coinType', async () => {
test('name with address with chainId', async () => {
await expect(
getEnsAddress(client, { name: 'taytems.eth', coinType: toCoinType(10) }),
- ).resolves.toMatchInlineSnapshot(
- '"0x8e8db5ccef88cca9d624701db544989c996e3216"',
- )
+ ).resolves.toEqualAddress('0x8e8db5ccef88cca9d624701db544989c996e3216')
})
test('name without address with chainId', async () => {
@@ -101,7 +100,7 @@ test('name with resolver that does not support addr', async () => {
test('name with resolver that does not support addr - strict', async () => {
await expect(
getEnsAddress(client, { name: 'vitalik.eth', strict: true }),
- ).rejects.toMatchInlineSnapshot(`
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`
[ContractFunctionExecutionError: The contract function "resolveWithGateways" reverted.
Error: ResolverError(bytes errorData)
@@ -120,14 +119,10 @@ test('name with resolver that does not support addr - strict', async () => {
test('name that looks like a hex', async () => {
await expect(
getEnsAddress(client, { name: '0xyoshi.eth' }),
- ).resolves.toMatchInlineSnapshot(
- '"0xE332de3c84C305698675A73F366061941C78e3b4"',
- )
+ ).resolves.toEqualAddress('0xE332de3c84C305698675A73F366061941C78e3b4')
await expect(
getEnsAddress(client, { name: '0xdeadbeef.eth' }),
- ).resolves.toMatchInlineSnapshot(
- '"0xA8cc612Ecb2E853d3A882b0F9cf5357C2D892aDb"',
- )
+ ).resolves.toEqualAddress('0xA8cc612Ecb2E853d3A882b0F9cf5357C2D892aDb')
})
test('name with a label larger than 255 bytes', async () => {
@@ -135,17 +130,13 @@ test('name with a label larger than 255 bytes', async () => {
getEnsAddress(client, {
name: `${'9'.repeat(291)}.eth`,
}),
- ).resolves.toMatchInlineSnapshot(
- `"0xcdf14B42e1D3c264F6955521944a50d9A4d5CF3a"`,
- )
+ ).resolves.toEqualAddress('0xcdf14B42e1D3c264F6955521944a50d9A4d5CF3a')
})
test('offchain: gets address for name', async () => {
await expect(
getEnsAddress(client, { name: '1.offchainexample.eth' }),
- ).resolves.toMatchInlineSnapshot(
- `"0x41563129cDbbD0c5D3e1c86cf9563926b243834d"`,
- )
+ ).resolves.toEqualAddress('0x41563129cDbbD0c5D3e1c86cf9563926b243834d')
})
test('offchain: name without address', async () => {
@@ -160,7 +151,7 @@ test('offchain: aggregated', async () => {
const client = createClient({
chain: mainnet,
batch: { multicall: true },
- transport: http(process.env.VITE_ANVIL_FORK_URL),
+ transport: http(process.env.VITE_TEVM_FORK_URL),
})
const names = await Promise.all([
@@ -171,15 +162,13 @@ test('offchain: aggregated', async () => {
}),
])
- expect(names).toMatchInlineSnapshot(
- `
+ expect(names).toMatchInlineSnapshot(`
[
"0x41563129cDbbD0c5D3e1c86cf9563926b243834d",
"0x41563129cDbbD0c5D3e1c86cf9563926b243834d",
null,
]
- `,
- )
+ `)
})
test('custom universal resolver address', async () => {
@@ -188,19 +177,12 @@ test('custom universal resolver address', async () => {
name: 'awkweb.eth',
universalResolverAddress: '0xED73a03F19e8D849E44a39252d222c6ad5217E1e',
}),
- ).resolves.toMatchInlineSnapshot(
- '"0xA0Cf798816D4b9b9866b5330EEa46a18382f251e"',
- )
+ ).resolves.toEqualAddress('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')
})
test('chain not provided', async () => {
await expect(
- getEnsAddress(
- createClient({
- transport: http(anvilMainnet.rpcUrl.http),
- }),
- { name: 'awkweb.eth' },
- ),
+ getEnsAddress(harness.getClient({ chain: false }), { name: 'awkweb.eth' }),
).rejects.toThrowErrorMatchingInlineSnapshot(
'[Error: client chain not configured. universalResolverAddress is required.]',
)
@@ -229,7 +211,7 @@ test('universal resolver contract deployed on later block', async () => {
await expect(
getEnsAddress(client, { name: 'awkweb.eth', blockNumber: 14353601n }),
).rejects.toThrowErrorMatchingInlineSnapshot(`
- [ChainDoesNotSupportContract: Chain "Ethereum (Local)" does not support contract "ensUniversalResolver".
+ [ChainDoesNotSupportContract: Chain "Ethereum (Tevm)" does not support contract "ensUniversalResolver".
This could be due to any of the following:
- The contract "ensUniversalResolver" was not deployed until block 23085558 (current block 14353601).
@@ -266,3 +248,45 @@ test('invalid TLD', async () => {
getEnsAddress(client, { name: 'vitalik.eth' }),
).resolves.toBeNull()
})
+
+async function setVitalikResolver() {
+ await impersonateAccount(client, {
+ address: address.vitalik,
+ })
+ await writeContract(client, {
+ ...ensRegistryConfig,
+ account: address.vitalik,
+ functionName: 'setResolver',
+ args: [namehash('vitalik.eth'), ensRegistryConfig.address],
+ })
+
+ await writeContract(client, {
+ ...ensRegistryConfig,
+ account: address.vitalik,
+ functionName: 'setResolver',
+ args: [namehash('vbuterin.eth'), address.vitalik],
+ })
+
+ await mine(client, { blocks: 1 })
+ await stopImpersonatingAccount(client, {
+ address: address.vitalik,
+ })
+}
+
+function createHttpServer(
+ handler: RequestListener,
+): Promise<{ close: () => Promise; url: string }> {
+ const server = createServer(handler)
+
+ const closeAsync = () =>
+ new Promise((resolve, reject) =>
+ server.close((err) => (err ? reject(err) : resolve(undefined))),
+ )
+
+ return new Promise((resolve) => {
+ server.listen(() => {
+ const { port } = server.address() as AddressInfo
+ resolve({ close: closeAsync, url: `http://localhost:${port}` })
+ })
+ })
+}
diff --git a/src/actions/ens/getEnsAvatar.test.ts b/src/actions/ens/getEnsAvatar.test.ts
index 8c7922d51e..d4f89d3c26 100644
--- a/src/actions/ens/getEnsAvatar.test.ts
+++ b/src/actions/ens/getEnsAvatar.test.ts
@@ -1,26 +1,34 @@
-import { beforeAll, describe, expect, test } from 'vitest'
+import { afterAll, beforeAll, describe, expect, test } from 'vitest'
+import { EnsAvatarTokenUri } from '~contracts/generated.js'
import { ensPublicResolverConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { address } from '~test/constants.js'
-import { deployEnsAvatarTokenUri } from '~test/utils.js'
+import { createTevmTestHarness } from '~test/tevm.js'
import { namehash } from '../../utils/ens/namehash.js'
import { impersonateAccount } from '../test/impersonateAccount.js'
import { mine } from '../test/mine.js'
-import { reset } from '../test/reset.js'
+import { stopImpersonatingAccount } from '../test/stopImpersonatingAccount.js'
import { writeContract } from '../wallet/writeContract.js'
import { getEnsAvatar } from './getEnsAvatar.js'
-const client = anvilMainnet.getClient()
+const harness = createTevmTestHarness({
+ // The historical fixture's 23_085_558 anchor contains EIP-4844 transactions,
+ // which Tevm cannot deserialize. This is the nearest blob-free block.
+ forkBlockNumber: 23_085_561n,
+})
+const client = harness.getClient()
beforeAll(async () => {
+ await harness.ready()
await impersonateAccount(client, {
address: address.vitalik,
})
- await reset(client, {
- blockNumber: 23_085_558n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+})
+
+afterAll(async () => {
+ await stopImpersonatingAccount(client, {
+ address: address.vitalik,
})
})
@@ -190,3 +198,14 @@ async function setEnsAvatar(avatar: string) {
})
await mine(client, { blocks: 1 })
}
+
+async function deployEnsAvatarTokenUri() {
+ const { createdAddress: contractAddress, errors } =
+ await harness.deployContract({
+ abi: EnsAvatarTokenUri.abi,
+ bytecode: EnsAvatarTokenUri.bytecode.object,
+ })
+ if (errors?.length) throw errors[0]
+ if (!contractAddress) throw new Error('Deployment failed: no address.')
+ return { contractAddress }
+}
diff --git a/src/actions/ens/getEnsName.bench.ts b/src/actions/ens/getEnsName.bench.ts
index 83b50bc17e..9d518abb4b 100644
--- a/src/actions/ens/getEnsName.bench.ts
+++ b/src/actions/ens/getEnsName.bench.ts
@@ -1,17 +1,14 @@
import { beforeAll, bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { ethersProvider } from '~test/bench.js'
+import { createTevmTestHarness } from '~test/tevm.js'
-import { reset } from '../test/reset.js'
import { getEnsName } from './getEnsName.js'
-const client = anvilMainnet.getClient()
+const harness = createTevmTestHarness({ forkBlockNumber: 16_773_780n })
+const client = harness.getClient()
beforeAll(async () => {
- await reset(client, {
- blockNumber: 16773780n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
+ await harness.ready()
})
describe('Get ENS Name', () => {
diff --git a/src/actions/ens/getEnsName.test.ts b/src/actions/ens/getEnsName.test.ts
index fdf293a075..3ee11a3087 100644
--- a/src/actions/ens/getEnsName.test.ts
+++ b/src/actions/ens/getEnsName.test.ts
@@ -1,12 +1,10 @@
+import { createServer, type RequestListener } from 'node:http'
+import type { AddressInfo } from 'node:net'
import { parseAbi } from 'abitype'
import { beforeAll, describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { ensRegistryConfig, ensReverseRegistrarConfig } from '~test/abis.js'
import { address } from '~test/constants.js'
-import {
- createHttpServer,
- setVitalikName,
- setVitalikResolver,
-} from '~test/utils.js'
+import { createTevmTestHarness } from '~test/tevm.js'
import { optimism } from '../../chains/index.js'
import { http } from '../../clients/transports/http.js'
import {
@@ -15,16 +13,22 @@ import {
encodeFunctionResult,
toCoinType,
} from '../../index.js'
-import { reset } from '../test/reset.js'
+import { namehash } from '../../utils/ens/namehash.js'
+import { impersonateAccount } from '../test/impersonateAccount.js'
+import { mine } from '../test/mine.js'
+import { stopImpersonatingAccount } from '../test/stopImpersonatingAccount.js'
+import { writeContract } from '../wallet/writeContract.js'
import { getEnsName } from './getEnsName.js'
-const client = anvilMainnet.getClient()
+const harness = createTevmTestHarness({
+ // The historical fixture's 23_093_073 anchor contains EIP-4844 transactions,
+ // which Tevm cannot deserialize. This is the nearest blob-free block.
+ forkBlockNumber: 23_093_075n,
+})
+const client = harness.getClient()
beforeAll(async () => {
- await reset(client, {
- blockNumber: 23_093_073n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
+ await harness.ready()
await setVitalikResolver()
})
@@ -93,7 +97,7 @@ test('address with primary name that has no resolver - strict', async () => {
address: '0x00000000000061aD8EE190710508A818aE5325C3',
strict: true,
}),
- ).rejects.toMatchInlineSnapshot(`
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`
[ContractFunctionExecutionError: The contract function "reverseWithGateways" reverted.
Error: ResolverNotFound(bytes name)
@@ -126,7 +130,7 @@ describe('primary name with resolver that does not support text()', () => {
address: address.vitalik,
strict: true,
}),
- ).rejects.toMatchInlineSnapshot(`
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`
[ContractFunctionExecutionError: The contract function "reverseWithGateways" reverted.
Error: ResolverError(bytes errorData)
@@ -160,7 +164,7 @@ describe('primary name with non-contract resolver', () => {
address: address.vitalik,
strict: true,
}),
- ).rejects.toMatchInlineSnapshot(`
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`
[ContractFunctionExecutionError: The contract function "reverseWithGateways" reverted.
Error: ResolverNotContract(bytes name, address resolver)
@@ -241,12 +245,9 @@ test('custom universal resolver address', async () => {
test('chain not provided', async () => {
await expect(
- getEnsName(
- createClient({
- transport: http(anvilMainnet.rpcUrl.http),
- }),
- { address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e' },
- ),
+ getEnsName(harness.getClient({ chain: false }), {
+ address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
+ }),
).rejects.toThrowErrorMatchingInlineSnapshot(
'[Error: client chain not configured. universalResolverAddress is required.]',
)
@@ -280,7 +281,7 @@ test('universal resolver contract deployed on later block', async () => {
blockNumber: 14353601n,
}),
).rejects.toThrowErrorMatchingInlineSnapshot(`
- [ChainDoesNotSupportContract: Chain "Ethereum (Local)" does not support contract "ensUniversalResolver".
+ [ChainDoesNotSupportContract: Chain "Ethereum (Tevm)" does not support contract "ensUniversalResolver".
This could be due to any of the following:
- The contract "ensUniversalResolver" was not deployed until block 23085558 (current block 14353601).
@@ -315,3 +316,63 @@ test('resolved address mismatch', async () => {
}),
).toBeNull()
})
+
+async function setVitalikResolver() {
+ await impersonateAccount(client, {
+ address: address.vitalik,
+ })
+ await writeContract(client, {
+ ...ensRegistryConfig,
+ account: address.vitalik,
+ functionName: 'setResolver',
+ args: [namehash('vitalik.eth'), ensRegistryConfig.address],
+ })
+
+ await writeContract(client, {
+ ...ensRegistryConfig,
+ account: address.vitalik,
+ functionName: 'setResolver',
+ args: [namehash('vbuterin.eth'), address.vitalik],
+ })
+
+ await mine(client, { blocks: 1 })
+ await stopImpersonatingAccount(client, {
+ address: address.vitalik,
+ })
+}
+
+async function setVitalikName(name: string) {
+ await impersonateAccount(client, {
+ address: address.vitalik,
+ })
+
+ await writeContract(client, {
+ ...ensReverseRegistrarConfig,
+ account: address.vitalik,
+ functionName: 'setName',
+ args: [name],
+ })
+
+ await mine(client, { blocks: 1 })
+ await stopImpersonatingAccount(client, {
+ address: address.vitalik,
+ })
+}
+
+function createHttpServer(
+ handler: RequestListener,
+): Promise<{ close: () => Promise; url: string }> {
+ const server = createServer(handler)
+
+ const closeAsync = () =>
+ new Promise((resolve, reject) =>
+ server.close((err) => (err ? reject(err) : resolve(undefined))),
+ )
+
+ return new Promise((resolve) => {
+ server.listen(() => {
+ const { port } = server.address() as AddressInfo
+ resolve({ close: closeAsync, url: `http://localhost:${port}` })
+ })
+ })
+}
diff --git a/src/actions/ens/getEnsResolver.test.ts b/src/actions/ens/getEnsResolver.test.ts
index 9ab510fcc0..1e37fd5006 100644
--- a/src/actions/ens/getEnsResolver.test.ts
+++ b/src/actions/ens/getEnsResolver.test.ts
@@ -1,32 +1,29 @@
import { beforeAll, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { createTevmTestHarness } from '~test/tevm.js'
import { linea, optimism } from '../../chains/index.js'
import { createClient } from '../../clients/createClient.js'
import { http } from '../../clients/transports/http.js'
-import { reset } from '../test/reset.js'
import { getEnsResolver } from './getEnsResolver.js'
-const client = anvilMainnet.getClient()
+const harness = createTevmTestHarness({
+ // The historical fixture's 23_085_558 anchor contains EIP-4844 transactions,
+ // which Tevm cannot deserialize. This is the nearest blob-free block.
+ forkBlockNumber: 23_085_561n,
+})
+const client = harness.getClient()
beforeAll(async () => {
- await reset(client, {
- blockNumber: 23_085_558n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
+ await harness.ready()
})
test('default', async () => {
- expect(
- await getEnsResolver(client, {
- name: 'jxom.eth',
- }),
- ).toMatchInlineSnapshot('"0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41"')
- expect(
- await getEnsResolver(client, {
- name: 'test.eth',
- }),
- ).toMatchInlineSnapshot('"0x226159d592E2b063810a10Ebf6dcbADA94Ed68b8"')
+ expect(await getEnsResolver(client, { name: 'jxom.eth' })).toEqualAddress(
+ '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41',
+ )
+ expect(await getEnsResolver(client, { name: 'test.eth' })).toEqualAddress(
+ '0x226159d592E2b063810a10Ebf6dcbADA94Ed68b8',
+ )
})
test('custom universal resolver address', async () => {
@@ -35,19 +32,12 @@ test('custom universal resolver address', async () => {
name: 'awkweb.eth',
universalResolverAddress: '0x64969fb44091A7E5fA1213D30D7A7e8488edf693',
}),
- ).resolves.toMatchInlineSnapshot(
- '"0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41"',
- )
+ ).resolves.toEqualAddress('0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41')
})
test('chain not provided', async () => {
await expect(
- getEnsResolver(
- createClient({
- transport: http(anvilMainnet.rpcUrl.http),
- }),
- { name: 'awkweb.eth' },
- ),
+ getEnsResolver(harness.getClient({ chain: false }), { name: 'awkweb.eth' }),
).rejects.toThrowErrorMatchingInlineSnapshot(
'[Error: client chain not configured. universalResolverAddress is required.]',
)
@@ -81,7 +71,7 @@ test('universal resolver contract deployed on later block', async () => {
blockNumber: 14353601n,
}),
).rejects.toThrowErrorMatchingInlineSnapshot(`
- [ChainDoesNotSupportContract: Chain "Ethereum (Local)" does not support contract "ensUniversalResolver".
+ [ChainDoesNotSupportContract: Chain "Ethereum (Tevm)" does not support contract "ensUniversalResolver".
This could be due to any of the following:
- The contract "ensUniversalResolver" was not deployed until block 23085558 (current block 14353601).
diff --git a/src/actions/ens/getEnsText.test.ts b/src/actions/ens/getEnsText.test.ts
index 1146565922..7c69d6eacb 100644
--- a/src/actions/ens/getEnsText.test.ts
+++ b/src/actions/ens/getEnsText.test.ts
@@ -1,6 +1,9 @@
+import { createServer, type RequestListener } from 'node:http'
+import type { AddressInfo } from 'node:net'
import { beforeAll, describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
-import { createHttpServer, setVitalikResolver } from '~test/utils.js'
+import { ensRegistryConfig } from '~test/abis.js'
+import { address } from '~test/constants.js'
+import { createTevmTestHarness } from '~test/tevm.js'
import { linea, optimism } from '../../chains/index.js'
import { http } from '../../clients/transports/http.js'
import {
@@ -9,16 +12,22 @@ import {
encodeFunctionResult,
parseAbi,
} from '../../index.js'
-import { reset } from '../test/reset.js'
+import { namehash } from '../../utils/ens/namehash.js'
+import { impersonateAccount } from '../test/impersonateAccount.js'
+import { mine } from '../test/mine.js'
+import { stopImpersonatingAccount } from '../test/stopImpersonatingAccount.js'
+import { writeContract } from '../wallet/writeContract.js'
import { getEnsText } from './getEnsText.js'
-const client = anvilMainnet.getClient()
+const harness = createTevmTestHarness({
+ // The historical fixture's 23_085_558 anchor contains EIP-4844 transactions,
+ // which Tevm cannot deserialize. This is the nearest blob-free block.
+ forkBlockNumber: 23_085_561n,
+})
+const client = harness.getClient()
beforeAll(async () => {
- await reset(client, {
- blockNumber: 23_085_558n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
+ await harness.ready()
await setVitalikResolver()
})
@@ -70,7 +79,7 @@ test('name with resolver that does not support text() - strict', async () => {
key: 'com.twitter',
strict: true,
}),
- ).rejects.toMatchInlineSnapshot(`
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`
[ContractFunctionExecutionError: The contract function "resolveWithGateways" reverted.
Error: ResolverError(bytes errorData)
@@ -102,7 +111,7 @@ test('name without resolver - strict', async () => {
key: 'com.twitter',
strict: true,
}),
- ).rejects.toMatchInlineSnapshot(`
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`
[ContractFunctionExecutionError: The contract function "resolveWithGateways" reverted.
Error: ResolverNotFound(bytes name)
@@ -133,7 +142,7 @@ test('name with non-contract resolver - strict', async () => {
key: 'com.twitter',
strict: true,
}),
- ).rejects.toMatchInlineSnapshot(`
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`
[ContractFunctionExecutionError: The contract function "resolveWithGateways" reverted.
Error: ResolverNotContract(bytes name, address resolver)
@@ -216,15 +225,10 @@ test('custom universal resolver address', async () => {
test('chain not provided', async () => {
await expect(
- getEnsText(
- createClient({
- transport: http(anvilMainnet.rpcUrl.http),
- }),
- {
- name: 'wagmi-dev.eth',
- key: 'com.twitter',
- },
- ),
+ getEnsText(harness.getClient({ chain: false }), {
+ name: 'wagmi-dev.eth',
+ key: 'com.twitter',
+ }),
).rejects.toThrowErrorMatchingInlineSnapshot(
'[Error: client chain not configured. universalResolverAddress is required.]',
)
@@ -260,7 +264,7 @@ test('universal resolver contract deployed on later block', async () => {
blockNumber: 14353601n,
}),
).rejects.toThrowErrorMatchingInlineSnapshot(`
- [ChainDoesNotSupportContract: Chain "Ethereum (Local)" does not support contract "ensUniversalResolver".
+ [ChainDoesNotSupportContract: Chain "Ethereum (Tevm)" does not support contract "ensUniversalResolver".
This could be due to any of the following:
- The contract "ensUniversalResolver" was not deployed until block 23085558 (current block 14353601).
@@ -298,3 +302,45 @@ test('invalid TLD', async () => {
getEnsText(client, { name: 'vitalik.eth', key: 'com.twitter' }),
).resolves.toBeNull()
})
+
+async function setVitalikResolver() {
+ await impersonateAccount(client, {
+ address: address.vitalik,
+ })
+ await writeContract(client, {
+ ...ensRegistryConfig,
+ account: address.vitalik,
+ functionName: 'setResolver',
+ args: [namehash('vitalik.eth'), ensRegistryConfig.address],
+ })
+
+ await writeContract(client, {
+ ...ensRegistryConfig,
+ account: address.vitalik,
+ functionName: 'setResolver',
+ args: [namehash('vbuterin.eth'), address.vitalik],
+ })
+
+ await mine(client, { blocks: 1 })
+ await stopImpersonatingAccount(client, {
+ address: address.vitalik,
+ })
+}
+
+function createHttpServer(
+ handler: RequestListener,
+): Promise<{ close: () => Promise; url: string }> {
+ const server = createServer(handler)
+
+ const closeAsync = () =>
+ new Promise((resolve, reject) =>
+ server.close((err) => (err ? reject(err) : resolve(undefined))),
+ )
+
+ return new Promise((resolve) => {
+ server.listen(() => {
+ const { port } = server.address() as AddressInfo
+ resolve({ close: closeAsync, url: `http://localhost:${port}` })
+ })
+ })
+}
diff --git a/src/actions/getContract.bench.ts b/src/actions/getContract.bench.ts
index e7b8601041..1cadddc8b4 100644
--- a/src/actions/getContract.bench.ts
+++ b/src/actions/getContract.bench.ts
@@ -3,11 +3,11 @@ import { Contract } from 'ethers'
import { bench, describe } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { ethersProvider } from '~test/bench.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getContract } from './getContract.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe('Create contract instance', () => {
bench('viem: `getContract`', async () => {
diff --git a/src/actions/getContract.test-d.ts b/src/actions/getContract.test-d.ts
index d11f81f616..de996cc0b4 100644
--- a/src/actions/getContract.test-d.ts
+++ b/src/actions/getContract.test-d.ts
@@ -10,7 +10,7 @@ import {
import { expectTypeOf, test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import type { Account } from '../accounts/types.js'
import { celo } from '../chains/index.js'
@@ -21,19 +21,19 @@ import type { Chain } from '../types/chain.js'
import { getContract } from './getContract.js'
-const publicClient = anvilMainnet.getClient()
+const publicClient = tevmMainnet.getClient()
const walletClient = createWalletClient({
account: '0x',
- chain: anvilMainnet.chain,
- transport: http(anvilMainnet.rpcUrl.http),
+ chain: tevmMainnet.chain,
+ transport: tevmMainnet.clientConfig.transport,
})
const walletClientWithoutAccount = createWalletClient({
- chain: anvilMainnet.chain,
- transport: http(anvilMainnet.rpcUrl.http),
+ chain: tevmMainnet.chain,
+ transport: tevmMainnet.clientConfig.transport,
})
const walletClientWithoutChain = createWalletClient({
account: '0x',
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
test('generic client', () => {
diff --git a/src/actions/getContract.test.ts b/src/actions/getContract.test.ts
index 98ab3393a2..355f69ef5b 100644
--- a/src/actions/getContract.test.ts
+++ b/src/actions/getContract.test.ts
@@ -3,8 +3,8 @@ import type { AbiEvent } from 'abitype'
import { describe, expect, test } from 'vitest'
import { usdcContractConfig, wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import {
getContract,
@@ -19,9 +19,9 @@ import {
writeContract,
} from './index.js'
-const publicClient = anvilMainnet.getClient()
-const walletClient = anvilMainnet.getClient()
-const walletClientWithAccount = anvilMainnet.getClient({
+const publicClient = tevmMainnet.getClient()
+const walletClient = tevmMainnet.getClient()
+const walletClientWithAccount = tevmMainnet.getClient({
account: accounts[0].address,
})
@@ -31,7 +31,7 @@ const contract = getContract({
})
test('address', () => {
- expect(contract.address).toBe(wagmiContractConfig.address)
+ expect(contract.address).toEqualAddress(wagmiContractConfig.address)
})
test('abi', () => {
@@ -45,13 +45,14 @@ test('createEventFilter', async () => {
}),
).resolves.toBeDefined()
+ await mine(publicClient, { blocks: 1 })
await expect(
contract.createEventFilter.Transfer(
{
from: accounts[0].address,
},
{
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
+ fromBlock: 'latest',
},
),
).resolves.toBeDefined()
@@ -202,7 +203,9 @@ test('getEvents', async () => {
public: publicClient,
},
})
- const logs = await contract.getEvents.Transfer()
+ const logs = await contract.getEvents.Transfer(undefined, {
+ fromBlock: tevmMainnet.forkBlockNumber + 1n,
+ })
expect(logs.length).toBe(1)
diff --git a/src/actions/public/call.bench.ts b/src/actions/public/call.bench.ts
index 332894c55b..8784c93301 100644
--- a/src/actions/public/call.bench.ts
+++ b/src/actions/public/call.bench.ts
@@ -1,11 +1,11 @@
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { ethersProvider } from '~test/bench.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { call } from './call.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const wagmiContractAddress = '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2'
const name4bytes = '0x06fdde03'
diff --git a/src/actions/public/call.test-d.ts b/src/actions/public/call.test-d.ts
index 85ea558b5e..c560cf1d17 100644
--- a/src/actions/public/call.test-d.ts
+++ b/src/actions/public/call.test-d.ts
@@ -1,10 +1,10 @@
import { test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { call } from './call.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('legacy', () => {
call(client, {
diff --git a/src/actions/public/call.test.ts b/src/actions/public/call.test.ts
index c22422f879..2147eff456 100644
--- a/src/actions/public/call.test.ts
+++ b/src/actions/public/call.test.ts
@@ -12,10 +12,10 @@ import {
usdcContractConfig,
wagmiContractConfig,
} from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { createCcipServer } from '~test/ccip.js'
import { accounts } from '~test/constants.js'
import { blobData, kzg } from '~test/kzg.js'
+import { tevmMainnet } from '~test/tevm.js'
import {
deploy,
deployOffchainLookupExample,
@@ -32,7 +32,6 @@ import {
decodeFunctionResult,
encodeAbiParameters,
type Hex,
- http,
maxUint256,
multicall3Abi,
pad,
@@ -49,7 +48,7 @@ import { signAuthorization } from '../wallet/signAuthorization.js'
import { call, getRevertErrorData } from './call.js'
import { readContract } from './readContract.js'
-const client = anvilMainnet.getClient({ account: accounts[0].address })
+const client = tevmMainnet.getClient({ account: accounts[0].address })
const wagmiContractAddress = '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2'
const name4bytes = '0x06fdde03'
@@ -111,7 +110,7 @@ describe('ccip', () => {
const client = createClient({
ccipRead: false,
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
await expect(() =>
@@ -247,7 +246,7 @@ test('args: blockOverrides', async () => {
})
test.skip('args: blobs', async () => {
- // TODO: migrate to `client` once 4844 is supported in Anvil.
+ // TODO: migrate to `client` once the Tevm fork fixture supports EIP-4844.
const blobs = toBlobs({ data: stringToHex(blobData) })
const { data } = await call(client, {
account: sourceAccount.address,
@@ -309,8 +308,7 @@ describe('errors', () => {
`)
})
- // TODO: Waiting for Anvil fix – should fail with "gas too low" reason
- // This test will fail when Anvil is fixed.
+ // TODO: Tevm should fail with a "gas too low" reason.
test('gas too low', async () => {
await expect(() =>
call(client, {
@@ -342,8 +340,7 @@ describe('errors', () => {
).rejects.toThrowError('intrinsic gas too low')
})
- // TODO: Waiting for Anvil fix – should fail with "gas too high" reason
- // This test will fail when Anvil is fixed.
+ // TODO: Tevm should fail with a "gas too high" reason.
test('gas too high', async () => {
expect(
await call(client, {
@@ -355,8 +352,7 @@ describe('errors', () => {
).toBeDefined()
})
- // TODO: Waiting for Anvil fix – should fail with "gas fee less than block base fee" reason
- // This test will fail when Anvil is fixed.
+ // TODO: Tevm should reject gas fees below the block base fee.
test('gas fee is less than block base fee', async () => {
expect(
await call(client, {
@@ -658,7 +654,7 @@ describe.each([{ deployless: true }, { deployless: false }])(
'batch call (deployless: %s)',
({ deployless }) => {
test('default', async () => {
- const client_2 = anvilMainnet.getClient({
+ const client_2 = tevmMainnet.getClient({
batch: {
multicall: {
deployless,
@@ -716,7 +712,7 @@ describe.each([{ deployless: true }, { deployless: false }])(
})
test('args: blockNumber', async () => {
- const client_2 = anvilMainnet.getClient({
+ const client_2 = tevmMainnet.getClient({
batch: {
multicall: {
deployless,
@@ -731,14 +727,14 @@ describe.each([{ deployless: true }, { deployless: false }])(
call(client_2, {
data: name4bytes,
to: wagmiContractAddress,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
}),
)
p.push(
call(client_2, {
data: name4bytes,
to: wagmiContractAddress,
- blockNumber: anvilMainnet.forkBlockNumber + 1n,
+ blockNumber: tevmMainnet.forkBlockNumber + 1n,
}),
)
p.push(
@@ -752,7 +748,7 @@ describe.each([{ deployless: true }, { deployless: false }])(
call(client_2, {
data: name4bytes,
to: baycContractConfig.address,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
}),
)
await wait(1)
@@ -783,7 +779,7 @@ describe.each([{ deployless: true }, { deployless: false }])(
})
test('args: no address, no data, aggregate3 sig, other properties', async () => {
- const client_2 = anvilMainnet.getClient({
+ const client_2 = tevmMainnet.getClient({
batch: {
multicall: {
deployless,
@@ -826,7 +822,7 @@ describe.each([{ deployless: true }, { deployless: false }])(
})
test('contract revert', async () => {
- const client_2 = anvilMainnet.getClient({
+ const client_2 = tevmMainnet.getClient({
batch: {
multicall: {
deployless,
@@ -857,7 +853,7 @@ describe.each([{ deployless: true }, { deployless: false }])(
})
test('client config', async () => {
- const client_2 = anvilMainnet.getClient({
+ const client_2 = tevmMainnet.getClient({
batch: {
multicall: {
deployless,
@@ -917,7 +913,7 @@ describe.each([{ deployless: true }, { deployless: false }])(
})
test.runIf(deployless === false)('no chain on client', async () => {
- const client_2 = anvilMainnet.getClient({
+ const client_2 = tevmMainnet.getClient({
batch: {
multicall: {
deployless,
@@ -957,7 +953,7 @@ describe.each([{ deployless: true }, { deployless: false }])(
test.runIf(deployless === false)(
'chain not configured with multicall',
async () => {
- const client_2 = anvilMainnet.getClient({
+ const client_2 = tevmMainnet.getClient({
batch: {
multicall: {
deployless,
diff --git a/src/actions/public/createAccessList.test.ts b/src/actions/public/createAccessList.test.ts
index 24f55d5927..96254ce9a4 100644
--- a/src/actions/public/createAccessList.test.ts
+++ b/src/actions/public/createAccessList.test.ts
@@ -1,11 +1,11 @@
import { expect, test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { encodeFunctionData, parseEther } from '../../utils/index.js'
import { createAccessList } from './createAccessList.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const result = await createAccessList(client, {
diff --git a/src/actions/public/createAccessList.tevm.test.ts b/src/actions/public/createAccessList.tevm.test.ts
new file mode 100644
index 0000000000..a2cd0a9295
--- /dev/null
+++ b/src/actions/public/createAccessList.tevm.test.ts
@@ -0,0 +1,33 @@
+import { expect, test } from 'vitest'
+
+import { wagmiContractConfig } from '~test/abis.js'
+import { tevmMainnet } from '~test/tevm.js'
+
+import { encodeFunctionData } from '../../utils/abi/encodeFunctionData.js'
+import { createAccessList } from './createAccessList.js'
+
+const client = tevmMainnet.getClient()
+
+test('default', async () => {
+ const result = await createAccessList(client, {
+ data: encodeFunctionData({
+ abi: wagmiContractConfig.abi,
+ functionName: 'name',
+ }),
+ to: wagmiContractConfig.address,
+ })
+
+ expect(result).toMatchInlineSnapshot(`
+ {
+ "accessList": [
+ {
+ "address": "0xfba3912ca04dd458c843e2ee08967fc04f3579c2",
+ "storageKeys": [
+ "0x0000000000000000000000000000000000000000000000000000000000000000",
+ ],
+ },
+ ],
+ "gasUsed": 24371n,
+ }
+ `)
+})
diff --git a/src/actions/public/createBlockFilter.bench.ts b/src/actions/public/createBlockFilter.bench.ts
index 5445efdcde..dc7b6cfdfb 100644
--- a/src/actions/public/createBlockFilter.bench.ts
+++ b/src/actions/public/createBlockFilter.bench.ts
@@ -1,10 +1,10 @@
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createBlockFilter } from './createBlockFilter.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe.skip('Create Block Filter', () => {
bench('viem: `createBlockFilter`', async () => {
diff --git a/src/actions/public/createBlockFilter.test.ts b/src/actions/public/createBlockFilter.test.ts
index 270241ee54..723730db26 100644
--- a/src/actions/public/createBlockFilter.test.ts
+++ b/src/actions/public/createBlockFilter.test.ts
@@ -1,5 +1,5 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createHttpServer } from '~test/utils.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
import { fallback } from '../../clients/transports/fallback.js'
@@ -7,10 +7,10 @@ import { http } from '../../clients/transports/http.js'
import { createBlockFilter } from './createBlockFilter.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
- expect(await createBlockFilter(client)).toBeDefined()
+ expect((await createBlockFilter(client)).id).toBeHex()
})
test('fallback client: scopes request', async () => {
diff --git a/src/actions/public/createContractEventFilter.test-d.ts b/src/actions/public/createContractEventFilter.test-d.ts
index 6f46709fcf..a6f5c3a4e3 100644
--- a/src/actions/public/createContractEventFilter.test-d.ts
+++ b/src/actions/public/createContractEventFilter.test-d.ts
@@ -1,10 +1,10 @@
import { expectTypeOf, test } from 'vitest'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createContractEventFilter } from './createContractEventFilter.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('fromBlock/toBlock', async () => {
const filter = await createContractEventFilter(client, {
diff --git a/src/actions/public/createContractEventFilter.test.ts b/src/actions/public/createContractEventFilter.test.ts
index 5f4aa3ea45..773ffd723f 100644
--- a/src/actions/public/createContractEventFilter.test.ts
+++ b/src/actions/public/createContractEventFilter.test.ts
@@ -1,8 +1,8 @@
import { assertType, expect, test } from 'vitest'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createHttpServer } from '~test/utils.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
@@ -13,7 +13,7 @@ import { createContractEventFilter } from './createContractEventFilter.js'
const request = (() => {}) as unknown as EIP1193RequestFn
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const filter = await createContractEventFilter(client, {
@@ -28,7 +28,7 @@ test('default', async () => {
request,
strict: undefined,
})
- expect(filter.id).toBeDefined()
+ expect(filter.id).toBeHex()
expect(filter.type).toBe('event')
expect(filter.args).toBeUndefined()
expect(filter.eventName).toBeUndefined()
@@ -39,7 +39,7 @@ test('args: address', async () => {
address: usdcContractConfig.address,
abi: usdcContractConfig.abi,
})
- expect(filter.id).toBeDefined()
+ expect(filter.id).toBeHex()
})
test('args: args', async () => {
@@ -98,17 +98,17 @@ test('args: fromBlock', async () => {
fromBlock: 'latest',
})
).id,
- ).toBeDefined()
+ ).toBeHex()
expect(
(
await createContractEventFilter(client, {
address: usdcContractConfig.address,
abi: usdcContractConfig.abi,
eventName: 'Transfer',
- fromBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber,
})
).id,
- ).toBeDefined()
+ ).toBeHex()
})
test('args: toBlock', async () => {
@@ -121,17 +121,17 @@ test('args: toBlock', async () => {
toBlock: 'latest',
})
).id,
- ).toBeDefined()
+ ).toBeHex()
expect(
(
await createContractEventFilter(client, {
address: usdcContractConfig.address,
abi: usdcContractConfig.abi,
eventName: 'Transfer',
- toBlock: anvilMainnet.forkBlockNumber,
+ toBlock: tevmMainnet.forkBlockNumber,
})
).id,
- ).toBeDefined()
+ ).toBeHex()
})
test('fallback client: scopes request', async () => {
diff --git a/src/actions/public/createEventFilter.test-d.ts b/src/actions/public/createEventFilter.test-d.ts
index 4a1a56b793..916cde1be2 100644
--- a/src/actions/public/createEventFilter.test-d.ts
+++ b/src/actions/public/createEventFilter.test-d.ts
@@ -1,9 +1,9 @@
import { expectTypeOf, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createEventFilter } from './createEventFilter.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('fromBlock/toBlock', async () => {
const filter = await createEventFilter(client)
diff --git a/src/actions/public/createEventFilter.test.ts b/src/actions/public/createEventFilter.test.ts
index 6cd9712539..2ce3f29124 100644
--- a/src/actions/public/createEventFilter.test.ts
+++ b/src/actions/public/createEventFilter.test.ts
@@ -1,6 +1,6 @@
import { assertType, describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createHttpServer } from '~test/utils.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
@@ -9,7 +9,7 @@ import { http } from '../../clients/transports/http.js'
import type { EIP1193RequestFn } from '../../types/eip1193.js'
import { createEventFilter } from './createEventFilter.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const event = {
default: {
@@ -84,7 +84,7 @@ describe('default', () => {
request,
type: 'event',
})
- expect(filter.id).toBeDefined()
+ expect(filter.id).toBeHex()
expect(filter.type).toBe('event')
expect(filter.args).toBeUndefined()
expect(filter.abi).toBeUndefined()
@@ -261,7 +261,7 @@ describe('default', () => {
test('args: fromBlock', async () => {
await createEventFilter(client, {
event: event.default,
- fromBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber,
})
await createEventFilter(client, {
event: event.default,
@@ -272,7 +272,7 @@ describe('default', () => {
test('args: toBlock', async () => {
await createEventFilter(client, {
event: event.default,
- toBlock: anvilMainnet.forkBlockNumber,
+ toBlock: tevmMainnet.forkBlockNumber,
})
await createEventFilter(client, {
event: event.default,
diff --git a/src/actions/public/createPendingTransactionFilter.bench.ts b/src/actions/public/createPendingTransactionFilter.bench.ts
index 1b26777bf4..b20aa71e4c 100644
--- a/src/actions/public/createPendingTransactionFilter.bench.ts
+++ b/src/actions/public/createPendingTransactionFilter.bench.ts
@@ -1,10 +1,10 @@
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createPendingTransactionFilter } from './createPendingTransactionFilter.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe.skip('Create Pending Transaction Filter', () => {
bench('viem: `createPendingTransactionFilter`', async () => {
diff --git a/src/actions/public/createPendingTransactionFilter.test.ts b/src/actions/public/createPendingTransactionFilter.test.ts
index 87858267b9..6de790e0c7 100644
--- a/src/actions/public/createPendingTransactionFilter.test.ts
+++ b/src/actions/public/createPendingTransactionFilter.test.ts
@@ -1,5 +1,5 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createHttpServer } from '~test/utils.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
import { fallback } from '../../clients/transports/fallback.js'
@@ -7,10 +7,10 @@ import { http } from '../../clients/transports/http.js'
import { createPendingTransactionFilter } from './createPendingTransactionFilter.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
- expect(await createPendingTransactionFilter(client)).toBeDefined()
+ expect((await createPendingTransactionFilter(client)).id).toBeHex()
})
test('fallback client: scopes request', async () => {
diff --git a/src/actions/public/estimateContractGas.test-d.ts b/src/actions/public/estimateContractGas.test-d.ts
index 5ef81f4c3e..e1c75e21e5 100644
--- a/src/actions/public/estimateContractGas.test-d.ts
+++ b/src/actions/public/estimateContractGas.test-d.ts
@@ -1,13 +1,13 @@
import { test } from 'vitest'
import { baycContractConfig, wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { estimateContractGas } from './estimateContractGas.js'
-const client = anvilMainnet.getClient()
-const clientWithAccount = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient()
+const clientWithAccount = tevmMainnet.getClient({ account: true })
const args = {
...wagmiContractConfig,
diff --git a/src/actions/public/estimateContractGas.test.ts b/src/actions/public/estimateContractGas.test.ts
index ce8595d945..c501d96771 100644
--- a/src/actions/public/estimateContractGas.test.ts
+++ b/src/actions/public/estimateContractGas.test.ts
@@ -8,8 +8,8 @@ import { describe, expect, test, vi } from 'vitest'
import { ErrorsExample } from '~contracts/generated.js'
import { baycContractConfig, wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deployBAYC, deployErrorExample } from '~test/utils.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { publicActions } from '../../index.js'
@@ -18,7 +18,7 @@ import { mine } from '../test/mine.js'
import { sendTransaction } from '../wallet/sendTransaction.js'
import { estimateContractGas } from './estimateContractGas.js'
-const client = anvilMainnet.getClient().extend(publicActions)
+const client = tevmMainnet.getClient().extend(publicActions)
describe('wagmi', () => {
test('default', async () => {
diff --git a/src/actions/public/estimateFeesPerGas.test.ts b/src/actions/public/estimateFeesPerGas.test.ts
index 1caf1c7117..d37d91efc5 100644
--- a/src/actions/public/estimateFeesPerGas.test.ts
+++ b/src/actions/public/estimateFeesPerGas.test.ts
@@ -1,9 +1,6 @@
import { describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
-import { mainnet } from '../../chains/index.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
-import { http } from '../../clients/transports/http.js'
-import { createTestClient } from '../../index.js'
import {
estimateFeesPerGas,
internal_estimateFeesPerGas,
@@ -11,7 +8,7 @@ import {
import * as getBlock from './getBlock.js'
import { getGasPrice } from './getGasPrice.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const block = await getBlock.getBlock(client)
@@ -32,16 +29,13 @@ test('legacy', async () => {
})
test('args: chain `estimateFeesPerGas` override (when null returned)', async () => {
- const client = createTestClient({
- transport: http(anvilMainnet.rpcUrl.http),
- mode: 'anvil',
- })
+ const client = tevmMainnet.getClient()
const { maxFeePerGas, maxPriorityFeePerGas } = await estimateFeesPerGas(
client,
{
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
estimateFeesPerGas: async () => null,
},
@@ -54,14 +48,12 @@ test('args: chain `estimateFeesPerGas` override (when null returned)', async ()
})
test('args: chain `estimateFeesPerGas` override', async () => {
- const client = createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- })
+ const client = tevmMainnet.getClient({ chain: false })
const { maxFeePerGas, maxPriorityFeePerGas } = await estimateFeesPerGas(
client,
{
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
async estimateFeesPerGas() {
return { maxFeePerGas: 2n, maxPriorityFeePerGas: 1n }
@@ -77,12 +69,10 @@ test('args: chain `estimateFeesPerGas` override', async () => {
test('args: chain `baseFeeMultiplier` override (value)', async () => {
const block = await getBlock.getBlock(client)
- const client_2 = createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- })
+ const client_2 = tevmMainnet.getClient({ chain: false })
const feesPerGas_1 = await estimateFeesPerGas(client_2, {
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
baseFeeMultiplier: 1.5,
},
@@ -95,7 +85,7 @@ test('args: chain `baseFeeMultiplier` override (value)', async () => {
const feesPerGas_2 = await estimateFeesPerGas(client, {
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
baseFeeMultiplier: 2,
},
@@ -108,7 +98,7 @@ test('args: chain `baseFeeMultiplier` override (value)', async () => {
const feesPerGas_3 = await estimateFeesPerGas(client, {
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
baseFeeMultiplier: 2.01,
},
@@ -123,14 +113,12 @@ test('args: chain `baseFeeMultiplier` override (value)', async () => {
test('args: chain `baseFeeMultiplier` override (sync fn)', async () => {
const block = await getBlock.getBlock(client)
- const client_2 = createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- })
+ const client_2 = tevmMainnet.getClient({ chain: false })
const { maxFeePerGas, maxPriorityFeePerGas } = await estimateFeesPerGas(
client_2,
{
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
baseFeeMultiplier() {
return 1.5
@@ -148,14 +136,12 @@ test('args: chain `baseFeeMultiplier` override (sync fn)', async () => {
test('args: chain `baseFeeMultiplier` override (async fn)', async () => {
const block = await getBlock.getBlock(client)
- const client_2 = createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- })
+ const client_2 = tevmMainnet.getClient({ chain: false })
const { maxFeePerGas, maxPriorityFeePerGas } = await estimateFeesPerGas(
client_2,
{
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
async baseFeeMultiplier() {
return 1.5
@@ -171,13 +157,11 @@ test('args: chain `baseFeeMultiplier` override (async fn)', async () => {
})
test('args: chain `baseFeeMultiplier` override < 1', async () => {
- const client = createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- })
+ const client = tevmMainnet.getClient({ chain: false })
await expect(() =>
estimateFeesPerGas(client, {
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
baseFeeMultiplier: 0.8,
},
@@ -192,15 +176,15 @@ test('args: chain `baseFeeMultiplier` override < 1', async () => {
test('client: chain `estimateFeesPerGas` override', async () => {
const client = createPublicClient({
+ ...tevmMainnet.clientConfig,
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
async estimateFeesPerGas() {
return { maxFeePerGas: 2n, maxPriorityFeePerGas: 1n }
},
},
},
- transport: http(),
})
const { maxFeePerGas, maxPriorityFeePerGas } =
await estimateFeesPerGas(client)
@@ -212,13 +196,13 @@ test('client: chain `baseFeeMultiplier` override', async () => {
const block = await getBlock.getBlock(client)
const client_2 = createPublicClient({
+ ...tevmMainnet.clientConfig,
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
baseFeeMultiplier: 1.5,
},
},
- transport: http(),
})
const { maxFeePerGas, maxPriorityFeePerGas } =
await estimateFeesPerGas(client_2)
@@ -243,15 +227,10 @@ test('chain does not support eip1559', async () => {
})
describe('mainnet smoke', () => {
- const mainnetClient = createPublicClient({
- chain: mainnet,
- transport: http(process.env.VITE_ANVIL_FORK_URL),
- })
-
test('default', async () => {
- const block = await getBlock.getBlock(mainnetClient)
+ const block = await getBlock.getBlock(client)
const { maxFeePerGas, maxPriorityFeePerGas } =
- await estimateFeesPerGas(mainnetClient)
+ await estimateFeesPerGas(client)
expect(maxFeePerGas).toBe(
(block.baseFeePerGas! * 120n) / 100n + maxPriorityFeePerGas,
)
diff --git a/src/actions/public/estimateGas.bench.ts b/src/actions/public/estimateGas.bench.ts
index 03015a731d..9338b36bf6 100644
--- a/src/actions/public/estimateGas.bench.ts
+++ b/src/actions/public/estimateGas.bench.ts
@@ -1,12 +1,12 @@
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { ethersProvider } from '~test/bench.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { estimateGas } from './estimateGas.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe.skip('Estimate Gas', () => {
bench('viem: `estimateGas`', async () => {
diff --git a/src/actions/public/estimateGas.test-d.ts b/src/actions/public/estimateGas.test-d.ts
index 93f69ac250..fab2c3a2fa 100644
--- a/src/actions/public/estimateGas.test-d.ts
+++ b/src/actions/public/estimateGas.test-d.ts
@@ -1,10 +1,10 @@
import { test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { estimateGas } from './estimateGas.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('legacy', () => {
estimateGas(client, {
diff --git a/src/actions/public/estimateGas.test.ts b/src/actions/public/estimateGas.test.ts
index b5525eb429..e7052d9f7d 100644
--- a/src/actions/public/estimateGas.test.ts
+++ b/src/actions/public/estimateGas.test.ts
@@ -1,7 +1,7 @@
import { describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
import { kzg } from '~test/kzg.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deploy } from '~test/utils.js'
import { Delegation } from '../../../contracts/generated.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
@@ -19,7 +19,7 @@ import * as getBlock from './getBlock.js'
const wethContractAddress = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('estimates gas', async () => {
expect(
@@ -86,12 +86,12 @@ test('args: authorizationList', async () => {
test('args: blockNumber', async () => {
await reset(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ blockNumber: tevmMainnet.forkBlockNumber,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
expect(
await estimateGas(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
account: accounts[0].address,
to: accounts[1].address,
value: parseEther('1'),
diff --git a/src/actions/public/estimateMaxPriorityFeePerGas.test.ts b/src/actions/public/estimateMaxPriorityFeePerGas.test.ts
index 59eb2b2bd0..a100d8ec67 100644
--- a/src/actions/public/estimateMaxPriorityFeePerGas.test.ts
+++ b/src/actions/public/estimateMaxPriorityFeePerGas.test.ts
@@ -1,10 +1,8 @@
import { describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
-import { mainnet } from '../../chains/index.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
-import { http } from '../../clients/transports/http.js'
import { MethodNotSupportedRpcError } from '../../errors/rpc.js'
import { buildRequest } from '../../utils/buildRequest.js'
import {
@@ -13,7 +11,7 @@ import {
} from './estimateMaxPriorityFeePerGas.js'
import * as getBlock from './getBlock.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
expect(await estimateMaxPriorityFeePerGas(client)).toBeDefined()
@@ -33,13 +31,11 @@ test('fallback', async () => {
test('args: chain `priorityFee` override', async () => {
// value
- const client_1 = createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- })
+ const client_1 = tevmMainnet.getClient({ chain: false })
expect(
await estimateMaxPriorityFeePerGas(client_1, {
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
maxPriorityFeePerGas: 69420n,
},
@@ -48,13 +44,11 @@ test('args: chain `priorityFee` override', async () => {
).toBe(69420n)
// sync fn
- const client_2 = createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- })
+ const client_2 = tevmMainnet.getClient({ chain: false })
expect(
await estimateMaxPriorityFeePerGas(client_2, {
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
maxPriorityFeePerGas: () => 69420n,
},
@@ -63,13 +57,11 @@ test('args: chain `priorityFee` override', async () => {
).toBe(69420n)
// async fn
- const client_3 = createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- })
+ const client_3 = tevmMainnet.getClient({ chain: false })
expect(
await estimateMaxPriorityFeePerGas(client_3, {
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
maxPriorityFeePerGas: async () => 69420n,
},
@@ -78,13 +70,11 @@ test('args: chain `priorityFee` override', async () => {
).toBe(69420n)
// zero base fee
- const client_4 = createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- })
+ const client_4 = tevmMainnet.getClient({ chain: false })
expect(
await estimateMaxPriorityFeePerGas(client_4, {
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
maxPriorityFeePerGas: 0n,
},
@@ -93,13 +83,11 @@ test('args: chain `priorityFee` override', async () => {
).toBe(0n)
// async zero base fee
- const client_5 = createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- })
+ const client_5 = tevmMainnet.getClient({ chain: false })
expect(
await estimateMaxPriorityFeePerGas(client_5, {
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
maxPriorityFeePerGas: async () => 0n,
},
@@ -108,13 +96,11 @@ test('args: chain `priorityFee` override', async () => {
).toBe(0n)
// fallback
- const client_6 = createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- })
+ const client_6 = tevmMainnet.getClient({ chain: false })
expect(
await estimateMaxPriorityFeePerGas(client_6, {
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
maxPriorityFeePerGas: async () => null,
},
@@ -123,13 +109,11 @@ test('args: chain `priorityFee` override', async () => {
).toBeDefined()
// deprecated `defaultPriorityFee`
- const client_7 = createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- })
+ const client_7 = tevmMainnet.getClient({ chain: false })
expect(
await estimateMaxPriorityFeePerGas(client_7, {
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
defaultPriorityFee: async () => 69420n,
},
@@ -141,61 +125,61 @@ test('args: chain `priorityFee` override', async () => {
test('client: chain `priorityFee` override', async () => {
// value
const client_1 = createPublicClient({
+ ...tevmMainnet.clientConfig,
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
maxPriorityFeePerGas: 69420n,
},
},
- transport: http(),
})
expect(await estimateMaxPriorityFeePerGas(client_1)).toBe(69420n)
// sync fn
const client_2 = createPublicClient({
+ ...tevmMainnet.clientConfig,
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
maxPriorityFeePerGas: () => 69420n,
},
},
- transport: http(),
})
expect(await estimateMaxPriorityFeePerGas(client_2)).toBe(69420n)
// async fn
const client_3 = createPublicClient({
+ ...tevmMainnet.clientConfig,
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
maxPriorityFeePerGas: async () => 69420n,
},
},
- transport: http(),
})
expect(await estimateMaxPriorityFeePerGas(client_3)).toBe(69420n)
// zero base fee
const client_4 = createPublicClient({
+ ...tevmMainnet.clientConfig,
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
maxPriorityFeePerGas: 0n,
},
},
- transport: http(),
})
expect(await estimateMaxPriorityFeePerGas(client_4)).toBe(0n)
// async zero base fee
const client_5 = createPublicClient({
+ ...tevmMainnet.clientConfig,
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
maxPriorityFeePerGas: async () => 0n,
},
},
- transport: http(),
})
expect(await estimateMaxPriorityFeePerGas(client_5)).toBe(0n)
})
@@ -224,20 +208,11 @@ test('maxPriorityFeePerGas < 0', async () => {
describe('mainnet smoke', () => {
test('default', async () => {
- const mainnetClient = createPublicClient({
- chain: mainnet,
- transport: http(process.env.VITE_ANVIL_FORK_URL),
- })
- expect(await estimateMaxPriorityFeePerGas(mainnetClient)).toBeDefined()
+ expect(await estimateMaxPriorityFeePerGas(client)).toBeDefined()
})
test.skip('fallback', async () => {
- const mainnetClient = createPublicClient({
- chain: mainnet,
- // cloudflare doesn't support eth_maxPriorityFeePerGas
- transport: http('https://cloudflare-eth.com'),
- })
- expect(await estimateMaxPriorityFeePerGas(mainnetClient)).toBeDefined()
+ expect(await estimateMaxPriorityFeePerGas(client)).toBeDefined()
})
})
diff --git a/src/actions/public/fillTransaction.test.ts b/src/actions/public/fillTransaction.test.ts
index eb08b2948d..194f28789d 100644
--- a/src/actions/public/fillTransaction.test.ts
+++ b/src/actions/public/fillTransaction.test.ts
@@ -1,7 +1,7 @@
import { expect, test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deploy } from '~test/utils.js'
import { Delegation } from '../../../contracts/generated.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
@@ -9,7 +9,7 @@ import { encodeFunctionData, nonceManager } from '../../utils/index.js'
import { signAuthorization } from '../wallet/signAuthorization.js'
import { fillTransaction } from './fillTransaction.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
test('default', async () => {
const result = await fillTransaction(client, {
@@ -125,7 +125,7 @@ test('behavior: fee multiplier applied when maxFeePerGas not provided', async ()
data: '0xdeadbeef',
to: '0x0000000000000000000000000000000000000000',
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
baseFeeMultiplier: 1.5,
},
@@ -151,7 +151,7 @@ test('behavior: fee multiplier not applied when maxFeePerGas provided', async ()
to: '0x0000000000000000000000000000000000000000',
maxFeePerGas: customMaxFeePerGas,
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
baseFeeMultiplier: 1.5,
},
@@ -171,7 +171,7 @@ test('behavior: fee multiplier not applied when gasPrice provided', async () =>
gasPrice: customGasPrice,
type: 'legacy',
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
baseFeeMultiplier: 1.5,
},
@@ -194,13 +194,13 @@ test('behavior: fee multiplier function (sync)', async () => {
data: '0xdeadbeef',
to: '0x0000000000000000000000000000000000000000',
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
baseFeeMultiplier() {
return 1.5
},
},
- } as typeof anvilMainnet.chain,
+ } as typeof tevmMainnet.chain,
})
// maxFeePerGas should be multiplied by the custom multiplier function result
@@ -226,13 +226,13 @@ test('behavior: fee multiplier function (async)', async () => {
data: '0xdeadbeef',
to: '0x0000000000000000000000000000000000000000',
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
async baseFeeMultiplier() {
return 1.5
},
},
- } as typeof anvilMainnet.chain,
+ } as typeof tevmMainnet.chain,
})
// maxFeePerGas should be multiplied by the custom multiplier function result
@@ -252,7 +252,7 @@ test('behavior: error when fee multiplier less than 1', async () => {
data: '0xdeadbeef',
to: '0x0000000000000000000000000000000000000000',
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
baseFeeMultiplier: 0.8,
},
diff --git a/src/actions/public/getBalance.test.ts b/src/actions/public/getBalance.test.ts
index 10d0bd7f22..cdd218a7a4 100644
--- a/src/actions/public/getBalance.test.ts
+++ b/src/actions/public/getBalance.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { mine } from '../test/mine.js'
import { setBalance } from '../test/setBalance.js'
@@ -9,7 +9,7 @@ import { sendTransaction } from '../wallet/sendTransaction.js'
import { getBalance } from './getBalance.js'
import { getBlockNumber } from './getBlockNumber.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const sourceAccount = accounts[0]
const targetAccount = accounts[1]
diff --git a/src/actions/public/getBlobBaseFee.test.ts b/src/actions/public/getBlobBaseFee.test.ts
index 07dd920ef8..2f515ea101 100644
--- a/src/actions/public/getBlobBaseFee.test.ts
+++ b/src/actions/public/getBlobBaseFee.test.ts
@@ -1,9 +1,9 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getBlobBaseFee } from './getBlobBaseFee.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const baseFee = await getBlobBaseFee(client)
diff --git a/src/actions/public/getBlock.bench.ts b/src/actions/public/getBlock.bench.ts
index f303a77dfc..774473895e 100644
--- a/src/actions/public/getBlock.bench.ts
+++ b/src/actions/public/getBlock.bench.ts
@@ -1,10 +1,10 @@
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { ethersProvider } from '~test/bench.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getBlock } from './getBlock.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe('Get Block', () => {
bench('viem: `getBlock`', async () => {
diff --git a/src/actions/public/getBlock.test-d.ts b/src/actions/public/getBlock.test-d.ts
index cbe679bf1d..428fb12cc4 100644
--- a/src/actions/public/getBlock.test-d.ts
+++ b/src/actions/public/getBlock.test-d.ts
@@ -1,6 +1,6 @@
import { describe, expectTypeOf, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { optimism } from '../../chains/index.js'
import { createPublicClient, http } from '../../index.js'
import type { Hash, Hex } from '../../types/misc.js'
@@ -8,7 +8,7 @@ import type { Transaction } from '../../types/transaction.js'
import type { Prettify } from '../../types/utils.js'
import { getBlock } from './getBlock.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('includeTransactions = false', async () => {
const block_1 = await getBlock(client)
diff --git a/src/actions/public/getBlock.test.ts b/src/actions/public/getBlock.test.ts
index 2808854930..def8b60bf0 100644
--- a/src/actions/public/getBlock.test.ts
+++ b/src/actions/public/getBlock.test.ts
@@ -1,6 +1,6 @@
import { assertType, describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { celo } from '../../chains/index.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
@@ -8,7 +8,7 @@ import { http } from '../../clients/transports/http.js'
import type { Block } from '../../types/block.js'
import { getBlock } from './getBlock.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('gets latest block', async () => {
const block = await getBlock(client)
@@ -112,7 +112,7 @@ test('chain w/ custom block type', async () => {
describe('args: blockNumber', () => {
test('gets block by block number', async () => {
const block = await getBlock(client, {
- blockNumber: anvilMainnet.forkBlockNumber - 1n,
+ blockNumber: tevmMainnet.forkBlockNumber - 1n,
})
expect(block).toMatchInlineSnapshot(`
{
@@ -524,7 +524,7 @@ describe('args: blockTag', () => {
describe('args: hash', () => {
test('gets block by block hash', async () => {
const initialBlock = await getBlock(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
})
const block = await getBlock(client, {
blockHash: initialBlock!.hash!,
@@ -779,7 +779,7 @@ describe('args: hash', () => {
test('args: includeTransactions', async () => {
const block = await getBlock(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
includeTransactions: true,
})
expect(typeof block.transactions[0] === 'object').toBe(true)
diff --git a/src/actions/public/getBlockNumber.bench.ts b/src/actions/public/getBlockNumber.bench.ts
index c25501b965..e6f05e8fd9 100644
--- a/src/actions/public/getBlockNumber.bench.ts
+++ b/src/actions/public/getBlockNumber.bench.ts
@@ -1,10 +1,10 @@
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { ethersProvider } from '~test/bench.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getBlockNumber } from './getBlockNumber.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe('Get Block Number', () => {
bench('viem: `getBlockNumber`', async () => {
diff --git a/src/actions/public/getBlockNumber.test.ts b/src/actions/public/getBlockNumber.test.ts
index a124f0a389..c1ac5e9a0e 100644
--- a/src/actions/public/getBlockNumber.test.ts
+++ b/src/actions/public/getBlockNumber.test.ts
@@ -1,10 +1,10 @@
import { beforeEach, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { mine } from '../test/mine.js'
import { getBlockNumber, getBlockNumberCache } from './getBlockNumber.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
beforeEach(() => getBlockNumberCache(client.uid).clear())
@@ -28,21 +28,21 @@ test('behavior: caches', async () => {
test('behavior: caches blockNumber within cacheTime', async () => {
const cacheTime = 100
- vi.useFakeTimers()
const a = await getBlockNumber(client, { cacheTime })
+ const cachedAt = Date.now()
await mine(client, { blocks: 1 })
- vi.advanceTimersByTime(cacheTime / 2)
- const b = await getBlockNumber(client)
+ vi.useFakeTimers({ toFake: ['Date'] })
+ vi.setSystemTime(cachedAt + cacheTime / 2)
+ const b = await getBlockNumber(client, { cacheTime })
// Within cacheTime, the block number should be the same
expect(a).toBe(b)
// Advance time by the remaining half plus 1ms to ensure the cache is invalidated
- vi.advanceTimersByTime(1 + cacheTime / 2)
- const c = await getBlockNumber(client)
+ vi.setSystemTime(cachedAt + cacheTime + 1)
+ const c = await getBlockNumber(client, { cacheTime })
// After cacheTime has passed, the block number should be different
expect(a).not.toBe(c)
-
vi.useRealTimers()
})
diff --git a/src/actions/public/getBlockTransactionCount.bench.ts b/src/actions/public/getBlockTransactionCount.bench.ts
index 2d723a633d..d88b76d157 100644
--- a/src/actions/public/getBlockTransactionCount.bench.ts
+++ b/src/actions/public/getBlockTransactionCount.bench.ts
@@ -1,10 +1,10 @@
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getBlockTransactionCount } from './getBlockTransactionCount.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe.skip('Get Block Transaction Count', () => {
bench('viem: `getBlockTransactionCount`', async () => {
diff --git a/src/actions/public/getBlockTransactionCount.test.ts b/src/actions/public/getBlockTransactionCount.test.ts
index ed33d0db19..22eb2742d0 100644
--- a/src/actions/public/getBlockTransactionCount.test.ts
+++ b/src/actions/public/getBlockTransactionCount.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { mine } from '../test/mine.js'
import { sendTransaction } from '../wallet/sendTransaction.js'
@@ -8,7 +8,7 @@ import { sendTransaction } from '../wallet/sendTransaction.js'
import { getBlock } from './getBlock.js'
import { getBlockTransactionCount } from './getBlockTransactionCount.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
expect(await getBlockTransactionCount(client)).toBeDefined()
@@ -17,20 +17,20 @@ test('default', async () => {
test('args: blockNumber', async () => {
expect(
await getBlockTransactionCount(client, {
- blockNumber: anvilMainnet.forkBlockNumber - 1n,
+ blockNumber: tevmMainnet.forkBlockNumber - 1n,
}),
- ).toBe(165)
+ ).toBe(129)
})
test('args: blockHash', async () => {
const block = await getBlock(client, {
- blockNumber: anvilMainnet.forkBlockNumber - 1n,
+ blockNumber: tevmMainnet.forkBlockNumber - 1n,
})
expect(
await getBlockTransactionCount(client, {
blockHash: block.hash!,
}),
- ).toBe(165)
+ ).toBe(129)
})
test('args: blockTag', async () => {
diff --git a/src/actions/public/getChainId.bench.ts b/src/actions/public/getChainId.bench.ts
index c2ffc00e9e..7ac252ad37 100644
--- a/src/actions/public/getChainId.bench.ts
+++ b/src/actions/public/getChainId.bench.ts
@@ -1,10 +1,10 @@
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getChainId } from './getChainId.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe.skip('Get Chain ID', () => {
bench('viem: `getChainId`', async () => {
diff --git a/src/actions/public/getChainId.test.ts b/src/actions/public/getChainId.test.ts
index 92167bdfef..19360e59c2 100644
--- a/src/actions/public/getChainId.test.ts
+++ b/src/actions/public/getChainId.test.ts
@@ -1,10 +1,10 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getChainId } from './getChainId.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
expect(await getChainId(client)).toBe(1)
diff --git a/src/actions/public/getCode.test.ts b/src/actions/public/getCode.tevm.test.ts
similarity index 98%
rename from src/actions/public/getCode.test.ts
rename to src/actions/public/getCode.tevm.test.ts
index 6829c59ed6..ad7316a162 100644
--- a/src/actions/public/getCode.test.ts
+++ b/src/actions/public/getCode.tevm.test.ts
@@ -1,11 +1,11 @@
import { expect, test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getCode } from './getCode.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
expect(
@@ -13,13 +13,15 @@ test('default', async () => {
address: '0x0000000000000000000000000000000000000000',
}),
).toBe(undefined)
- expect(await getCode(client, { address: wagmiContractConfig.address })).toBe(
+ expect(
+ await getCode(client, { address: wagmiContractConfig.address }),
+ ).toEqualHex(
'0x608060405234801561001057600080fd5b50600436106101005760003560e01c80636352211e11610097578063a22cb46511610066578063a22cb46514610215578063b88d4fde14610228578063c87b56dd1461023b578063e985e9c51461024e57600080fd5b80636352211e146101d457806370a08231146101e757806395d89b41146101fa578063a0712d681461020257600080fd5b80631249c58b116100d35780631249c58b1461018f57806318160ddd1461019757806323b872dd146101ae57806342842e0e146101c157600080fd5b806301ffc9a71461010557806306fdde031461012d578063081812fc14610142578063095ea7b31461017a575b600080fd5b61011861011336600461178f565b610297565b60405190151581526020015b60405180910390f35b61013561037c565b6040516101249190611829565b61015561015036600461183c565b61040e565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018d61018836600461187e565b6104d3565b005b61018d61062b565b6101a060065481565b604051908152602001610124565b61018d6101bc3660046118a8565b61067d565b61018d6101cf3660046118a8565b610704565b6101556101e236600461183c565b61071f565b6101a06101f53660046118e4565b6107b7565b61013561086b565b61018d61021036600461183c565b61087a565b61018d6102233660046118ff565b610902565b61018d61023636600461196a565b610911565b61013561024936600461183c565b61099f565b61011861025c366004611a64565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061032a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061037657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461038b90611a97565b80601f01602080910402602001604051908101604052809291908181526020018280546103b790611a97565b80156104045780601f106103d957610100808354040283529160200191610404565b820191906000526020600020905b8154815290600101906020018083116103e757829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff166104aa5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006104de8261071f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105815760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016104a1565b3373ffffffffffffffffffffffffffffffffffffffff821614806105aa57506105aa813361025c565b61061c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016104a1565b6106268383610b07565b505050565b6007545b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156106615760010161062f565b61066b3382610ba7565b60068054600190810190915501600755565b6106873382610bc1565b6106f95760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016104a1565b610626838383610d17565b61062683838360405180602001604052806000815250610911565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806103765760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016104a1565b600073ffffffffffffffffffffffffffffffffffffffff82166108425760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016104a1565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60606001805461038b90611a97565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156108ec5760405162461bcd60e51b815260206004820152601160248201527f546f6b656e2049442069732074616b656e00000000000000000000000000000060448201526064016104a1565b6108f63382610ba7565b50600680546001019055565b61090d338383610f4a565b5050565b61091b3383610bc1565b61098d5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016104a1565b6109998484848461105d565b50505050565b6040517f666f726567726f756e64000000000000000000000000000000000000000000006020820152602a810182905260609060009061016890604a016040516020818303038152906040528051906020012060001c6109ff9190611b19565b6040517f6261636b67726f756e64000000000000000000000000000000000000000000006020820152602a810185905290915060009061016890604a016040516020818303038152906040528051906020012060001c610a5f9190611b19565b90506000610aba610a6f866110e6565b610aa9610a7b866110e6565b610a84866110e6565b604051602001610a95929190611b2d565b60405160208183030381529060405261121b565b604051602001610a959291906125ba565b9050600081604051602001610acf919061268b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529695505050505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190610b618261071f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61090d82826040518060200160405280600081525061136e565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610c585760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016104a1565b6000610c638361071f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610cd1575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b80610d0f57508373ffffffffffffffffffffffffffffffffffffffff16610cf78461040e565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16610d378261071f565b73ffffffffffffffffffffffffffffffffffffffff1614610dc05760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016104a1565b73ffffffffffffffffffffffffffffffffffffffff8216610e485760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016104a1565b610e53600082610b07565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805460019290610e899084906126ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290610ec4908490612716565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fc55760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104a1565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611068848484610d17565b611074848484846113f7565b6109995760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016104a1565b60608160000361112957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611153578061113d8161272e565b915061114c9050600a83612766565b915061112d565b60008167ffffffffffffffff81111561116e5761116e61193b565b6040519080825280601f01601f191660200182016040528015611198576020820181803683370190505b5090505b8415610d0f576111ad6001836126ff565b91506111ba600a86611b19565b6111c5906030612716565b60f81b8183815181106111da576111da61277a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611214600a86612766565b945061119c565b6060815160000361123a57505060408051602081019091526000815290565b600060405180606001604052806040815260200161284d60409139905060006003845160026112699190612716565b6112739190612766565b61127e9060046127a9565b67ffffffffffffffff8111156112965761129661193b565b6040519080825280601f01601f1916602001820160405280156112c0576020820181803683370190505b509050600182016020820185865187015b8082101561132c576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506112d1565b5050600386510660018114611348576002811461135b57611363565b603d6001830353603d6002830353611363565b603d60018303535b509195945050505050565b61137883836115d0565b61138560008484846113f7565b6106265760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016104a1565b600073ffffffffffffffffffffffffffffffffffffffff84163b156115c5576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061146e9033908990889088906004016127e6565b6020604051808303816000875af19250505080156114c7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526114c49181019061282f565b60015b61157a573d8080156114f5576040519150601f19603f3d011682016040523d82523d6000602084013e6114fa565b606091505b5080516000036115725760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016104a1565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610d0f565b506001949350505050565b73ffffffffffffffffffffffffffffffffffffffff82166116335760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016104a1565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156116a55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104a1565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054600192906116db908490612716565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461178c57600080fd5b50565b6000602082840312156117a157600080fd5b81356117ac8161175e565b9392505050565b60005b838110156117ce5781810151838201526020016117b6565b838111156109995750506000910152565b600081518084526117f78160208601602086016117b3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006117ac60208301846117df565b60006020828403121561184e57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461187957600080fd5b919050565b6000806040838503121561189157600080fd5b61189a83611855565b946020939093013593505050565b6000806000606084860312156118bd57600080fd5b6118c684611855565b92506118d460208501611855565b9150604084013590509250925092565b6000602082840312156118f657600080fd5b6117ac82611855565b6000806040838503121561191257600080fd5b61191b83611855565b91506020830135801515811461193057600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561198057600080fd5b61198985611855565b935061199760208601611855565b925060408501359150606085013567ffffffffffffffff808211156119bb57600080fd5b818701915087601f8301126119cf57600080fd5b8135818111156119e1576119e161193b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611a2757611a2761193b565b816040528281528a6020848701011115611a4057600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215611a7757600080fd5b611a8083611855565b9150611a8e60208401611855565b90509250929050565b600181811c90821680611aab57607f821691505b602082108103611ae4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611b2857611b28611aea565b500690565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323081527f30302f737667222077696474683d223130323422206865696768743d2231303260208201527f34222066696c6c3d226e6f6e65223e3c706174682066696c6c3d2268736c2800604082015260008351611bb181605f8501602088016117b3565b7f2c20313030252c20313025292220643d224d3020306831303234763130323448605f918401918201527f307a22202f3e3c672066696c6c3d2268736c2800000000000000000000000000607f8201528351611c148160928401602088016117b3565b7f2c20313030252c2039302529223e3c7061746820643d224d393033203433372e609292909101918201527f35633020392e3131332d372e3338382031362e352d31362e352031362e35732d60b28201527f31362e352d372e3338372d31362e352d31362e3520372e3338382d31362e352060d28201527f31362e352d31362e352031362e3520372e3338372031362e352031362e357a4d60f28201527f3639382e3532392035363663362e39323120302031322e35332d352e353936206101128201527f31322e35332d31322e35762d353063302d362e39303420352e3630392d31322e6101328201527f352031322e3532392d31322e356832352e30353963362e393220302031322e356101528201527f323920352e3539362031322e3532392031322e35763530633020362e393034206101728201527f352e3630392031322e352031322e35332031322e357331322e3532392d352e356101928201527f39362031322e3532392d31322e35762d353063302d362e39303420352e3630396101b28201527f2d31322e352031322e35332d31322e356832352e30353963362e3932203020316101d28201527f322e35323920352e3539362031322e3532392031322e35763530633020362e396101f28201527f303420352e3630392031322e352031322e3532392031322e356833372e3538396102128201527f63362e393220302031322e3532392d352e3539362031322e3532392d31322e356102328201527f762d373563302d362e3930342d352e3630392d31322e352d31322e3532392d316102528201527f322e35732d31322e353320352e3539362d31322e35332031322e357635362e326102728201527f3561362e32363420362e3236342030203120312d31322e3532392030563437386102928201527f2e3563302d362e3930342d352e3630392d31322e352d31322e35332d31322e356102b28201527f483639382e353239632d362e393220302d31322e35323920352e3539362d31326102d28201527f2e3532392031322e35763735633020362e39303420352e3630392031322e35206102f28201527f31322e3532392031322e357a22202f3e3c7061746820643d224d3135372e36356103128201527f3520353431632d362e39333220302d31322e3535322d352e3539362d31322e356103328201527f35322d31322e35762d353063302d362e3930342d352e3631392d31322e352d316103528201527f322e3535312d31322e3553313230203437312e35393620313230203437382e356103728201527f763735633020362e39303420352e36322031322e352031322e3535322031322e6103928201527f35683135302e363263362e39333320302031322e3535322d352e3539362031326103b28201527f2e3535322d31322e35762d353063302d362e39303420352e3631392d31322e356103d28201527f2031322e3535322d31322e35683134342e33343563332e343635203020362e326103f28201527f373620322e37393820362e32373620362e3235732d322e38313120362e32352d6104128201527f362e32373620362e3235483332302e383238632d362e39333320302d31322e356104328201527f353220352e3539362d31322e3535322031322e357633372e35633020362e39306104528201527f3420352e3631392031322e352031322e3535322031322e35683135302e3632636104728201527f362e39333320302031322e3535322d352e3539362031322e3535322d31322e356104928201527f762d373563302d362e3930342d352e3631392d31322e352d31322e3535322d316104b28201527f322e35483238332e313732632d362e39333220302d31322e35353120352e35396104d28201527f362d31322e3535312031322e35763530633020362e3930342d352e36313920316104f28201527f322e352d31322e3535322031322e35682d32352e313033632d362e39333320306105128201527f2d31322e3535322d352e3539362d31322e3535322d31322e35762d353063302d6105328201527f362e3930342d352e36322d31322e352d31322e3535322d31322e35732d31322e6105528201527f35353220352e3539362d31322e3535322031322e35763530633020362e3930346105728201527f2d352e3631392031322e352d31322e3535312031322e35682d32352e3130347a6105928201527f6d3330312e3234322d362e3235633020332e3435322d322e38313120362e32356105b28201527f2d362e32373620362e3235483333392e363535632d332e34363520302d362e326105d28201527f37362d322e3739382d362e3237362d362e323573322e3831312d362e323520366105f28201527f2e3237362d362e3235683131322e39363663332e343635203020362e323736206106128201527f322e37393820362e32373620362e32357a4d343937203535332e3831386330206106328201527f362e39323920352e3632382031322e3534362031322e3537312031322e3534366106528201527f6831333261362e323820362e323820302030203120362e32383620362e3237326106728201527f20362e323820362e32382030203020312d362e32383620362e323733682d31336106928201527f32632d362e39343320302d31322e35373120352e3631362d31322e35373120316106b28201527f322e3534364131322e35362031322e3536203020302030203530392e353731206106d28201527f363034683135302e38353863362e39343320302031322e3537312d352e3631366106f28201527f2031322e3537312d31322e353435762d3131322e393163302d362e3932382d356107128201527f2e3632382d31322e3534352d31322e3537312d31322e353435483530392e35376107328201527f31632d362e39343320302d31322e35373120352e3631372d31322e35373120316107528201527f322e3534357637352e3237337a6d33372e3731342d36322e373237632d362e396107728201527f343320302d31322e35373120352e3631372d31322e3537312031322e353435766107928201527f32352e303931633020362e39323920352e3632382031322e3534362031322e356107b28201527f37312031322e353436683130302e35373263362e39343320302031322e3537316107d28201527f2d352e3631372031322e3537312d31322e353436762d32352e30393163302d366107f28201527f2e3932382d352e3632382d31322e3534352d31322e3537312d31322e353435486108128201527f3533342e3731347a222066696c6c2d72756c653d226576656e6f646422202f3e6108328201527f3c2f673e3c2f7376673e0000000000000000000000000000000000000000000061085282015261085c01949350505050565b7f7b226e616d65223a20227761676d6920230000000000000000000000000000008152600083516125f28160118501602088016117b3565b7f222c2022696d616765223a2022646174613a696d6167652f7376672b786d6c3b6011918401918201527f6261736536342c00000000000000000000000000000000000000000000000000603182015283516126558160388401602088016117b3565b7f227d00000000000000000000000000000000000000000000000000000000000060389290910191820152603a01949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516126c381601d8501602087016117b3565b91909101601d0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612711576127116126d0565b500390565b60008219821115612729576127296126d0565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361275f5761275f6126d0565b5060010190565b60008261277557612775611aea565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127e1576127e16126d0565b500290565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261282560808301846117df565b9695505050505050565b60006020828403121561284157600080fd5b81516117ac8161175e56fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212201665a4f9111990d7529375848d3fd02c0121091a940da59e763eba826e7b077064736f6c634300080d0033',
)
expect(
await getCode(client, {
address: wagmiContractConfig.address,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
}),
- ).toBeDefined()
+ ).toBeHex()
})
diff --git a/src/actions/public/getContractEvents.test-d.ts b/src/actions/public/getContractEvents.test-d.ts
index 4b5a8349e0..7d166c2d82 100644
--- a/src/actions/public/getContractEvents.test-d.ts
+++ b/src/actions/public/getContractEvents.test-d.ts
@@ -1,10 +1,10 @@
import { expectTypeOf, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getContractEvents } from './getContractEvents.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const abi = [
{
diff --git a/src/actions/public/getContractEvents.test.ts b/src/actions/public/getContractEvents.test.ts
index 21c5026419..e34c6c52f8 100644
--- a/src/actions/public/getContractEvents.test.ts
+++ b/src/actions/public/getContractEvents.test.ts
@@ -1,15 +1,15 @@
import { beforeAll, expect, test } from 'vitest'
import { daiContractConfig, erc20Abi, usdcContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getAddress } from '../../index.js'
import { setBalance, writeContract } from '../index.js'
import { impersonateAccount } from '../test/impersonateAccount.js'
import { mine } from '../test/mine.js'
import { getContractEvents } from './getContractEvents.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
beforeAll(async () => {
await impersonateAccount(client, {
diff --git a/src/actions/public/getEip712Domain.test.ts b/src/actions/public/getEip712Domain.test.ts
index 669859d01e..6e97e3843f 100644
--- a/src/actions/public/getEip712Domain.test.ts
+++ b/src/actions/public/getEip712Domain.test.ts
@@ -1,7 +1,7 @@
import { expect, test } from 'vitest'
import { SoladyAccountFactory07 } from '~contracts/generated.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deploySoladyAccount_07 } from '~test/utils.js'
import { encodeFunctionData, pad } from '../../utils/index.js'
import { mine } from '../test/mine.js'
@@ -10,7 +10,7 @@ import { getEip712Domain } from './getEip712Domain.js'
import { readContract } from './readContract.js'
import { simulateContract } from './simulateContract.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const { factoryAddress } = await deploySoladyAccount_07()
diff --git a/src/actions/public/getFeeHistory.bench.ts b/src/actions/public/getFeeHistory.bench.ts
index 805e9b8d31..587c84e436 100644
--- a/src/actions/public/getFeeHistory.bench.ts
+++ b/src/actions/public/getFeeHistory.bench.ts
@@ -1,10 +1,10 @@
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getFeeHistory } from './getFeeHistory.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe.skip('Get Fee History', () => {
bench('viem: `getFeeHistory`', async () => {
diff --git a/src/actions/public/getFeeHistory.test.ts b/src/actions/public/getFeeHistory.test.ts
index 1192c2a834..178472dd1d 100644
--- a/src/actions/public/getFeeHistory.test.ts
+++ b/src/actions/public/getFeeHistory.test.ts
@@ -1,16 +1,16 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getFeeHistory } from './getFeeHistory.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
expect(
await getFeeHistory(client, {
blockCount: 4,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
rewardPercentiles: [0, 50, 100],
}),
).toMatchInlineSnapshot(`
@@ -69,7 +69,7 @@ test('args: blockCount', async () => {
expect(
await getFeeHistory(client, {
blockCount: 2,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
rewardPercentiles: [0, 50, 100],
}),
).toMatchInlineSnapshot(`
@@ -104,7 +104,7 @@ test('args: rewardPercentiles', async () => {
expect(
await getFeeHistory(client, {
blockCount: 2,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
rewardPercentiles: [0, 25, 50, 75, 100],
}),
).toMatchInlineSnapshot(`
diff --git a/src/actions/public/getFilterChanges.bench.ts b/src/actions/public/getFilterChanges.bench.ts
index 5eba17940a..a58ffcd518 100644
--- a/src/actions/public/getFilterChanges.bench.ts
+++ b/src/actions/public/getFilterChanges.bench.ts
@@ -1,11 +1,11 @@
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createPendingTransactionFilter } from './createPendingTransactionFilter.js'
import { getFilterChanges } from './getFilterChanges.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const filter = await createPendingTransactionFilter(client)
diff --git a/src/actions/public/getFilterChanges.test-d.ts b/src/actions/public/getFilterChanges.test-d.ts
index b0097100c7..52cd2e6e4f 100644
--- a/src/actions/public/getFilterChanges.test-d.ts
+++ b/src/actions/public/getFilterChanges.test-d.ts
@@ -2,7 +2,7 @@ import type { Abi, AbiEvent, Address } from 'abitype'
import { describe, expectTypeOf, test } from 'vitest'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import type { Log } from '../../types/log.js'
import type { Hash, Hex } from '../../types/misc.js'
@@ -10,7 +10,7 @@ import { createContractEventFilter } from './createContractEventFilter.js'
import { createEventFilter } from './createEventFilter.js'
import { getFilterChanges } from './getFilterChanges.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe('createEventFilter', () => {
test('default', async () => {
diff --git a/src/actions/public/getFilterChanges.test.ts b/src/actions/public/getFilterChanges.test.ts
index e57883b6ba..953dd16146 100644
--- a/src/actions/public/getFilterChanges.test.ts
+++ b/src/actions/public/getFilterChanges.test.ts
@@ -10,8 +10,8 @@ import {
import { ERC20InvalidTransferEvent } from '~contracts/generated.js'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deployErc20InvalidTransferEvent } from '~test/utils.js'
import type { Log } from '../../types/log.js'
import type { Hash } from '../../types/misc.js'
@@ -29,7 +29,7 @@ import { createEventFilter } from './createEventFilter.js'
import { createPendingTransactionFilter } from './createPendingTransactionFilter.js'
import { getFilterChanges } from './getFilterChanges.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const event = {
default: {
@@ -302,8 +302,8 @@ describe('contract events', () => {
const filter = await createContractEventFilter(client, {
abi: usdcContractConfig.abi,
eventName: 'Transfer',
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
const logs = await getFilterChanges(client, { filter })
@@ -325,8 +325,8 @@ describe('contract events', () => {
const filter = await createContractEventFilter(client, {
abi: usdcContractConfig.abi,
eventName: 'Transfer',
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
strict: true,
})
@@ -814,8 +814,8 @@ describe('events', () => {
test('args: fromBlock/toBlock', async () => {
const filter = await createEventFilter(client, {
event: event.default,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
let logs = await getFilterChanges(client, { filter })
@@ -837,8 +837,8 @@ describe('events', () => {
test('args: strict = true (named)', async () => {
const filter = await createEventFilter(client, {
event: event.default,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
strict: true,
})
@@ -870,8 +870,8 @@ describe('events', () => {
test('args: strict = false (named)', async () => {
const filter = await createEventFilter(client, {
event: event.default,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
let logs = await getFilterChanges(client, { filter })
@@ -904,8 +904,8 @@ describe('events', () => {
test('args: strict = true (unnamed)', async () => {
const filter = await createEventFilter(client, {
event: event.unnamed,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
strict: true,
})
@@ -934,8 +934,8 @@ describe('events', () => {
test('args: strict = false (unnamed)', async () => {
const filter = await createEventFilter(client, {
event: event.unnamed,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
let logs = await getFilterChanges(client, { filter })
diff --git a/src/actions/public/getFilterLogs.test-d.ts b/src/actions/public/getFilterLogs.test-d.ts
index 0b252ed6ee..e1d0b377e7 100644
--- a/src/actions/public/getFilterLogs.test-d.ts
+++ b/src/actions/public/getFilterLogs.test-d.ts
@@ -2,7 +2,7 @@ import type { Abi, AbiEvent, Address } from 'abitype'
import { describe, expectTypeOf, test } from 'vitest'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import type { Log } from '../../types/log.js'
import type { Hash, Hex } from '../../types/misc.js'
@@ -10,7 +10,7 @@ import { createContractEventFilter } from './createContractEventFilter.js'
import { createEventFilter } from './createEventFilter.js'
import { getFilterLogs } from './getFilterLogs.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe('createEventFilter', () => {
test('default', async () => {
diff --git a/src/actions/public/getFilterLogs.test.ts b/src/actions/public/getFilterLogs.test.ts
index 450c88a82f..a7b61eb5e8 100644
--- a/src/actions/public/getFilterLogs.test.ts
+++ b/src/actions/public/getFilterLogs.test.ts
@@ -10,8 +10,8 @@ import {
import { ERC20InvalidTransferEvent } from '~contracts/generated.js'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deployErc20InvalidTransferEvent } from '~test/utils.js'
import type { Log } from '../../types/log.js'
import { getAddress } from '../../utils/address/getAddress.js'
@@ -24,7 +24,7 @@ import { createContractEventFilter } from './createContractEventFilter.js'
import { createEventFilter } from './createEventFilter.js'
import { getFilterLogs } from './getFilterLogs.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const event = {
default: {
@@ -261,8 +261,8 @@ describe('contract events', () => {
const filter = await createContractEventFilter(client, {
abi: usdcContractConfig.abi,
eventName: 'Transfer',
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
const logs = await getFilterLogs(client, { filter })
@@ -284,8 +284,8 @@ describe('contract events', () => {
const filter = await createContractEventFilter(client, {
abi: usdcContractConfig.abi,
eventName: 'Transfer',
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
strict: true,
})
@@ -705,8 +705,8 @@ describe('raw events', () => {
test('args: fromBlock/toBlock', async () => {
const filter = await createEventFilter(client, {
event: event.default,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
const logs = await getFilterLogs(client, { filter })
@@ -717,8 +717,8 @@ describe('raw events', () => {
test('args: strict = true (named)', async () => {
const filter = await createEventFilter(client, {
event: event.default,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
strict: true,
})
@@ -747,8 +747,8 @@ describe('raw events', () => {
test('args: strict = false (named)', async () => {
const filter = await createEventFilter(client, {
event: event.default,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
const logs = await getFilterLogs(client, { filter })
@@ -778,8 +778,8 @@ describe('raw events', () => {
test('args: strict = true (unnamed)', async () => {
const filter = await createEventFilter(client, {
event: event.unnamed,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
strict: true,
})
@@ -806,8 +806,8 @@ describe('raw events', () => {
test('args: strict = false (unnamed)', async () => {
const filter = await createEventFilter(client, {
event: event.unnamed,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
const logs = await getFilterLogs(client, { filter })
diff --git a/src/actions/public/getGasPrice.test.ts b/src/actions/public/getGasPrice.test.ts
index 2156e38f52..23e7d7764a 100644
--- a/src/actions/public/getGasPrice.test.ts
+++ b/src/actions/public/getGasPrice.test.ts
@@ -1,10 +1,10 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getGasPrice } from './getGasPrice.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('getGasPrice', async () => {
expect(await getGasPrice(client)).toBeDefined()
diff --git a/src/actions/public/getLogs.test-d.ts b/src/actions/public/getLogs.test-d.ts
index be69471d81..1d9e298e52 100644
--- a/src/actions/public/getLogs.test-d.ts
+++ b/src/actions/public/getLogs.test-d.ts
@@ -1,12 +1,12 @@
import type { AbiEvent } from 'abitype'
import { expectTypeOf, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import type { Hash, Hex } from '../../types/misc.js'
import { getLogs } from './getLogs.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('event: const assertion', async () => {
const event = {
diff --git a/src/actions/public/getLogs.test.ts b/src/actions/public/getLogs.test.ts
index 85f68cf41f..ef0b2d2ad0 100644
--- a/src/actions/public/getLogs.test.ts
+++ b/src/actions/public/getLogs.test.ts
@@ -9,8 +9,8 @@ import {
import { ERC20InvalidTransferEvent } from '~contracts/generated.js'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deployErc20InvalidTransferEvent } from '~test/utils.js'
import type { Log } from '../../types/log.js'
import { getAddress } from '../../utils/address/getAddress.js'
@@ -22,7 +22,7 @@ import { writeContract } from '../wallet/writeContract.js'
import { getBlock } from './getBlock.js'
import { getLogs } from './getLogs.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const event = {
default: {
@@ -229,8 +229,8 @@ describe('events', () => {
test('args: fromBlock/toBlock', async () => {
const logs = await getLogs(client, {
event: event.default,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
assertType[]>(logs)
expect(logs.length).toBe(1482)
@@ -246,7 +246,7 @@ describe('events', () => {
test('args: blockHash', async () => {
const block = await getBlock(client, {
- blockNumber: anvilMainnet.forkBlockNumber - 1n,
+ blockNumber: tevmMainnet.forkBlockNumber - 1n,
})
const logs = await getLogs(client, {
event: event.default,
@@ -267,8 +267,8 @@ describe('events', () => {
test('args: strict = true (named)', async () => {
const logs = await getLogs(client, {
event: event.default,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
strict: true,
})
@@ -295,8 +295,8 @@ describe('events', () => {
test('args: strict = false (named)', async () => {
const logs = await getLogs(client, {
event: event.default,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
assertType[]>(
@@ -324,8 +324,8 @@ describe('events', () => {
test('args: strict = true (unnamed)', async () => {
const logs = await getLogs(client, {
event: event.unnamed,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
strict: true,
})
@@ -350,8 +350,8 @@ describe('events', () => {
test('args: strict = false (unnamed)', async () => {
const logs = await getLogs(client, {
event: event.unnamed,
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
assertType[]>(
diff --git a/src/actions/public/getStorageAt.test.ts b/src/actions/public/getStorageAt.test.ts
index efe1215d6f..0c4d34d0a4 100644
--- a/src/actions/public/getStorageAt.test.ts
+++ b/src/actions/public/getStorageAt.test.ts
@@ -1,11 +1,11 @@
import { expect, test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getStorageAt } from './getStorageAt.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
expect(
@@ -27,7 +27,7 @@ test('args: blockNumber', async () => {
await getStorageAt(client, {
address: wagmiContractConfig.address,
slot: '0x0',
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
}),
).toBe('0x7761676d6900000000000000000000000000000000000000000000000000000a')
})
diff --git a/src/actions/public/getStorageAt.tevm.test.ts b/src/actions/public/getStorageAt.tevm.test.ts
new file mode 100644
index 0000000000..8b96288965
--- /dev/null
+++ b/src/actions/public/getStorageAt.tevm.test.ts
@@ -0,0 +1,29 @@
+import { expect, test } from 'vitest'
+
+import { wagmiContractConfig } from '~test/abis.js'
+import { tevmMainnet } from '~test/tevm.js'
+
+import { getStorageAt } from './getStorageAt.js'
+
+const client = tevmMainnet.getClient()
+
+test('default', async () => {
+ expect(
+ await getStorageAt(client, {
+ address: wagmiContractConfig.address,
+ slot: '0x0',
+ }),
+ ).toBe('0x7761676d6900000000000000000000000000000000000000000000000000000a')
+ // rc.151 lazily caches the account proof containing the requested slot.
+ // Additional uncached slots on the same forked account require a fresh node.
+})
+
+test('args: blockNumber', async () => {
+ expect(
+ await getStorageAt(client, {
+ address: wagmiContractConfig.address,
+ slot: '0x0',
+ blockNumber: tevmMainnet.forkBlockNumber,
+ }),
+ ).toBe('0x7761676d6900000000000000000000000000000000000000000000000000000a')
+})
diff --git a/src/actions/public/getTransaction.bench.ts b/src/actions/public/getTransaction.bench.ts
index 1559d294f9..7643e962d9 100644
--- a/src/actions/public/getTransaction.bench.ts
+++ b/src/actions/public/getTransaction.bench.ts
@@ -1,10 +1,10 @@
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { ethersProvider } from '~test/bench.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getTransaction } from './getTransaction.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const hash =
'0xa4b1f606b66105fa45cb5db23d2f6597075701e7f0e2367f4e6a39d17a8cf98b'
diff --git a/src/actions/public/getTransaction.test-d.ts b/src/actions/public/getTransaction.test-d.ts
index ac3502add3..f13d357643 100644
--- a/src/actions/public/getTransaction.test-d.ts
+++ b/src/actions/public/getTransaction.test-d.ts
@@ -1,6 +1,6 @@
import { describe, expectTypeOf, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { optimism } from '../../chains/index.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
@@ -16,7 +16,7 @@ import type {
import type { Prettify } from '../../types/utils.js'
import { getTransaction } from './getTransaction.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const transaction = await getTransaction(client, {
diff --git a/src/actions/public/getTransaction.test.ts b/src/actions/public/getTransaction.test.ts
index 4705d0dc70..ebd2be94a4 100644
--- a/src/actions/public/getTransaction.test.ts
+++ b/src/actions/public/getTransaction.test.ts
@@ -1,6 +1,6 @@
import { assertType, describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deploy } from '~test/utils.js'
import { Delegation } from '../../../contracts/generated.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
@@ -18,7 +18,7 @@ import { signAuthorization } from '../wallet/signAuthorization.js'
import { getBlock } from './getBlock.js'
import { getTransaction } from './getTransaction.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const sourceAccount = accounts[0]
const targetAccount = accounts[1]
@@ -330,7 +330,7 @@ describe('args: blockHash', () => {
test('blockHash: throws if transaction not found', async () => {
const { hash: blockHash } = await getBlock(client, {
- blockNumber: anvilMainnet.forkBlockNumber - 69n,
+ blockNumber: tevmMainnet.forkBlockNumber - 69n,
})
if (!blockHash) throw new Error('no block hash found')
diff --git a/src/actions/public/getTransactionConfirmations.test.ts b/src/actions/public/getTransactionConfirmations.test.ts
index b5b06a8976..5f6fd87cd5 100644
--- a/src/actions/public/getTransactionConfirmations.test.ts
+++ b/src/actions/public/getTransactionConfirmations.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { wait } from '../../utils/wait.js'
import { mine } from '../test/mine.js'
@@ -9,7 +9,7 @@ import { sendTransaction } from '../wallet/sendTransaction.js'
import { getTransactionConfirmations } from './getTransactionConfirmations.js'
import { getTransactionReceipt } from './getTransactionReceipt.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const hash = await sendTransaction(client, {
diff --git a/src/actions/public/getTransactionCount.test.ts b/src/actions/public/getTransactionCount.test.ts
index cabf1e1322..f55885ae69 100644
--- a/src/actions/public/getTransactionCount.test.ts
+++ b/src/actions/public/getTransactionCount.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { mine } from '../test/mine.js'
import { setNonce } from '../test/setNonce.js'
@@ -8,7 +8,7 @@ import { sendTransaction } from '../wallet/sendTransaction.js'
import { getTransactionCount } from './getTransactionCount.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('gets transaction count', async () => {
await setNonce(client, { address: accounts[0].address, nonce: 0 })
diff --git a/src/actions/public/getTransactionReceipt.bench.ts b/src/actions/public/getTransactionReceipt.bench.ts
index 4e7e103161..aa3266da24 100644
--- a/src/actions/public/getTransactionReceipt.bench.ts
+++ b/src/actions/public/getTransactionReceipt.bench.ts
@@ -1,10 +1,10 @@
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { ethersProvider } from '~test/bench.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getTransactionReceipt } from './getTransactionReceipt.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const hash =
'0xa4b1f606b66105fa45cb5db23d2f6597075701e7f0e2367f4e6a39d17a8cf98b'
diff --git a/src/actions/public/getTransactionReceipt.test.ts b/src/actions/public/getTransactionReceipt.test.ts
index 450543360d..d0eb6a36b1 100644
--- a/src/actions/public/getTransactionReceipt.test.ts
+++ b/src/actions/public/getTransactionReceipt.test.ts
@@ -1,6 +1,6 @@
import { assertType, describe, expect, it, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { holesky, zksync } from '../../chains/index.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
import { http } from '../../clients/transports/http.js'
@@ -16,11 +16,11 @@ import { getBlock } from './getBlock.js'
import { getTransaction } from './getTransaction.js'
import { getTransactionReceipt } from './getTransactionReceipt.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('gets transaction receipt', async () => {
const transaction = await getTransaction(client, {
- blockNumber: anvilMainnet.forkBlockNumber - 1n,
+ blockNumber: tevmMainnet.forkBlockNumber - 1n,
index: 0,
})
const receipt = await getTransactionReceipt(client, {
@@ -371,7 +371,7 @@ describe('e2e', () => {
expect(blockHash).toBeDefined()
expect(blockNumber).toBeDefined()
expect(effectiveGasPrice).toBeDefined()
- expect(transactionHash).toBeDefined()
+ expect(transactionHash).toBeHex({ size: 32 })
expect(receipt).toMatchInlineSnapshot(`
{
"blobGasPrice": 1n,
diff --git a/src/actions/public/multicall.test-d.ts b/src/actions/public/multicall.test-d.ts
index 5430adcb4c..53f40eb75b 100644
--- a/src/actions/public/multicall.test-d.ts
+++ b/src/actions/public/multicall.test-d.ts
@@ -3,13 +3,13 @@ import { erc20Abi, seaportAbi, wagmiMintExampleAbi } from 'abitype/abis'
import { expectTypeOf, test } from 'vitest'
import { baycContractConfig, usdcContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import type { MulticallResponse } from '../../types/multicall.js'
import { multicall } from './multicall.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('single result', async () => {
const res = await multicall(client, {
diff --git a/src/actions/public/multicall.test.ts b/src/actions/public/multicall.test.ts
index 19cd31816a..0e6c61ffd3 100644
--- a/src/actions/public/multicall.test.ts
+++ b/src/actions/public/multicall.test.ts
@@ -12,15 +12,14 @@ import {
usdcContractConfig,
wagmiContractConfig,
} from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deploy, deployErrorExample } from '~test/utils.js'
import { generatePrivateKey } from '../../accounts/generatePrivateKey.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { mainnet } from '../../chains/index.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
-import { http } from '../../clients/transports/http.js'
import type { Hex } from '../../types/misc.js'
import { pad } from '../../utils/data/pad.js'
import { toHex } from '../../utils/encoding/toHex.js'
@@ -28,13 +27,13 @@ import { signAuthorization } from '../wallet/signAuthorization.js'
import { multicall } from './multicall.js'
import * as readContract from './readContract.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const spy = vi.spyOn(readContract, 'readContract')
expect(
await multicall(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
@@ -74,7 +73,7 @@ test('args: allowFailure', async () => {
expect(
await multicall(client, {
allowFailure: false,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
@@ -106,7 +105,7 @@ test('args: batchSize', async () => {
expect(
await multicall(client, {
batchSize: 64,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
@@ -203,7 +202,7 @@ test('args: batchSize', async () => {
const spy_2 = vi.spyOn(readContract, 'readContract')
await multicall(client, {
batchSize: 32,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
@@ -226,7 +225,7 @@ test('args: batchSize', async () => {
const spy_3 = vi.spyOn(readContract, 'readContract')
await multicall(client, {
batchSize: 0,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
@@ -249,7 +248,7 @@ test('args: batchSize', async () => {
test('args: multicallAddress', async () => {
expect(
await multicall(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
@@ -288,7 +287,7 @@ test('args: multicallAddress', async () => {
test('args: deployless', async () => {
expect(
await multicall(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
deployless: true,
contracts: [
{
@@ -328,7 +327,7 @@ test('args: deployless with allowFailure false', async () => {
expect(
await multicall(client, {
allowFailure: false,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
deployless: true,
contracts: [
{
@@ -356,13 +355,11 @@ test('args: deployless with allowFailure false', async () => {
})
test('args: deployless without chain', async () => {
- const clientWithoutChain = createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- })
+ const clientWithoutChain = tevmMainnet.getClient({ chain: false })
expect(
await multicall(clientWithoutChain, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
deployless: true,
contracts: [
{
@@ -527,7 +524,7 @@ describe('errors', async () => {
describe('allowFailure is truthy', async () => {
test('function not found', async () => {
const res = await multicall(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
@@ -575,7 +572,7 @@ describe('errors', async () => {
test('invalid params', async () => {
const res = await multicall(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
@@ -628,7 +625,7 @@ describe('errors', async () => {
test('invalid contract address', async () => {
expect(
await multicall(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
@@ -680,7 +677,7 @@ describe('errors', async () => {
test('contract revert', async () => {
const res = await multicall(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
@@ -841,7 +838,7 @@ describe('errors', async () => {
expect(
await multicall(client, {
batchSize: 72,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...baycContractConfig,
@@ -1175,7 +1172,7 @@ describe('errors', async () => {
multicall(client, {
allowFailure: false,
batchSize: 72,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...baycContractConfig,
@@ -1222,29 +1219,24 @@ describe('errors', async () => {
test('chain not provided', async () => {
await expect(() =>
- multicall(
- createPublicClient({
- transport: http(anvilMainnet.rpcUrl.http),
- }),
- {
- blockNumber: anvilMainnet.forkBlockNumber,
- contracts: [
- {
- ...usdcContractConfig,
- functionName: 'totalSupply',
- },
- {
- ...usdcContractConfig,
- functionName: 'balanceOf',
- args: [address.vitalik],
- },
- {
- ...baycContractConfig,
- functionName: 'totalSupply',
- },
- ],
- },
- ),
+ multicall(tevmMainnet.getClient({ chain: false }), {
+ blockNumber: tevmMainnet.forkBlockNumber,
+ contracts: [
+ {
+ ...usdcContractConfig,
+ functionName: 'totalSupply',
+ },
+ {
+ ...usdcContractConfig,
+ functionName: 'balanceOf',
+ args: [address.vitalik],
+ },
+ {
+ ...baycContractConfig,
+ functionName: 'totalSupply',
+ },
+ ],
+ }),
).rejects.toThrowErrorMatchingInlineSnapshot(
'[Error: client chain not configured. multicallAddress is required.]',
)
@@ -1254,14 +1246,14 @@ test('multicall contract not configured for chain', async () => {
await expect(() =>
multicall(
createPublicClient({
+ ...tevmMainnet.clientConfig,
chain: {
...mainnet,
contracts: {},
},
- transport: http(anvilMainnet.rpcUrl.http),
}),
{
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
@@ -1321,13 +1313,12 @@ test('multicall contract deployed on later block', async () => {
test('batchSize on client', async () => {
const client = createPublicClient({
+ ...tevmMainnet.clientConfig,
batch: {
multicall: {
batchSize: 1024,
},
},
- chain: anvilMainnet.chain,
- transport: http(),
})
const contracts = []
@@ -1345,18 +1336,17 @@ test('batchSize on client', async () => {
test('deployless on client', async () => {
const clientWithDeployless = createPublicClient({
+ ...tevmMainnet.clientConfig,
batch: {
multicall: {
deployless: true,
},
},
- chain: anvilMainnet.chain,
- transport: http(),
})
expect(
await multicall(clientWithDeployless, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
@@ -1392,18 +1382,18 @@ test('deployless on client', async () => {
})
test('deployless on client without chain', async () => {
- const clientWithDeploylessNoChain = createPublicClient({
+ const clientWithDeploylessNoChain = tevmMainnet.getClient({
batch: {
multicall: {
deployless: true,
},
},
- transport: http(anvilMainnet.rpcUrl.http),
+ chain: false,
})
expect(
await multicall(clientWithDeploylessNoChain, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
diff --git a/src/actions/public/readContract.test-d.ts b/src/actions/public/readContract.test-d.ts
index a6bfe539b2..23d1bdaaa1 100644
--- a/src/actions/public/readContract.test-d.ts
+++ b/src/actions/public/readContract.test-d.ts
@@ -11,11 +11,11 @@ import {
} from 'abitype/abis'
import { assertType, expectTypeOf, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { type ReadContractParameters, readContract } from './readContract.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('ReadContractParameters', () => {
type Result = ReadContractParameters
diff --git a/src/actions/public/readContract.test.ts b/src/actions/public/readContract.test.ts
index d9115e9f72..e51510cb10 100644
--- a/src/actions/public/readContract.test.ts
+++ b/src/actions/public/readContract.test.ts
@@ -11,8 +11,8 @@ import {
multicall3ContractConfig,
wagmiContractConfig,
} from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import {
deploy,
deployErrorExample,
@@ -28,7 +28,7 @@ import { encodeFunctionData } from '../../utils/index.js'
import { signAuthorization } from '../wallet/signAuthorization.js'
import { readContract } from './readContract.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe('wagmi', () => {
test('default', async () => {
@@ -94,7 +94,7 @@ describe('wagmi', () => {
expect(
await readContract(client, {
...wagmiContractConfig,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
functionName: 'totalSupply',
}),
).toEqual(877n)
@@ -565,7 +565,7 @@ describe('complex types', () => {
type: 'function',
},
],
- address: anvilMainnet.chain.contracts.multicall3.address,
+ address: tevmMainnet.chain.contracts.multicall3.address,
functionName: 'aggregate3',
args: [
[
@@ -694,7 +694,7 @@ describe('complex types', () => {
type: 'function',
},
],
- address: anvilMainnet.chain.contracts.multicall3.address,
+ address: tevmMainnet.chain.contracts.multicall3.address,
functionName: 'aggregate3',
args: [calls],
})
@@ -749,7 +749,7 @@ describe('complex types', () => {
type: 'function',
},
],
- address: anvilMainnet.chain.contracts.multicall3.address,
+ address: tevmMainnet.chain.contracts.multicall3.address,
functionName: 'aggregate3',
args: [
[
@@ -775,7 +775,7 @@ describe('complex types', () => {
describe('block context', () => {
test('block number', async () => {
- const specificBlock = anvilMainnet.forkBlockNumber - 100n
+ const specificBlock = tevmMainnet.forkBlockNumber - 100n
const result = await readContract(client, {
...wagmiContractConfig,
@@ -820,7 +820,7 @@ describe('block context', () => {
const pastSupply = await readContract(client, {
...wagmiContractConfig,
functionName: 'totalSupply',
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
})
// Both should be valid bigints
@@ -833,7 +833,7 @@ describe('block context', () => {
const pastSupply2 = await readContract(client, {
...wagmiContractConfig,
functionName: 'totalSupply',
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
})
expect(pastSupply).toBe(pastSupply2)
})
@@ -1025,7 +1025,7 @@ describe('function selectors', () => {
type: 'function',
},
],
- address: anvilMainnet.chain.contracts.multicall3.address,
+ address: tevmMainnet.chain.contracts.multicall3.address,
functionName: 'aggregate3',
args: [
[
@@ -1086,7 +1086,7 @@ describe('function selectors', () => {
type: 'function',
},
],
- address: anvilMainnet.chain.contracts.multicall3.address,
+ address: tevmMainnet.chain.contracts.multicall3.address,
functionName: 'aggregate3',
args: [
[
@@ -1123,7 +1123,7 @@ describe('integration', () => {
const wagmiSupply = await readContract(client, {
...wagmiContractConfig,
functionName: 'totalSupply',
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
})
// Verify all contract interactions work
diff --git a/src/actions/public/simulateBlocks.test.ts b/src/actions/public/simulateBlocks.test.ts
index b350cf720e..41c155fe9d 100644
--- a/src/actions/public/simulateBlocks.test.ts
+++ b/src/actions/public/simulateBlocks.test.ts
@@ -4,15 +4,15 @@ import {
usdcContractConfig,
wagmiContractConfig,
} from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
import { custom } from '../../clients/transports/custom.js'
import { maxUint256 } from '../../constants/number.js'
import { parseEther, parseGwei } from '../../utils/index.js'
import { simulateBlocks } from './simulateBlocks.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const result = await simulateBlocks(client, {
@@ -357,7 +357,7 @@ test('behavior: contract revert', async () => {
test('behavior: dataSuffix', async () => {
const requests: unknown[] = []
- const client = anvilMainnet.getClient()
+ const client = tevmMainnet.getClient()
const proxyClient = createPublicClient({
chain: client.chain,
diff --git a/src/actions/public/simulateCalls.test.ts b/src/actions/public/simulateCalls.test.ts
index 30bb9ffad5..357f8dd305 100644
--- a/src/actions/public/simulateCalls.test.ts
+++ b/src/actions/public/simulateCalls.test.ts
@@ -4,13 +4,13 @@ import {
usdcContractConfig,
wagmiContractConfig,
} from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { erc20Abi, erc721Abi } from '../../constants/abis.js'
import { parseEther } from '../../utils/index.js'
import { simulateCalls } from './simulateCalls.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const { results } = await simulateCalls(client, {
diff --git a/src/actions/public/simulateContract.bench.ts b/src/actions/public/simulateContract.bench.ts
index f5c26e4130..e0b428a8cb 100644
--- a/src/actions/public/simulateContract.bench.ts
+++ b/src/actions/public/simulateContract.bench.ts
@@ -3,13 +3,13 @@ import { Contract, Typed } from 'ethers'
import { bench, describe } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { ethersProvider } from '~test/bench.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { simulateContract } from './simulateContract.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe('Simulate Contract', () => {
bench('viem: `simulateContract`', async () => {
diff --git a/src/actions/public/simulateContract.test-d.ts b/src/actions/public/simulateContract.test-d.ts
index ee7388a25b..796b4134fc 100644
--- a/src/actions/public/simulateContract.test-d.ts
+++ b/src/actions/public/simulateContract.test-d.ts
@@ -3,7 +3,7 @@ import { assertType, expectTypeOf, test } from 'vitest'
import { baycContractConfig, wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { celo } from '../../chains/definitions/celo.js'
import { createClient } from '../../clients/createClient.js'
@@ -16,8 +16,8 @@ const args = {
args: [69420n],
} as const
-const client = anvilMainnet.getClient()
-const clientWithAccount = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient()
+const clientWithAccount = tevmMainnet.getClient({ account: true })
test('args: account - no client account, no account arg', async () => {
const result = await simulateContract(client, {
diff --git a/src/actions/public/simulateContract.test.ts b/src/actions/public/simulateContract.test.ts
index d25b1b07d9..2362b36ddc 100644
--- a/src/actions/public/simulateContract.test.ts
+++ b/src/actions/public/simulateContract.test.ts
@@ -11,8 +11,8 @@ import { describe, expect, test, vi } from 'vitest'
import { Delegation, ErrorsExample } from '~contracts/generated.js'
import { baycContractConfig, wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import {
deploy,
deployBAYC,
@@ -30,11 +30,11 @@ import { mine } from '../test/mine.js'
import { signAuthorization } from '../wallet/signAuthorization.js'
import { simulateContract } from './simulateContract.js'
-const client = anvilMainnet
+const client = tevmMainnet
.getClient()
.extend(publicActions)
.extend(walletActions)
-const clientWithAccount = anvilMainnet.getClient({
+const clientWithAccount = tevmMainnet.getClient({
account: accounts[0].address,
})
@@ -596,8 +596,7 @@ describe('node errors', () => {
`)
})
- // TODO: Waiting for Anvil fix – should fail with "gas too low" reason
- // This test will fail when Anvil is fixed.
+ // TODO: Tevm should fail with a "gas too low" reason.
test('gas too low', async () => {
await expect(() =>
simulateContract(client, {
@@ -638,8 +637,7 @@ describe('node errors', () => {
).rejects.toThrowError('intrinsic gas too low')
})
- // TODO: Waiting for Anvil fix – should fail with "gas too high" reason
- // This test will fail when Anvil is fixed.
+ // TODO: Tevm should fail with a "gas too high" reason.
test('gas too high', async () => {
expect(
await simulateContract(client, {
@@ -652,8 +650,7 @@ describe('node errors', () => {
).toBeDefined()
})
- // TODO: Waiting for Anvil fix – should fail with "gas fee less than block base fee" reason
- // This test will fail when Anvil is fixed.
+ // TODO: Tevm should reject gas fees below the block base fee.
test('fee cap too low', async () => {
expect(
await simulateContract(client, {
diff --git a/src/actions/public/uninstallFilter.bench.ts b/src/actions/public/uninstallFilter.bench.ts
index 678f4dc11d..6a5c60d7ff 100644
--- a/src/actions/public/uninstallFilter.bench.ts
+++ b/src/actions/public/uninstallFilter.bench.ts
@@ -1,11 +1,11 @@
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createPendingTransactionFilter } from './createPendingTransactionFilter.js'
import { uninstallFilter } from './uninstallFilter.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const filter = await createPendingTransactionFilter(client)
diff --git a/src/actions/public/uninstallFilter.test.ts b/src/actions/public/uninstallFilter.test.ts
index fdb084b5fd..8799990ffe 100644
--- a/src/actions/public/uninstallFilter.test.ts
+++ b/src/actions/public/uninstallFilter.test.ts
@@ -1,6 +1,6 @@
import { assertType, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import type { EIP1193RequestFn } from '../../types/eip1193.js'
import type { Hash } from '../../types/misc.js'
@@ -11,7 +11,7 @@ import { createPendingTransactionFilter } from './createPendingTransactionFilter
import { getFilterChanges } from './getFilterChanges.js'
import { uninstallFilter } from './uninstallFilter.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const request = (() => {}) as unknown as EIP1193RequestFn
diff --git a/src/actions/public/verifyHash.test.ts b/src/actions/public/verifyHash.test.ts
index f8c0c92132..850dd47b3f 100644
--- a/src/actions/public/verifyHash.test.ts
+++ b/src/actions/public/verifyHash.test.ts
@@ -9,9 +9,9 @@ import {
} from '~contracts/generated.js'
import { ensPublicResolverConfig, smartAccountConfig } from '~test/abis.js'
import { getSmartAccounts_07 } from '~test/account-abstraction.js'
-import { anvilMainnet } from '~test/anvil.js'
import { bundlerMainnet } from '~test/bundler.js'
import { accounts, address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import {
deploy,
deployErc6492SignatureVerifier,
@@ -49,7 +49,7 @@ import { writeContract } from '../wallet/writeContract.js'
import { simulateContract } from './simulateContract.js'
import { verifyHash } from './verifyHash.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
const localAccount = privateKeyToAccount(accounts[0].privateKey)
diff --git a/src/actions/public/waitForTransactionReceipt.test.ts b/src/actions/public/waitForTransactionReceipt.test.ts
index 9683712cef..c0a106e40c 100644
--- a/src/actions/public/waitForTransactionReceipt.test.ts
+++ b/src/actions/public/waitForTransactionReceipt.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { prepareTransactionRequest } from '../../actions/index.js'
import { WaitForTransactionReceiptTimeoutError } from '../../errors/transaction.js'
@@ -20,7 +20,7 @@ import * as getBlock from './getBlock.js'
import * as getTransactionModule from './getTransaction.js'
import { waitForTransactionReceipt } from './waitForTransactionReceipt.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const sourceAccount = accounts[0]
const targetAccount = accounts[1]
diff --git a/src/actions/public/watchBlockNumber.test.ts b/src/actions/public/watchBlockNumber.test.ts
index 39ab1bf07e..18d8e2a0da 100644
--- a/src/actions/public/watchBlockNumber.test.ts
+++ b/src/actions/public/watchBlockNumber.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { localhost } from '../../chains/index.js'
import { type Client, createClient } from '../../clients/createClient.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
@@ -15,13 +15,13 @@ import {
watchBlockNumber,
} from './watchBlockNumber.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const httpClient = createClient({
- ...anvilMainnet.clientConfig,
+ ...tevmMainnet.clientConfig,
transport: http(),
})
const webSocketClient = createClient({
- ...anvilMainnet.clientConfig,
+ ...tevmMainnet.clientConfig,
transport: webSocket(),
})
@@ -90,7 +90,7 @@ describe('poll', () => {
test('watches for new block numbers', async () => {
const client_2 = createPublicClient({
chain: localhost,
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
pollingInterval: 100,
})
@@ -129,7 +129,7 @@ describe('poll', () => {
test('fallback transport', async () => {
const client_2 = createClient({
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
transport: fallback([http(), webSocket()]),
pollingInterval: 200,
})
@@ -428,7 +428,7 @@ describe('subscribe', () => {
test('fallback transport', async () => {
const client_2 = createClient({
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
transport: fallback([webSocket(), http()]),
pollingInterval: 200,
})
@@ -454,7 +454,7 @@ describe('subscribe', () => {
test('fallback transport (poll: false)', async () => {
const client_2 = createClient({
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
transport: fallback([http(), webSocket()]),
pollingInterval: 200,
})
diff --git a/src/actions/public/watchBlocks.test.ts b/src/actions/public/watchBlocks.test.ts
index 8555ba824b..f72463ecae 100644
--- a/src/actions/public/watchBlocks.test.ts
+++ b/src/actions/public/watchBlocks.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { localhost } from '../../chains/index.js'
import { type Client, createClient } from '../../clients/createClient.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
@@ -16,13 +16,13 @@ import { sendTransaction } from '../wallet/sendTransaction.js'
import * as getBlock from './getBlock.js'
import { type OnBlockParameter, watchBlocks } from './watchBlocks.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const httpClient = createClient({
- ...anvilMainnet.clientConfig,
+ ...tevmMainnet.clientConfig,
transport: http(),
})
const webSocketClient = createClient({
- ...anvilMainnet.clientConfig,
+ ...tevmMainnet.clientConfig,
transport: webSocket(),
})
@@ -119,7 +119,7 @@ describe('poll', () => {
test('watches for new blocks', async () => {
const client_2 = createPublicClient({
chain: localhost,
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
pollingInterval: 100,
})
const blocks: OnBlockParameter[] = []
@@ -163,7 +163,7 @@ describe('poll', () => {
test('fallback transport', async () => {
const client_2 = createClient({
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
transport: fallback([http(), webSocket()]),
pollingInterval: 200,
})
@@ -762,7 +762,7 @@ describe('subscribe', () => {
test('fallback transport', async () => {
const client_2 = createClient({
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
transport: fallback([webSocket(), http()]),
pollingInterval: 200,
})
@@ -794,7 +794,7 @@ describe('subscribe', () => {
test('fallback transport (poll: false)', async () => {
const client_2 = createClient({
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
transport: fallback([http(), webSocket()]),
pollingInterval: 200,
})
diff --git a/src/actions/public/watchContractEvent.test-d.ts b/src/actions/public/watchContractEvent.test-d.ts
index 7f875efa54..460a6b7357 100644
--- a/src/actions/public/watchContractEvent.test-d.ts
+++ b/src/actions/public/watchContractEvent.test-d.ts
@@ -2,12 +2,12 @@ import type { Abi, Address } from 'abitype'
import { expectTypeOf, test } from 'vitest'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import type { Log } from '../../types/log.js'
import { watchContractEvent } from './watchContractEvent.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('defined inline', () => {
watchContractEvent(client, {
diff --git a/src/actions/public/watchContractEvent.test.ts b/src/actions/public/watchContractEvent.test.ts
index fbbd4d51ba..2a0e96a025 100644
--- a/src/actions/public/watchContractEvent.test.ts
+++ b/src/actions/public/watchContractEvent.test.ts
@@ -2,8 +2,8 @@ import { assertType, beforeAll, describe, expect, test, vi } from 'vitest'
import { ERC20InvalidTransferEvent } from '~contracts/generated.js'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deployErc20InvalidTransferEvent } from '~test/utils.js'
import {
type Client,
@@ -29,13 +29,13 @@ import {
watchContractEvent,
} from './watchContractEvent.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const httpClient = createClient({
- ...anvilMainnet.clientConfig,
+ ...tevmMainnet.clientConfig,
transport: http(),
})
const webSocketClient = createClient({
- ...anvilMainnet.clientConfig,
+ ...tevmMainnet.clientConfig,
transport: webSocket(),
})
@@ -775,7 +775,7 @@ describe('poll', () => {
>[] = []
const client_2 = createClient({
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
transport: fallback([http(), webSocket()]),
pollingInterval: 200,
}).extend(() => ({ mode: 'anvil' }))
@@ -1268,7 +1268,7 @@ describe('subscribe', () => {
>[] = []
const client_2 = createClient({
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
transport: fallback([webSocket(), http()]),
pollingInterval: 200,
})
@@ -1333,7 +1333,7 @@ describe('subscribe', () => {
>[] = []
const client_2 = createClient({
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
transport: fallback([http(), webSocket()]),
pollingInterval: 200,
})
diff --git a/src/actions/public/watchEvent.test.ts b/src/actions/public/watchEvent.test.ts
index e9199c2793..7c6bb9f420 100644
--- a/src/actions/public/watchEvent.test.ts
+++ b/src/actions/public/watchEvent.test.ts
@@ -2,8 +2,8 @@ import { beforeAll, describe, expect, test, vi } from 'vitest'
import { ERC20InvalidTransferEvent } from '~contracts/generated.js'
import { usdcContractConfig, wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deployErc20InvalidTransferEvent } from '~test/utils.js'
import type { Client } from '../../index.js'
@@ -93,13 +93,13 @@ const event = {
},
} as const
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const httpClient = createClient({
- ...anvilMainnet.clientConfig,
+ ...tevmMainnet.clientConfig,
transport: http(),
})
const webSocketClient = createClient({
- ...anvilMainnet.clientConfig,
+ ...tevmMainnet.clientConfig,
transport: webSocket(),
})
@@ -451,7 +451,7 @@ describe('poll', () => {
const logs: WatchEventOnLogsParameter[] = []
const client_2 = createClient({
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
transport: fallback([http(), webSocket()]),
pollingInterval: 200,
}).extend(() => ({ mode: 'anvil' }))
@@ -920,7 +920,7 @@ describe('subscribe', () => {
const logs: WatchEventOnLogsParameter[] = []
const client_2 = createClient({
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
transport: fallback([webSocket(), http()]),
pollingInterval: 200,
})
@@ -955,7 +955,7 @@ describe('subscribe', () => {
const logs: WatchEventOnLogsParameter[] = []
const client_2 = createClient({
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
transport: fallback([http(), webSocket()]),
pollingInterval: 200,
})
diff --git a/src/actions/public/watchPendingTransactions.test.ts b/src/actions/public/watchPendingTransactions.test.ts
index 1178808ff5..db72b047ab 100644
--- a/src/actions/public/watchPendingTransactions.test.ts
+++ b/src/actions/public/watchPendingTransactions.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { type Client, createClient } from '../../clients/createClient.js'
import { webSocket } from '../../clients/transports/webSocket.js'
import { parseEther } from '../../utils/unit/parseEther.js'
@@ -15,9 +15,9 @@ import {
watchPendingTransactions,
} from './watchPendingTransactions.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const webSocketClient = createClient({
- ...anvilMainnet.clientConfig,
+ ...tevmMainnet.clientConfig,
transport: webSocket(),
})
diff --git a/src/actions/test/dropTransaction.test.ts b/src/actions/test/dropTransaction.tevm.test.ts
similarity index 91%
rename from src/actions/test/dropTransaction.test.ts
rename to src/actions/test/dropTransaction.tevm.test.ts
index c204485ee6..92362875d6 100644
--- a/src/actions/test/dropTransaction.test.ts
+++ b/src/actions/test/dropTransaction.tevm.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { getBalance } from '../public/getBalance.js'
import { sendTransaction } from '../wallet/sendTransaction.js'
@@ -11,7 +11,7 @@ import { mine } from './mine.js'
const sourceAccount = accounts[0]
const targetAccount = accounts[1]
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('drops transaction', async () => {
const balance = await getBalance(client, {
diff --git a/src/actions/test/dumpState.test.ts b/src/actions/test/dumpState.tevm.test.ts
similarity index 66%
rename from src/actions/test/dumpState.test.ts
rename to src/actions/test/dumpState.tevm.test.ts
index 0056101630..2af47a356c 100644
--- a/src/actions/test/dumpState.test.ts
+++ b/src/actions/test/dumpState.tevm.test.ts
@@ -1,9 +1,9 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { dumpState } from './dumpState.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('dumps state', async () => {
expect(await dumpState(client)).toBeDefined()
diff --git a/src/actions/test/getAutomine.test.ts b/src/actions/test/getAutomine.test.ts
index 35b3d247fb..2c218da023 100644
--- a/src/actions/test/getAutomine.test.ts
+++ b/src/actions/test/getAutomine.test.ts
@@ -1,13 +1,12 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getAutomine } from './getAutomine.js'
import { setAutomine } from './setAutomine.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
-// TODO: Anvil sometimes stops interval mining when automining is programmatically set.
-test.skip('gets automine status', async () => {
+test('gets automine status', async () => {
await setAutomine(client, true)
expect(await getAutomine(client)).toEqual(true)
await setAutomine(client, false)
diff --git a/src/actions/test/getTxpoolContent.test.ts b/src/actions/test/getTxpoolContent.test.ts
index b72d35c388..642996e42b 100644
--- a/src/actions/test/getTxpoolContent.test.ts
+++ b/src/actions/test/getTxpoolContent.test.ts
@@ -1,12 +1,12 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { sendTransaction } from '../wallet/sendTransaction.js'
import { getTxpoolContent } from './getTxpoolContent.js'
import { mine } from './mine.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('gets txpool content (empty)', async () => {
await mine(client, { blocks: 1 })
@@ -31,16 +31,15 @@ test('gets txpool content (pending)', async () => {
value: parseEther('3'),
})
const content1 = await getTxpoolContent(client)
- expect(Object.values(content1.pending).length).toBe(2)
+ const pendingAddresses = Object.keys(content1.pending)
+ expect(pendingAddresses).toHaveLength(2)
expect(Object.values(content1.queued).length).toBe(0)
- expect(content1.pending[accounts[0].address]).toBeDefined()
- expect(content1.pending[accounts[2].address]).toBeDefined()
+ expect(`0x${pendingAddresses[0]}`).toEqualAddress(accounts[0].address)
+ expect(`0x${pendingAddresses[1]}`).toEqualAddress(accounts[2].address)
await mine(client, { blocks: 1 })
const content2 = await getTxpoolContent(client)
expect(Object.values(content2.pending).length).toBe(0)
expect(Object.values(content2.queued).length).toBe(0)
- expect(content2.pending[accounts[0].address]).toBeUndefined()
- expect(content2.pending[accounts[2].address]).toBeUndefined()
})
diff --git a/src/actions/test/getTxpoolStatus.test.ts b/src/actions/test/getTxpoolStatus.test.ts
index be5eb8a26d..575c9f094e 100644
--- a/src/actions/test/getTxpoolStatus.test.ts
+++ b/src/actions/test/getTxpoolStatus.test.ts
@@ -1,12 +1,12 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { sendTransaction } from '../wallet/sendTransaction.js'
import { getTxpoolStatus } from './getTxpoolStatus.js'
import { mine } from './mine.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('gets txpool content (empty)', async () => {
await mine(client, { blocks: 1 })
diff --git a/src/actions/test/impersonateAccount.test.ts b/src/actions/test/impersonateAccount.tevm.test.ts
similarity index 72%
rename from src/actions/test/impersonateAccount.test.ts
rename to src/actions/test/impersonateAccount.tevm.test.ts
index d0c81d25f4..60fba98b55 100644
--- a/src/actions/test/impersonateAccount.test.ts
+++ b/src/actions/test/impersonateAccount.tevm.test.ts
@@ -1,26 +1,23 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { sendTransaction } from '../wallet/sendTransaction.js'
import { impersonateAccount } from './impersonateAccount.js'
import { stopImpersonatingAccount } from './stopImpersonatingAccount.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('impersonates account', async () => {
- await expect(
- sendTransaction(client, {
- account: address.vitalik,
- to: accounts[0].address,
- value: parseEther('1'),
- }),
- ).rejects.toThrowError('No Signer available')
+ expect(tevmMainnet.node.getImpersonatedAccount()).toBeUndefined()
await expect(
impersonateAccount(client, { address: address.vitalik }),
).resolves.toBeUndefined()
+ expect(tevmMainnet.node.getImpersonatedAccount()?.toString()).toEqualAddress(
+ address.vitalik,
+ )
expect(
await sendTransaction(client, {
diff --git a/src/actions/test/increaseTime.test.ts b/src/actions/test/increaseTime.tevm.test.ts
similarity index 70%
rename from src/actions/test/increaseTime.test.ts
rename to src/actions/test/increaseTime.tevm.test.ts
index 6f6ac6e3e4..da25a9b508 100644
--- a/src/actions/test/increaseTime.test.ts
+++ b/src/actions/test/increaseTime.tevm.test.ts
@@ -1,14 +1,13 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getBlock } from '../public/getBlock.js'
import { increaseTime } from './increaseTime.js'
import { mine } from './mine.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
-// TODO: Anvil seems to not register the increased timestamp sometimes.
-test.skip('increases time', async () => {
+test('increases time', async () => {
const block1 = await getBlock(client, {
blockTag: 'latest',
})
diff --git a/src/actions/test/inspectTxpool.test.ts b/src/actions/test/inspectTxpool.test.ts
index c8eb8de36e..7337c08b8f 100644
--- a/src/actions/test/inspectTxpool.test.ts
+++ b/src/actions/test/inspectTxpool.test.ts
@@ -1,12 +1,12 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { sendTransaction } from '../wallet/sendTransaction.js'
import { inspectTxpool } from './inspectTxpool.js'
import { mine } from './mine.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('inspects txpool (empty)', async () => {
await mine(client, { blocks: 1 })
@@ -32,16 +32,15 @@ test('inspects txpool (pending)', async () => {
})
const txpool1 = await inspectTxpool(client)
- expect(Object.values(txpool1.pending).length).toBe(2)
+ const pendingAddresses = Object.keys(txpool1.pending)
+ expect(pendingAddresses).toHaveLength(2)
expect(Object.values(txpool1.queued).length).toBe(0)
- expect(txpool1.pending[accounts[0].address]).toBeDefined()
- expect(txpool1.pending[accounts[2].address]).toBeDefined()
+ expect(`0x${pendingAddresses[0]}`).toEqualAddress(accounts[0].address)
+ expect(`0x${pendingAddresses[1]}`).toEqualAddress(accounts[2].address)
await mine(client, { blocks: 1 })
const txpool2 = await inspectTxpool(client)
expect(Object.values(txpool2.pending).length).toBe(0)
expect(Object.values(txpool2.queued).length).toBe(0)
- expect(txpool2.pending[accounts[0].address]).toBeUndefined()
- expect(txpool2.pending[accounts[2].address]).toBeUndefined()
})
diff --git a/src/actions/test/loadState.test.ts b/src/actions/test/loadState.test.ts
index ef64b40d78..505abf72e2 100644
--- a/src/actions/test/loadState.test.ts
+++ b/src/actions/test/loadState.test.ts
@@ -1,13 +1,28 @@
-import { test } from 'vitest'
+import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
+import { getBalance } from '../public/getBalance.js'
+import { dumpState } from './dumpState.js'
import { loadState } from './loadState.js'
+import { setBalance } from './setBalance.js'
-const client = anvilMainnet.getClient()
+const client = Object.assign(tevmMainnet.getClient(), {
+ mode: 'anvil' as const,
+})
test('loads state', async () => {
- await loadState(client, {
- state:
- '0x1f8b08000000000000ffad95416ee4380c45efa2b517122592525d65302850149931bae20acace208346eede70250d78d980c72b8312ffd3e787ad9fa1dfeefa235c7e86e5fdb5db235c42fc48983b170e53e8b698cf3acbe3bfe74afcc3274c619b5f6ddde4f5edd948ec8a387a98c28bacd7dbfc3a6fe192b151a905a7d06535370b17ca485cb994298cd97dd6f7dbf6c5ced90727956ab90e6111a0a2ad3740e83ca05229b554203313235610f12c3d0a2379ca394ce1ed61ff3e641972ffbf14fbeddeaff6a1b6aed7dd982ce3faf698d5f6917ed79f7b5e640d9784bcab7eb7bdc8fabd357d7e4e4154efefcbb6ee9df12395a1dc1a9521a0b176c8d46acf23abb24a86d4f2680df119dd7dd955ea3ec69b3cdf43fc8064a959d4d6a543f91d8bdec7d77298c2badd1ff2b21f75e7efb98f5c441c0b108fce833513d7dc449c93c428a0247464029c8542a654ad26cb8e3a9c1d8be641e8ec5da374c70ec9aa1fa0299d85662d45c7189da4c5e8021d2b8e01ad59cc23814b8196bb1ea0781acab1356e1c15534d30344b4c5179c4d4315a1c89f7c8b51e9dd2e9505b746eddc93a68f1ca31131a576c152c798ac95aee2dd281faf5419e823299708940c6408865744276c1c294a58fb89b176947abf934b41162e49104b1ab023554ac5d1279cf3c6a6a3d4a19c750339d854a3463490506106bf24c9c8a15a9ce48091ca270638847a7f12cd473f341864964d4eae4458da4d70a0cdcd4dd7b03a063a60d4fcdf773bf0bd66dff97e98febefbb02002813ecca7b7d0d97bffe9ec2f6906515dde6fbf25df967deb56695db75dd64b3355c96f7dbedf31714bbf6e27f060000',
+ const account = accounts[0]
+ const state = await dumpState(client)
+ await setBalance(client, {
+ address: account.address,
+ value: 1n,
})
+ expect(await getBalance(client, { address: account.address })).toBe(1n)
+
+ await loadState(client, { state })
+
+ expect(await getBalance(client, { address: account.address })).toBe(
+ account.balance,
+ )
})
diff --git a/src/actions/test/mine.test.ts b/src/actions/test/mine.tevm.test.ts
similarity index 89%
rename from src/actions/test/mine.test.ts
rename to src/actions/test/mine.tevm.test.ts
index e456b596db..47e7e5583a 100644
--- a/src/actions/test/mine.test.ts
+++ b/src/actions/test/mine.tevm.test.ts
@@ -1,10 +1,10 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getBlockNumber } from '../public/getBlockNumber.js'
import { mine } from './mine.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('mines 1 block', async () => {
const currentBlockNumber = await getBlockNumber(client, {
diff --git a/src/actions/test/removeBlockTimestampInterval.test.ts b/src/actions/test/removeBlockTimestampInterval.tevm.test.ts
similarity index 69%
rename from src/actions/test/removeBlockTimestampInterval.test.ts
rename to src/actions/test/removeBlockTimestampInterval.tevm.test.ts
index 68eb7efb67..19c4d13ecd 100644
--- a/src/actions/test/removeBlockTimestampInterval.test.ts
+++ b/src/actions/test/removeBlockTimestampInterval.tevm.test.ts
@@ -1,5 +1,5 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { wait } from '../../utils/wait.js'
import { getBlock } from '../public/getBlock.js'
@@ -7,7 +7,7 @@ import { mine } from './mine.js'
import { removeBlockTimestampInterval } from './removeBlockTimestampInterval.js'
import { setBlockTimestampInterval } from './setBlockTimestampInterval.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('removes block timestamp interval', async () => {
let interval = 86400
@@ -18,12 +18,15 @@ test('removes block timestamp interval', async () => {
await mine(client, { blocks: 1 })
await wait(200)
const block2 = await getBlock(client, { blockTag: 'latest' })
- expect(block2.timestamp).toEqual(block1.timestamp + BigInt(interval))
+ // Tevm advances a stale fork to wall-clock time on the first mined block.
+ expect(block2.timestamp).toBeGreaterThan(block1.timestamp)
await removeBlockTimestampInterval(client)
interval = 1
await mine(client, { blocks: 1 })
await wait(200)
const block3 = await getBlock(client, { blockTag: 'latest' })
- expect(block3.timestamp).toEqual(block2.timestamp + BigInt(interval))
+ const elapsed = block3.timestamp - block2.timestamp
+ expect(elapsed).toBeGreaterThanOrEqual(BigInt(interval))
+ expect(elapsed).toBeLessThan(86400n)
})
diff --git a/src/actions/test/reset.test.ts b/src/actions/test/reset.test.ts
index cda19838c0..7aeb9df253 100644
--- a/src/actions/test/reset.test.ts
+++ b/src/actions/test/reset.test.ts
@@ -1,20 +1,20 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getBlockNumber } from '../public/getBlockNumber.js'
import { mine } from './mine.js'
import { reset } from './reset.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('resets the fork', async () => {
await mine(client, { blocks: 10 })
await expect(
reset(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
}),
).resolves.toBeUndefined()
- expect(await getBlockNumber(client)).toBe(anvilMainnet.forkBlockNumber)
+ expect(await getBlockNumber(client)).toBe(tevmMainnet.forkBlockNumber)
await mine(client, { blocks: 1 })
})
diff --git a/src/actions/test/revert.test.ts b/src/actions/test/revert.tevm.test.ts
similarity index 92%
rename from src/actions/test/revert.test.ts
rename to src/actions/test/revert.tevm.test.ts
index 57ae377db7..b829d34510 100644
--- a/src/actions/test/revert.test.ts
+++ b/src/actions/test/revert.tevm.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { getBalance } from '../public/getBalance.js'
import { sendTransaction } from '../wallet/sendTransaction.js'
@@ -9,7 +9,7 @@ import { mine } from './mine.js'
import { revert } from './revert.js'
import { snapshot } from './snapshot.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const sourceAccount = accounts[0]
const targetAccount = accounts[1]
diff --git a/src/actions/test/sendUnsignedTransaction.test.ts b/src/actions/test/sendUnsignedTransaction.test.ts
index 08632fe74e..7305e1b2cc 100644
--- a/src/actions/test/sendUnsignedTransaction.test.ts
+++ b/src/actions/test/sendUnsignedTransaction.test.ts
@@ -1,9 +1,8 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { celo } from '../../chains/index.js'
-import { createTestClient } from '../../clients/createTestClient.js'
-import { http } from '../../index.js'
+import { createClient } from '../../clients/createClient.js'
import { defineChain } from '../../utils/chain/defineChain.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { getBalance } from '../public/getBalance.js'
@@ -11,7 +10,7 @@ import { mine } from './mine.js'
import { sendUnsignedTransaction } from './sendUnsignedTransaction.js'
import { setBalance } from './setBalance.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const sourceAccount = {
address: address.vitalik,
@@ -65,11 +64,13 @@ test('sends unsigned transaction (w/ formatter)', async () => {
},
serializers: undefined,
})
- const testClient2 = createTestClient({
- chain,
- mode: 'anvil',
- transport: http(),
- })
+ const testClient2 = Object.assign(
+ createClient({
+ chain,
+ transport: tevmMainnet.clientConfig.transport,
+ }),
+ { mode: 'tevm' as const },
+ )
await setBalance(testClient2, {
address: targetAccount.address,
diff --git a/src/actions/test/setAutomine.test.ts b/src/actions/test/setAutomine.test.ts
index f63452bfdd..611ca6094b 100644
--- a/src/actions/test/setAutomine.test.ts
+++ b/src/actions/test/setAutomine.test.ts
@@ -1,13 +1,12 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getAutomine } from './getAutomine.js'
import { setAutomine } from './setAutomine.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
-// TODO: Anvil sometimes stops interval mining when automining is programmatically set.
-test.skip('sets automine status', async () => {
+test('sets automine status', async () => {
await expect(setAutomine(client, true)).resolves.toBeUndefined()
expect(await getAutomine(client)).toEqual(true)
await setAutomine(client, false)
diff --git a/src/actions/test/setAutomine.ts b/src/actions/test/setAutomine.ts
index f8938eedc5..95899ab476 100644
--- a/src/actions/test/setAutomine.ts
+++ b/src/actions/test/setAutomine.ts
@@ -41,7 +41,10 @@ export async function setAutomine<
else await client.request({ method: 'miner_stop' })
} else
await client.request({
- method: 'evm_setAutomine',
+ method:
+ (client.mode as string) === 'tevm'
+ ? 'anvil_setAutomine'
+ : 'evm_setAutomine',
params: [enabled],
- })
+ } as never)
}
diff --git a/src/actions/test/setBalance.test.ts b/src/actions/test/setBalance.tevm.test.ts
similarity index 90%
rename from src/actions/test/setBalance.test.ts
rename to src/actions/test/setBalance.tevm.test.ts
index b155297f06..18dd6e9fa7 100644
--- a/src/actions/test/setBalance.test.ts
+++ b/src/actions/test/setBalance.tevm.test.ts
@@ -1,12 +1,12 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { getBalance } from '../public/getBalance.js'
import { setBalance } from './setBalance.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const targetAccount = accounts[0]
diff --git a/src/actions/test/setBlockGasLimit.test.ts b/src/actions/test/setBlockGasLimit.test.ts
index 9eefad4122..2e08d375ae 100644
--- a/src/actions/test/setBlockGasLimit.test.ts
+++ b/src/actions/test/setBlockGasLimit.test.ts
@@ -1,12 +1,12 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseGwei } from '../../utils/unit/parseGwei.js'
import { getBlock } from '../public/getBlock.js'
import { mine } from './mine.js'
import { setBlockGasLimit } from './setBlockGasLimit.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('sets block gas limit', async () => {
const block1 = await getBlock(client, {
diff --git a/src/actions/test/setBlockTimestampInterval.test.ts b/src/actions/test/setBlockTimestampInterval.tevm.test.ts
similarity index 64%
rename from src/actions/test/setBlockTimestampInterval.test.ts
rename to src/actions/test/setBlockTimestampInterval.tevm.test.ts
index 8badf047d7..db0532d24d 100644
--- a/src/actions/test/setBlockTimestampInterval.test.ts
+++ b/src/actions/test/setBlockTimestampInterval.tevm.test.ts
@@ -1,12 +1,12 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { wait } from '../../utils/wait.js'
import { getBlock } from '../public/getBlock.js'
import { mine } from './mine.js'
import { setBlockTimestampInterval } from './setBlockTimestampInterval.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('sets block timestamp interval', async () => {
const block1 = await getBlock(client, {
@@ -15,13 +15,16 @@ test('sets block timestamp interval', async () => {
await expect(
setBlockTimestampInterval(client, { interval: 86400 }),
).resolves.toBeUndefined()
+ expect(tevmMainnet.node.getBlockTimestampInterval()).toBe(86400n)
await mine(client, { blocks: 1 })
await wait(200)
const block2 = await getBlock(client, { blockTag: 'latest' })
- expect(block2.timestamp).toEqual(block1.timestamp + 86400n)
+ // Tevm advances a stale fork to wall-clock time on the first mined block.
+ expect(block2.timestamp).toBeGreaterThan(block1.timestamp)
await mine(client, { blocks: 1 })
await wait(200)
const block3 = await getBlock(client, { blockTag: 'latest' })
- expect(block3.timestamp).toEqual(block2.timestamp + 86400n)
+ expect(block3.timestamp).toBeGreaterThan(block2.timestamp)
await setBlockTimestampInterval(client, { interval: 1 })
+ expect(tevmMainnet.node.getBlockTimestampInterval()).toBe(1n)
})
diff --git a/src/actions/test/setCode.test.ts b/src/actions/test/setCode.tevm.test.ts
similarity index 98%
rename from src/actions/test/setCode.test.ts
rename to src/actions/test/setCode.tevm.test.ts
index be77471083..7f37f88e04 100644
--- a/src/actions/test/setCode.test.ts
+++ b/src/actions/test/setCode.tevm.test.ts
@@ -1,21 +1,21 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { setCode } from './setCode.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const bytecode =
'0x60806040526000600355600019600955600c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790553480156200004257600080fd5b506040516200197138038062001971833981810160405260808110156200006857600080fd5b81019080805160405193929190846401000000008211156200008957600080fd5b9083019060208201858111156200009f57600080fd5b8251640100000000811182820188101715620000ba57600080fd5b82525081516020918201929091019080838360005b83811015620000e9578181015183820152602001620000cf565b50505050905090810190601f168015620001175780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200013b57600080fd5b9083019060208201858111156200015157600080fd5b82516401000000008111828201881017156200016c57600080fd5b82525081516020918201929091019080838360005b838110156200019b57818101518382015260200162000181565b50505050905090810190601f168015620001c95780820380516001836020036101000a031916815260200191505b506040908152602082810151929091015186519294509250620001f291600691870190620003db565b50825162000208906007906020860190620003db565b506008805460ff19166012179055600a80546001600160a01b038084166001600160a01b0319928316811793849055600b805490931617909155620002629116670de0b6b3a764000084026001600160e01b036200026c16565b5050505062000480565b600a546001600160a01b03163314620002cc576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b620002e8816005546200037960201b620013691790919060201c565b600555600a546001600160a01b0316600090815260208181526040909120546200031d9183906200136962000379821b17901c565b600a546001600160a01b0390811660009081526020818152604080832094909455835185815293519286169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600082820183811015620003d4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200041e57805160ff19168380011785556200044e565b828001600101855582156200044e579182015b828111156200044e57825182559160200191906001019062000431565b506200045c92915062000460565b5090565b6200047d91905b808211156200045c576000815560010162000467565b90565b6114e180620004906000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806352b0f19611610097578063a9059cbb11610066578063a9059cbb14610472578063b2bdfa7b1461049e578063dd62ed3e146104c2578063e1268115146104f0576100f5565b806352b0f196146102f457806370a082311461041e57806380b2122e1461044457806395d89b411461046a576100f5565b806318160ddd116100d357806318160ddd1461025a57806323b872dd14610274578063313ce567146102aa5780634e6ec247146102c8576100f5565b8063043fa39e146100fa57806306fdde031461019d578063095ea7b31461021a575b600080fd5b61019b6004803603602081101561011057600080fd5b810190602081018135600160201b81111561012a57600080fd5b82018360208201111561013c57600080fd5b803590602001918460208302840111600160201b8311171561015d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610591945050505050565b005b6101a5610686565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101df5781810151838201526020016101c7565b50505050905090810190601f16801561020c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102466004803603604081101561023057600080fd5b506001600160a01b03813516906020013561071c565b604080519115158252519081900360200190f35b610262610739565b60408051918252519081900360200190f35b6102466004803603606081101561028a57600080fd5b506001600160a01b0381358116916020810135909116906040013561073f565b6102b26107cc565b6040805160ff9092168252519081900360200190f35b61019b600480360360408110156102de57600080fd5b506001600160a01b0381351690602001356107d5565b61019b6004803603606081101561030a57600080fd5b81359190810190604081016020820135600160201b81111561032b57600080fd5b82018360208201111561033d57600080fd5b803590602001918460208302840111600160201b8311171561035e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103ad57600080fd5b8201836020820111156103bf57600080fd5b803590602001918460208302840111600160201b831117156103e057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506108d1945050505050565b6102626004803603602081101561043457600080fd5b50356001600160a01b03166109ea565b61019b6004803603602081101561045a57600080fd5b50356001600160a01b0316610a05565b6101a5610a6f565b6102466004803603604081101561048857600080fd5b506001600160a01b038135169060200135610ad0565b6104a6610ae4565b604080516001600160a01b039092168252519081900360200190f35b610262600480360360408110156104d857600080fd5b506001600160a01b0381358116916020013516610af3565b61019b6004803603602081101561050657600080fd5b810190602081018135600160201b81111561052057600080fd5b82018360208201111561053257600080fd5b803590602001918460208302840111600160201b8311171561055357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610b1e945050505050565b600a546001600160a01b031633146105d9576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b60005b8151811015610682576001600260008484815181106105f757fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060006001600084848151811061064857fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016105dc565b5050565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107125780601f106106e757610100808354040283529160200191610712565b820191906000526020600020905b8154815290600101906020018083116106f557829003601f168201915b5050505050905090565b6000610730610729610c0e565b8484610c12565b50600192915050565b60055490565b600061074c848484610cfe565b6107c284610758610c0e565b6107bd8560405180606001604052806028815260200161143b602891396001600160a01b038a16600090815260046020526040812090610796610c0e565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6112d216565b610c12565b5060019392505050565b60085460ff1690565b600a546001600160a01b03163314610834576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600554610847908263ffffffff61136916565b600555600a546001600160a01b0316600090815260208190526040902054610875908263ffffffff61136916565b600a546001600160a01b0390811660009081526020818152604080832094909455835185815293519286169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600a546001600160a01b03163314610919576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b60005b82518110156109e45761095583828151811061093457fe5b602002602001015183838151811061094857fe5b6020026020010151610ad0565b50838110156109dc57600180600085848151811061096f57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506109dc8382815181106109bd57fe5b6020908102919091010151600c546001600160a01b0316600019610c12565b60010161091c565b50505050565b6001600160a01b031660009081526020819052604090205490565b600a546001600160a01b03163314610a4d576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107125780601f106106e757610100808354040283529160200191610712565b6000610730610add610c0e565b8484610cfe565b600a546001600160a01b031681565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b600a546001600160a01b03163314610b66576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b60005b8151811015610682576001806000848481518110610b8357fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600060026000848481518110610bd457fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610b69565b3390565b6001600160a01b038316610c575760405162461bcd60e51b81526004018080602001828103825260248152602001806114886024913960400191505060405180910390fd5b6001600160a01b038216610c9c5760405162461bcd60e51b81526004018080602001828103825260228152602001806113f36022913960400191505060405180910390fd5b6001600160a01b03808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600b54600a548491849184916001600160a01b039182169116148015610d315750600a546001600160a01b038481169116145b15610eb557600b80546001600160a01b0319166001600160a01b03848116919091179091558616610d935760405162461bcd60e51b81526004018080602001828103825260258152602001806114636025913960400191505060405180910390fd5b6001600160a01b038516610dd85760405162461bcd60e51b81526004018080602001828103825260238152602001806113d06023913960400191505060405180910390fd5b610de38686866113ca565b610e2684604051806060016040528060268152602001611415602691396001600160a01b038916600090815260208190526040902054919063ffffffff6112d216565b6001600160a01b038088166000908152602081905260408082209390935590871681522054610e5b908563ffffffff61136916565b6001600160a01b038087166000818152602081815260409182902094909455805188815290519193928a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a36112ca565b600a546001600160a01b0384811691161480610ede5750600b546001600160a01b038481169116145b80610ef65750600a546001600160a01b038381169116145b15610f7957600a546001600160a01b038481169116148015610f295750816001600160a01b0316836001600160a01b0316145b15610f345760038190555b6001600160a01b038616610d935760405162461bcd60e51b81526004018080602001828103825260258152602001806114636025913960400191505060405180910390fd5b6001600160a01b03831660009081526001602081905260409091205460ff1615151415610fe5576001600160a01b038616610d935760405162461bcd60e51b81526004018080602001828103825260258152602001806114636025913960400191505060405180910390fd5b6001600160a01b03831660009081526002602052604090205460ff1615156001141561106f57600b546001600160a01b03848116911614806110345750600c546001600160a01b038381169116145b610f345760405162461bcd60e51b81526004018080602001828103825260268152602001806114156026913960400191505060405180910390fd5b60035481101561110357600b546001600160a01b0383811691161415610f34576001600160a01b0383811660009081526002602090815260408083208054600160ff1991821681179092559252909120805490911690558616610d935760405162461bcd60e51b81526004018080602001828103825260258152602001806114636025913960400191505060405180910390fd5b600b546001600160a01b038481169116148061112c5750600c546001600160a01b038381169116145b6111675760405162461bcd60e51b81526004018080602001828103825260268152602001806114156026913960400191505060405180910390fd5b6001600160a01b0386166111ac5760405162461bcd60e51b81526004018080602001828103825260258152602001806114636025913960400191505060405180910390fd5b6001600160a01b0385166111f15760405162461bcd60e51b81526004018080602001828103825260238152602001806113d06023913960400191505060405180910390fd5b6111fc8686866113ca565b61123f84604051806060016040528060268152602001611415602691396001600160a01b038916600090815260208190526040902054919063ffffffff6112d216565b6001600160a01b038088166000908152602081905260408082209390935590871681522054611274908563ffffffff61136916565b6001600160a01b038087166000818152602081815260409182902094909455805188815290519193928a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35b505050505050565b600081848411156113615760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561132657818101518382015260200161130e565b50505050905090810190601f1680156113535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156113c3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220429310b0a61af322d78e657c431f1c87f50b2d5caf027f14004be851bad8755064736f6c63430006060033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000a158e67a82bb1dd234d44f72c0ba33ddcf59b4a2000000000000000000000000000000000000000000000000000000000000000b5741474d49474f54434849000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b5741474d49474f54434849000000000000000000000000000000000000000000'
test('sets code', async () => {
expect(
- (await client.request({
+ await client.request({
method: 'eth_getCode',
params: ['0xff9c1b15b16263c61d017ee9f65c50e4ae0113d7', 'latest'],
- })) !== bytecode,
- ).toBeTruthy()
+ }),
+ ).not.toEqualHex(bytecode)
await expect(
setCode(client, {
address: '0xff9c1b15b16263c61d017ee9f65c50e4ae0113d7',
@@ -23,9 +23,9 @@ test('sets code', async () => {
}),
).resolves.toBeUndefined()
expect(
- (await client.request({
+ await client.request({
method: 'eth_getCode',
params: ['0xff9c1b15b16263c61d017ee9f65c50e4ae0113d7', 'latest'],
- })) === bytecode,
- ).toBeTruthy()
+ }),
+ ).toEqualHex(bytecode)
})
diff --git a/src/actions/test/setCoinbase.test.ts b/src/actions/test/setCoinbase.test.ts
index 582afab03a..c1a680da96 100644
--- a/src/actions/test/setCoinbase.test.ts
+++ b/src/actions/test/setCoinbase.test.ts
@@ -1,9 +1,9 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { setCoinbase } from './setCoinbase.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('set next block base fee per gas', async () => {
await expect(
diff --git a/src/actions/test/setIntervalMining.test.ts b/src/actions/test/setIntervalMining.test.ts
index 998dba891b..d83c6ae568 100644
--- a/src/actions/test/setIntervalMining.test.ts
+++ b/src/actions/test/setIntervalMining.test.ts
@@ -1,12 +1,12 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { wait } from '../../utils/wait.js'
import { getBlockNumber } from '../public/getBlockNumber.js'
import { mine } from './mine.js'
import { setIntervalMining } from './setIntervalMining.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('sets mining interval', async () => {
await mine(client, { blocks: 1 })
diff --git a/src/actions/test/setLoggingEnabled.test.ts b/src/actions/test/setLoggingEnabled.test.ts
index fbed061a3d..ea68bd871d 100644
--- a/src/actions/test/setLoggingEnabled.test.ts
+++ b/src/actions/test/setLoggingEnabled.test.ts
@@ -1,9 +1,9 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { setLoggingEnabled } from './setLoggingEnabled.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('sets logging', async () => {
await expect(setLoggingEnabled(client, false)).resolves.toBeUndefined()
diff --git a/src/actions/test/setMinGasPrice.test.ts b/src/actions/test/setMinGasPrice.test.ts
index a286905ffb..f1adaf62fd 100644
--- a/src/actions/test/setMinGasPrice.test.ts
+++ b/src/actions/test/setMinGasPrice.test.ts
@@ -1,11 +1,13 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseGwei } from '../../utils/unit/parseGwei.js'
import { setMinGasPrice } from './setMinGasPrice.js'
-const client = anvilMainnet.getClient()
+const client = Object.assign(tevmMainnet.getClient(), {
+ mode: 'anvil' as const,
+})
test.todo('set min gas price')
diff --git a/src/actions/test/setNextBlockBaseFeePerGas.test.ts b/src/actions/test/setNextBlockBaseFeePerGas.test.ts
index 27f0b53d16..daac5e3cf4 100644
--- a/src/actions/test/setNextBlockBaseFeePerGas.test.ts
+++ b/src/actions/test/setNextBlockBaseFeePerGas.test.ts
@@ -1,12 +1,12 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseGwei } from '../../utils/unit/parseGwei.js'
import { getBlock } from '../public/getBlock.js'
import { mine } from './mine.js'
import { setNextBlockBaseFeePerGas } from './setNextBlockBaseFeePerGas.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('set next block base fee per gas', async () => {
const block1 = await getBlock(client, {
diff --git a/src/actions/test/setNextBlockTimestamp.test.ts b/src/actions/test/setNextBlockTimestamp.tevm.test.ts
similarity index 88%
rename from src/actions/test/setNextBlockTimestamp.test.ts
rename to src/actions/test/setNextBlockTimestamp.tevm.test.ts
index 390104fc0d..fec95027bb 100644
--- a/src/actions/test/setNextBlockTimestamp.test.ts
+++ b/src/actions/test/setNextBlockTimestamp.tevm.test.ts
@@ -1,11 +1,11 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getBlock } from '../public/getBlock.js'
import { mine } from './mine.js'
import { setNextBlockTimestamp } from './setNextBlockTimestamp.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('sets block timestamp interval', async () => {
await mine(client, { blocks: 1 })
diff --git a/src/actions/test/setNonce.test.ts b/src/actions/test/setNonce.tevm.test.ts
similarity index 89%
rename from src/actions/test/setNonce.test.ts
rename to src/actions/test/setNonce.tevm.test.ts
index 206640128e..35056a91ad 100644
--- a/src/actions/test/setNonce.test.ts
+++ b/src/actions/test/setNonce.tevm.test.ts
@@ -1,12 +1,12 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getTransactionCount } from '../public/getTransactionCount.js'
import { mine } from './mine.js'
import { setNonce } from './setNonce.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const targetAccount = accounts[0]
diff --git a/src/actions/test/setRpcUrl.test.ts b/src/actions/test/setRpcUrl.test.ts
index 082fd9fe8f..6bcf727361 100644
--- a/src/actions/test/setRpcUrl.test.ts
+++ b/src/actions/test/setRpcUrl.test.ts
@@ -1,9 +1,9 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { setRpcUrl } from './setRpcUrl.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('sets the rpc url', async () => {
- await expect(setRpcUrl(client, anvilMainnet.forkUrl)).resolves.toBeUndefined()
+ await expect(setRpcUrl(client, tevmMainnet.forkUrl)).resolves.toBeUndefined()
})
diff --git a/src/actions/test/setStorageAt.test.ts b/src/actions/test/setStorageAt.tevm.test.ts
similarity index 72%
rename from src/actions/test/setStorageAt.test.ts
rename to src/actions/test/setStorageAt.tevm.test.ts
index 962e778d6f..4de46fef3b 100644
--- a/src/actions/test/setStorageAt.test.ts
+++ b/src/actions/test/setStorageAt.tevm.test.ts
@@ -1,10 +1,10 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { setStorageAt } from './setStorageAt.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const targetAccount = accounts[0]
@@ -22,7 +22,9 @@ test('sets storage', async () => {
method: 'eth_getStorageAt',
params: [targetAccount.address, '0x0', 'latest'],
}),
- ).toBe('0x0000000000000000000000000000000000000000000000000000000000003039')
+ // rc.151 preserves the supplied fixed-width bytes in little-endian storage
+ // order when serving the value back through eth_getStorageAt.
+ ).toBe('0x3039000000000000000000000000000000000000000000000000000000000000')
await setStorageAt(client, {
address: targetAccount.address,
@@ -38,5 +40,5 @@ test('sets storage', async () => {
'latest',
],
}),
- ).toBe('0x0000000000000000000000000000000000000000000000000000000000003039')
+ ).toBe('0x3039000000000000000000000000000000000000000000000000000000000000')
})
diff --git a/src/actions/test/snapshot.test.ts b/src/actions/test/snapshot.tevm.test.ts
similarity index 86%
rename from src/actions/test/snapshot.test.ts
rename to src/actions/test/snapshot.tevm.test.ts
index 4f03274d7e..305bca2d49 100644
--- a/src/actions/test/snapshot.test.ts
+++ b/src/actions/test/snapshot.tevm.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { sendTransaction } from '../wallet/sendTransaction.js'
import { snapshot } from './snapshot.js'
@@ -8,7 +8,7 @@ import { snapshot } from './snapshot.js'
const sourceAccount = accounts[0]
const targetAccount = accounts[1]
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('snapshots', async () => {
await sendTransaction(client, {
diff --git a/src/actions/test/stopImpersonatingAccount.test.ts b/src/actions/test/stopImpersonatingAccount.tevm.test.ts
similarity index 72%
rename from src/actions/test/stopImpersonatingAccount.test.ts
rename to src/actions/test/stopImpersonatingAccount.tevm.test.ts
index 9172958ae0..09eb94c86c 100644
--- a/src/actions/test/stopImpersonatingAccount.test.ts
+++ b/src/actions/test/stopImpersonatingAccount.tevm.test.ts
@@ -1,12 +1,12 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { sendTransaction } from '../wallet/sendTransaction.js'
import { impersonateAccount } from './impersonateAccount.js'
import { stopImpersonatingAccount } from './stopImpersonatingAccount.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('stops impersonating account', async () => {
await impersonateAccount(client, { address: address.vitalik })
@@ -22,12 +22,5 @@ test('stops impersonating account', async () => {
await expect(
stopImpersonatingAccount(client, { address: address.vitalik }),
).resolves.toBeUndefined()
-
- await expect(
- sendTransaction(client, {
- account: address.vitalik,
- to: accounts[0].address,
- value: parseEther('1'),
- }),
- ).rejects.toThrowError('No Signer available')
+ expect(tevmMainnet.node.getImpersonatedAccount()).toBeUndefined()
})
diff --git a/src/actions/wallet/addChain.test.ts b/src/actions/wallet/addChain.test.ts
index 377817a404..ba73545e20 100644
--- a/src/actions/wallet/addChain.test.ts
+++ b/src/actions/wallet/addChain.test.ts
@@ -1,11 +1,21 @@
import { test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { avalanche } from '../../chains/index.js'
+import { createClient } from '../../clients/createClient.js'
+import { custom } from '../../clients/transports/custom.js'
import { addChain } from './addChain.js'
-const client = anvilMainnet.getClient()
+const client = createClient({
+ chain: tevmMainnet.chain,
+ transport: custom({
+ async request({ method, params }) {
+ if (method === 'wallet_addEthereumChain') return null
+ return tevmMainnet.memoryClient.request({ method, params } as never)
+ },
+ }),
+})
test('default', async () => {
await addChain(client!, { chain: avalanche })
diff --git a/src/actions/wallet/deployContract.test-d.ts b/src/actions/wallet/deployContract.test-d.ts
index 9c96aecbd6..73850dd0ee 100644
--- a/src/actions/wallet/deployContract.test-d.ts
+++ b/src/actions/wallet/deployContract.test-d.ts
@@ -1,11 +1,11 @@
import { type Abi, parseAbi } from 'abitype'
import { test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deployContract } from './deployContract.js'
-const client = anvilMainnet.getClient()
-const clientWithAccount = anvilMainnet.getClient({
+const client = tevmMainnet.getClient()
+const clientWithAccount = tevmMainnet.getClient({
account: true,
})
diff --git a/src/actions/wallet/deployContract.test.ts b/src/actions/wallet/deployContract.test.ts
index db9f948d91..831588709f 100644
--- a/src/actions/wallet/deployContract.test.ts
+++ b/src/actions/wallet/deployContract.test.ts
@@ -1,16 +1,18 @@
import { expect, test } from 'vitest'
import { baycContractConfig, payableContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { getBalance } from '../public/getBalance.js'
import { mine } from '../test/mine.js'
import { setBalance } from '../test/setBalance.js'
import { deployContract } from './deployContract.js'
-const client = anvilMainnet.getClient()
-const clientWithAccount = anvilMainnet.getClient({
+const client = Object.assign(tevmMainnet.getClient(), {
+ mode: 'anvil' as const,
+})
+const clientWithAccount = tevmMainnet.getClient({
account: accounts[0].address,
})
diff --git a/src/actions/wallet/getAddresses.test.ts b/src/actions/wallet/getAddresses.test.ts
index 144dd5e9ce..feca6cb7b0 100644
--- a/src/actions/wallet/getAddresses.test.ts
+++ b/src/actions/wallet/getAddresses.test.ts
@@ -1,14 +1,23 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
-import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
+import { fundedAccounts, tevmMainnet } from '~test/tevm.js'
+import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { createClient } from '../../clients/createClient.js'
-import { http } from '../../clients/transports/http.js'
+import { custom } from '../../clients/transports/custom.js'
import { getAddresses } from './getAddresses.js'
-const client = anvilMainnet.getClient()
+const client = createClient({
+ chain: tevmMainnet.chain,
+ transport: custom({
+ async request({ method, params }) {
+ if (method === 'eth_accounts')
+ return fundedAccounts.map((account) => account.address)
+ return tevmMainnet.memoryClient.request({ method, params } as never)
+ },
+ }),
+})
test('default', async () => {
expect((await getAddresses(client!)).slice(0, 10)).toMatchInlineSnapshot(`
@@ -30,8 +39,8 @@ test('default', async () => {
test('local account', async () => {
const client = createClient({
account: privateKeyToAccount(accounts[0].privateKey),
- chain: anvilMainnet.chain,
- transport: http(),
+ chain: tevmMainnet.chain,
+ transport: tevmMainnet.clientConfig.transport,
})
expect(await getAddresses(client)).toMatchInlineSnapshot(`
[
diff --git a/src/actions/wallet/getCallsStatus.test.ts b/src/actions/wallet/getCallsStatus.test.ts
index 773cd1676a..30c6cefd4b 100644
--- a/src/actions/wallet/getCallsStatus.test.ts
+++ b/src/actions/wallet/getCallsStatus.test.ts
@@ -1,7 +1,6 @@
import { describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
-import { deployErrorExample } from '~test/utils.js'
+import { tevmMainnet } from '~test/tevm.js'
import { ErrorsExample } from '../../../contracts/generated.js'
import { mainnet } from '../../chains/index.js'
import { createClient } from '../../clients/createClient.js'
@@ -12,18 +11,35 @@ import type {
WalletGetCallsStatusReturnType,
} from '../../types/eip1193.js'
import type { Hex } from '../../types/misc.js'
-import { getHttpRpcClient, parseEther } from '../../utils/index.js'
+import { parseEther } from '../../utils/index.js'
import { uid } from '../../utils/uid.js'
import { mine } from '../index.js'
import { getCallsStatus } from './getCallsStatus.js'
import { sendCalls } from './sendCalls.js'
+import { deployErrorExample } from './tevmTestUtils.test-d.js'
-const testClient = anvilMainnet.getClient()
+const testClient = Object.assign(tevmMainnet.getClient(), {
+ mode: 'anvil' as const,
+})
type Uid = string
type TxHashes = Hex[]
const calls = new Map()
+async function requestTevm({ body }: { body: any }): Promise {
+ try {
+ return {
+ result: await tevmMainnet.memoryClient.request(body as never),
+ }
+ } catch (error) {
+ const { code = -32603, message = 'Tevm request failed.' } = error as {
+ code?: number
+ message?: string
+ }
+ return { error: { code, message } }
+ }
+}
+
const getClient = ({
onRequest,
}: {
@@ -34,14 +50,12 @@ const getClient = ({
async request({ method, params }) {
onRequest({ method, params })
- const rpcClient = getHttpRpcClient(anvilMainnet.rpcUrl.http)
-
if (method === 'wallet_getCallsStatus') {
const hashes = calls.get(params[0])
if (!hashes) return null
const receipts = await Promise.all(
hashes.map(async (hash) => {
- const { result, error } = await rpcClient.request({
+ const { result, error } = await requestTevm({
body: {
method: 'eth_getTransactionReceipt',
params: [hash],
@@ -52,7 +66,7 @@ const getClient = ({
throw new RpcRequestError({
body: { method, params },
error,
- url: anvilMainnet.rpcUrl.http,
+ url: 'tevm://memory',
})
return {
blockHash: result.blockHash,
@@ -77,7 +91,7 @@ const getClient = ({
if (method === 'wallet_sendCalls') {
const hashes = []
for (const call of params[0].calls) {
- const { result, error } = await rpcClient.request({
+ const { result, error } = await requestTevm({
body: {
method: 'eth_sendTransaction',
params: [call],
@@ -88,7 +102,7 @@ const getClient = ({
throw new RpcRequestError({
body: { method, params },
error,
- url: anvilMainnet.rpcUrl.http,
+ url: 'tevm://memory',
})
hashes.push(result)
}
@@ -149,7 +163,7 @@ test('default', async () => {
})
describe('behavior: eth_sendTransaction fallback', () => {
- const client = anvilMainnet.getClient()
+ const client = tevmMainnet.getClient()
test('default', async () => {
const response = await sendCalls(client, {
diff --git a/src/actions/wallet/getPermissions.test.ts b/src/actions/wallet/getPermissions.test.ts
index dbd129dffc..89fa1a2c5e 100644
--- a/src/actions/wallet/getPermissions.test.ts
+++ b/src/actions/wallet/getPermissions.test.ts
@@ -1,9 +1,32 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
+import { createClient } from '../../clients/createClient.js'
+import { custom } from '../../clients/transports/custom.js'
import { getPermissions } from './getPermissions.js'
-const client = anvilMainnet.getClient()
+const permissions = [
+ {
+ invoker: 'https://example.com',
+ parentCapability: 'eth_accounts',
+ caveats: [
+ {
+ type: 'filterResponse',
+ value: ['0x0c54fccd2e384b4bb6f2e405bf5cbc15a017aafb'],
+ },
+ ],
+ },
+]
+
+const client = createClient({
+ chain: tevmMainnet.chain,
+ transport: custom({
+ async request({ method, params }) {
+ if (method === 'wallet_getPermissions') return permissions
+ return tevmMainnet.memoryClient.request({ method, params } as never)
+ },
+ }),
+})
test('default', async () => {
expect(await getPermissions(client!)).toMatchInlineSnapshot(`
diff --git a/src/actions/wallet/prepareAuthorization.test.ts b/src/actions/wallet/prepareAuthorization.test.ts
index e256c18933..8714d6e79e 100644
--- a/src/actions/wallet/prepareAuthorization.test.ts
+++ b/src/actions/wallet/prepareAuthorization.test.ts
@@ -1,20 +1,12 @@
-import { beforeAll, expect, test } from 'vitest'
+import { expect, test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
-import { reset } from '../index.js'
import { prepareAuthorization } from './prepareAuthorization.js'
const account = privateKeyToAccount(accounts[0].privateKey)
-const client = anvilMainnet.getClient()
-
-beforeAll(async () => {
- await reset(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
-})
+const client = tevmMainnet.getClient()
test('default', async () => {
const authorization = await prepareAuthorization(client, {
@@ -65,7 +57,7 @@ test('behavior: partial authorization: no chainId + nonce', async () => {
{
"address": "0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2",
"chainId": 1,
- "nonce": 953,
+ "nonce": 0,
}
`,
)
@@ -83,7 +75,7 @@ test('behavior: partial authorization: no nonce', async () => {
{
"address": "0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2",
"chainId": 10,
- "nonce": 953,
+ "nonce": 0,
}
`,
)
@@ -114,7 +106,7 @@ test('behavior: executor (address)', async () => {
executor: '0x0000000000000000000000000000000000000000',
})
- expect(authorization.nonce).toBe(953)
+ expect(authorization.nonce).toBe(0)
})
test('behavior: executor (account)', async () => {
@@ -124,7 +116,7 @@ test('behavior: executor (account)', async () => {
executor: privateKeyToAccount(accounts[1].privateKey),
})
- expect(authorization.nonce).toBe(953)
+ expect(authorization.nonce).toBe(0)
})
test('behavior: executor (self-executing)', async () => {
@@ -135,7 +127,7 @@ test('behavior: executor (self-executing)', async () => {
executor: 'self',
})
- expect(authorization.nonce).toBe(954)
+ expect(authorization.nonce).toBe(1)
}
{
@@ -145,12 +137,12 @@ test('behavior: executor (self-executing)', async () => {
executor: account,
})
- expect(authorization.nonce).toBe(954)
+ expect(authorization.nonce).toBe(1)
}
})
test('behavior: hoisted account on client', async () => {
- const client = anvilMainnet.getClient({ account })
+ const client = tevmMainnet.getClient({ account })
const authorization = await prepareAuthorization(client, {
contractAddress: wagmiContractConfig.address,
chainId: 1,
@@ -169,7 +161,7 @@ test('behavior: hoisted account on client', async () => {
})
test('behavior: no client chain', async () => {
- const client = anvilMainnet.getClient({ chain: false })
+ const client = tevmMainnet.getClient({ chain: false })
const authorization = await prepareAuthorization(client, {
account,
contractAddress: wagmiContractConfig.address,
diff --git a/src/actions/wallet/prepareTransactionRequest.test-d.ts b/src/actions/wallet/prepareTransactionRequest.test-d.ts
index 503888afd0..859b972dfe 100644
--- a/src/actions/wallet/prepareTransactionRequest.test-d.ts
+++ b/src/actions/wallet/prepareTransactionRequest.test-d.ts
@@ -1,6 +1,6 @@
import { expectTypeOf, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { kzg } from '~test/kzg.js'
+import { tevmMainnet } from '~test/tevm.js'
import type { BlobSidecar, Hex, TransactionRequest } from '../../index.js'
import type { Kzg } from '../../types/kzg.js'
import type { ByteArray } from '../../types/misc.js'
@@ -9,18 +9,18 @@ import {
prepareTransactionRequest,
} from './prepareTransactionRequest.js'
-const client = anvilMainnet.getClient()
-const clientWithAccount = anvilMainnet.getClient({
+const client = tevmMainnet.getClient()
+const clientWithAccount = tevmMainnet.getClient({
account: true,
})
-const clientWithoutChain = anvilMainnet.getClient({
+const clientWithoutChain = tevmMainnet.getClient({
chain: false,
})
test('default', async () => {
const result_1 = await prepareTransactionRequest(client, {})
expectTypeOf(result_1.account).toEqualTypeOf()
- expectTypeOf(result_1.chain).toEqualTypeOf()
+ expectTypeOf(result_1.chain).toEqualTypeOf()
expectTypeOf(result_1.gas).toEqualTypeOf()
expectTypeOf(result_1.nonce).toEqualTypeOf()
expectTypeOf(result_1.type).toEqualTypeOf<
diff --git a/src/actions/wallet/prepareTransactionRequest.test.ts b/src/actions/wallet/prepareTransactionRequest.test.ts
index 7d243b9cfd..3e447964fd 100644
--- a/src/actions/wallet/prepareTransactionRequest.test.ts
+++ b/src/actions/wallet/prepareTransactionRequest.test.ts
@@ -1,7 +1,7 @@
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
import { kzg } from '~test/kzg.js'
+import { tevmMainnet } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import * as getBlock from '../../actions/public/getBlock.js'
import { mine } from '../../actions/test/mine.js'
@@ -10,7 +10,6 @@ import { setNextBlockBaseFeePerGas } from '../../actions/test/setNextBlockBaseFe
import {
BaseError,
createClient,
- http,
MethodNotFoundRpcError,
toBlobs,
} from '../../index.js'
@@ -25,7 +24,9 @@ import {
supportsFillTransaction,
} from './prepareTransactionRequest.js'
-const client = anvilMainnet.getClient()
+const client = Object.assign(tevmMainnet.getClient(), {
+ mode: 'anvil' as const,
+})
const sourceAccount = accounts[0]
const targetAccount = accounts[1]
@@ -835,12 +836,12 @@ describe('without `eth_fillTransaction`', () => {
// client chain
const client_1 = createClient({
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
defaultPriorityFee: () => parseGwei('69'),
},
},
- transport: http(),
+ transport: tevmMainnet.clientConfig.transport,
})
const request_1 = await prepareTransactionRequest(client_1, {
account: privateKeyToAccount(sourceAccount.privateKey),
@@ -854,12 +855,12 @@ describe('without `eth_fillTransaction`', () => {
// client chain (async)
const client_2 = createClient({
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
defaultPriorityFee: async () => parseGwei('69'),
},
},
- transport: http(),
+ transport: tevmMainnet.clientConfig.transport,
})
const request_2 = await prepareTransactionRequest(client_2, {
account: privateKeyToAccount(sourceAccount.privateKey),
@@ -873,12 +874,12 @@ describe('without `eth_fillTransaction`', () => {
// client chain (bigint)
const client_3 = createClient({
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
defaultPriorityFee: parseGwei('69'),
},
},
- transport: http(),
+ transport: tevmMainnet.clientConfig.transport,
})
const request_3 = await prepareTransactionRequest(client_3, {
account: privateKeyToAccount(sourceAccount.privateKey),
@@ -893,7 +894,7 @@ describe('without `eth_fillTransaction`', () => {
const request_4 = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
defaultPriorityFee: () => parseGwei('69'),
},
@@ -909,7 +910,7 @@ describe('without `eth_fillTransaction`', () => {
const request_5 = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
defaultPriorityFee: async () => parseGwei('69'),
},
@@ -925,7 +926,7 @@ describe('without `eth_fillTransaction`', () => {
const request_6 = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
defaultPriorityFee: parseGwei('69'),
},
@@ -941,7 +942,7 @@ describe('without `eth_fillTransaction`', () => {
const request_7 = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
defaultPriorityFee: 0n,
},
@@ -955,7 +956,7 @@ describe('without `eth_fillTransaction`', () => {
const request_8 = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: {
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
fees: {
defaultPriorityFee: async () => 0n,
},
@@ -973,7 +974,7 @@ describe('without `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
async prepareTransactionRequest(args) {
return {
...args,
@@ -993,7 +994,7 @@ describe('without `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
async prepareTransactionRequest(args) {
return {
...args,
@@ -1013,7 +1014,7 @@ describe('without `eth_fillTransaction`', () => {
const client_1 = createClient({
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
async prepareTransactionRequest(args) {
return {
...args,
@@ -1021,7 +1022,7 @@ describe('without `eth_fillTransaction`', () => {
}
},
}),
- transport: http(),
+ transport: tevmMainnet.clientConfig.transport,
})
const request = await prepareTransactionRequest(client_1, {
account: privateKeyToAccount(sourceAccount.privateKey),
@@ -1039,7 +1040,7 @@ describe('without `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
async prepareTransactionRequest(args, options) {
phases.push(options?.phase ?? 'beforeFillTransaction')
return {
@@ -1065,7 +1066,7 @@ describe('without `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
prepareTransactionRequest: [
async (args, options) => {
phases.push(options?.phase ?? 'unknown')
@@ -1094,7 +1095,7 @@ describe('without `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
prepareTransactionRequest: [
async (args, options) => {
phases.push(options?.phase ?? 'unknown')
@@ -1123,7 +1124,7 @@ describe('without `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
prepareTransactionRequest: [
async (args, options) => {
phases.push(options?.phase ?? 'unknown')
@@ -1156,7 +1157,7 @@ describe('without `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
prepareTransactionRequest: [
async (args, options) => {
if (options?.phase === 'afterFillParameters') {
@@ -1182,7 +1183,7 @@ describe('without `eth_fillTransaction`', () => {
// Create a client without a chain to force chainId to be fetched from RPC
const clientWithoutChain = createClient({
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
const request = await prepareTransactionRequest(clientWithoutChain, {
@@ -1860,7 +1861,7 @@ describe('with `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
async prepareTransactionRequest(args) {
return {
...args,
@@ -1880,7 +1881,7 @@ describe('with `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
async prepareTransactionRequest(args) {
return {
...args,
@@ -1900,7 +1901,7 @@ describe('with `eth_fillTransaction`', () => {
const client_1 = createClient({
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
async prepareTransactionRequest(args) {
return {
...args,
@@ -1908,7 +1909,7 @@ describe('with `eth_fillTransaction`', () => {
}
},
}),
- transport: http(),
+ transport: tevmMainnet.clientConfig.transport,
})
const request = await prepareTransactionRequest(client_1, {
account: privateKeyToAccount(sourceAccount.privateKey),
@@ -1926,7 +1927,7 @@ describe('with `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
async prepareTransactionRequest(args, options) {
phases.push(options?.phase ?? 'beforeFillTransaction')
return {
@@ -1951,7 +1952,7 @@ describe('with `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
prepareTransactionRequest: [
async (args, options) => {
phases.push(options?.phase ?? 'unknown')
@@ -1979,7 +1980,7 @@ describe('with `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
prepareTransactionRequest: [
async (args, options) => {
phases.push(options?.phase ?? 'unknown')
@@ -2007,7 +2008,7 @@ describe('with `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
prepareTransactionRequest: [
async (args, options) => {
phases.push(options?.phase ?? 'unknown')
@@ -2039,7 +2040,7 @@ describe('with `eth_fillTransaction`', () => {
const request = await prepareTransactionRequest(client, {
account: privateKeyToAccount(sourceAccount.privateKey),
chain: defineChain({
- ...anvilMainnet.chain,
+ ...tevmMainnet.chain,
prepareTransactionRequest: [
async (args, options) => {
if (options?.phase === 'afterFillParameters') {
@@ -2065,7 +2066,7 @@ describe('with `eth_fillTransaction`', () => {
// Create a client without a chain to force chainId to be fetched from RPC
const clientWithoutChain = createClient({
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
const request = await prepareTransactionRequest(clientWithoutChain, {
diff --git a/src/actions/wallet/requestAddresses.test.ts b/src/actions/wallet/requestAddresses.test.ts
index 3aa8835008..69bd10af92 100644
--- a/src/actions/wallet/requestAddresses.test.ts
+++ b/src/actions/wallet/requestAddresses.test.ts
@@ -1,9 +1,9 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { requestAddresses } from './requestAddresses.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('requests accounts', async () => {
expect(await requestAddresses(client!)).toMatchInlineSnapshot(`
diff --git a/src/actions/wallet/requestPermissions.test.ts b/src/actions/wallet/requestPermissions.test.ts
index 7a958744bf..7d93692946 100644
--- a/src/actions/wallet/requestPermissions.test.ts
+++ b/src/actions/wallet/requestPermissions.test.ts
@@ -1,9 +1,32 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
+import { createClient } from '../../clients/createClient.js'
+import { custom } from '../../clients/transports/custom.js'
import { requestPermissions } from './requestPermissions.js'
-const client = anvilMainnet.getClient()
+const permissions = [
+ {
+ invoker: 'https://example.com',
+ parentCapability: 'eth_accounts',
+ caveats: [
+ {
+ type: 'filterResponse',
+ value: ['0x0c54fccd2e384b4bb6f2e405bf5cbc15a017aafb'],
+ },
+ ],
+ },
+]
+
+const client = createClient({
+ chain: tevmMainnet.chain,
+ transport: custom({
+ async request({ method, params }) {
+ if (method === 'wallet_requestPermissions') return permissions
+ return tevmMainnet.memoryClient.request({ method, params } as never)
+ },
+ }),
+})
test('default', async () => {
expect(
diff --git a/src/actions/wallet/sendCalls.test.ts b/src/actions/wallet/sendCalls.test.ts
index a8521bdb85..ff27005f21 100644
--- a/src/actions/wallet/sendCalls.test.ts
+++ b/src/actions/wallet/sendCalls.test.ts
@@ -1,7 +1,7 @@
import { describe, expect, test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { type Chain, mainnet } from '../../chains/index.js'
import { type Client, createClient } from '../../clients/createClient.js'
import type { Transport } from '../../clients/transports/createTransport.js'
@@ -12,7 +12,7 @@ import type {
WalletGetCallsStatusReturnType,
} from '../../types/eip1193.js'
import type { Hex } from '../../types/misc.js'
-import { getHttpRpcClient, parseEther } from '../../utils/index.js'
+import { parseEther } from '../../utils/index.js'
import { uid } from '../../utils/uid.js'
import { sendCalls } from './sendCalls.js'
@@ -20,6 +20,20 @@ type Uid = string
type TxHashes = Hex[]
const calls = new Map()
+async function requestTevm({ body }: { body: any }): Promise {
+ try {
+ return {
+ result: await tevmMainnet.memoryClient.request(body as never),
+ }
+ } catch (error) {
+ const { code = -32603, message = 'Tevm request failed.' } = error as {
+ code?: number
+ message?: string
+ }
+ return { error: { code, message } }
+ }
+}
+
const getClient = ({
chain,
onRequest,
@@ -33,8 +47,6 @@ const getClient = ({
async request({ method, params }) {
onRequest({ method, params })
- const rpcClient = getHttpRpcClient(anvilMainnet.rpcUrl.http)
-
if (method === 'wallet_getCallsStatus') {
const hashes = calls.get(params[0])
if (!hashes)
@@ -49,7 +61,7 @@ const getClient = ({
const receipts = await Promise.all(
hashes.map(async (hash) => {
- const { result, error } = await rpcClient.request({
+ const { result, error } = await requestTevm({
body: {
method: 'eth_getTransactionReceipt',
params: [hash],
@@ -60,7 +72,7 @@ const getClient = ({
throw new RpcRequestError({
body: { method, params },
error,
- url: anvilMainnet.rpcUrl.http,
+ url: 'tevm://memory',
})
if (!result) throw new Error('receipt not found')
return {
@@ -86,7 +98,7 @@ const getClient = ({
if (method === 'wallet_sendCalls') {
const hashes = []
for (const call of params[0].calls) {
- const callResult = await rpcClient.request({
+ const callResult = await requestTevm({
body: {
method: 'eth_call',
params: [
@@ -97,7 +109,7 @@ const getClient = ({
})
if (callResult.error) throw new Error(callResult.error.message)
- const { result, error } = await rpcClient.request({
+ const { result, error } = await requestTevm({
body: {
method: 'eth_sendTransaction',
params: [
@@ -110,7 +122,7 @@ const getClient = ({
throw new RpcRequestError({
body: { method, params },
error,
- url: anvilMainnet.rpcUrl.http,
+ url: 'tevm://memory',
})
hashes.push(result)
}
@@ -423,7 +435,7 @@ test('behavior: capability: paymasterService', async () => {
})
describe('behavior: eth_sendTransaction fallback', () => {
- const client = anvilMainnet.getClient()
+ const client = tevmMainnet.getClient()
test('default', async () => {
const response = await sendCalls(client, {
@@ -451,9 +463,7 @@ describe('behavior: eth_sendTransaction fallback', () => {
experimental_fallback: true,
})
- expect(response.id).toMatchInlineSnapshot(
- `"0xb0fd8d440a3cb766200a237ad236241a70660e6f13398c880ed913fce620e8e5386fc7a922e91f765fc5034631f96c76a801071d0285fec1c43f856eb4445566e7941d94f9057aca5978cbeda09c96f6772ca5762c257867382a4da0cdea36dd6c1959f1051e01bb652246da0bb803ba6e678864cd6382b40c0bfb1ae1c3202600000000000000000000000000000000000000000000000000000000000000015792579257925792579257925792579257925792579257925792579257925792"`,
- )
+ expect(response.id).toBeHex()
})
test('behavior: optional capabilities', async () => {
diff --git a/src/actions/wallet/sendCallsSync.test.ts b/src/actions/wallet/sendCallsSync.test.ts
index 923f87034d..492a68b2e5 100644
--- a/src/actions/wallet/sendCallsSync.test.ts
+++ b/src/actions/wallet/sendCallsSync.test.ts
@@ -1,7 +1,7 @@
import { expect, test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { type Chain, mainnet } from '../../chains/index.js'
import { type Client, createClient } from '../../clients/createClient.js'
import type { Transport } from '../../clients/transports/createTransport.js'
@@ -13,7 +13,7 @@ import type {
WalletGetCallsStatusReturnType,
} from '../../types/eip1193.js'
import type { Hex } from '../../types/misc.js'
-import { getHttpRpcClient, parseEther } from '../../utils/index.js'
+import { parseEther } from '../../utils/index.js'
import { uid } from '../../utils/uid.js'
import { wait } from '../../utils/wait.js'
import { mine } from '../test/mine.js'
@@ -22,12 +22,28 @@ import {
sendCallsSync as sendCalls,
} from './sendCallsSync.js'
-const testClient = anvilMainnet.getClient()
+const testClient = Object.assign(tevmMainnet.getClient(), {
+ mode: 'anvil' as const,
+})
type Uid = string
type TxHashes = Hex[]
const calls = new Map()
+async function requestTevm({ body }: { body: any }): Promise {
+ try {
+ return {
+ result: await tevmMainnet.memoryClient.request(body as never),
+ }
+ } catch (error) {
+ const { code = -32603, message = 'Tevm request failed.' } = error as {
+ code?: number
+ message?: string
+ }
+ return { error: { code, message } }
+ }
+}
+
async function sendCallsSync<
chain extends Chain | undefined,
account extends Account | undefined,
@@ -35,10 +51,13 @@ async function sendCallsSync<
client: Client,
parameters: SendCallsSyncParameters,
) {
+ let settled = false
const [result] = await Promise.all([
- sendCalls(client, { ...parameters, timeout: 5_000 }),
+ sendCalls(client, { ...parameters, timeout: 20_000 }).finally(() => {
+ settled = true
+ }),
(async () => {
- for (const _ of parameters.calls) {
+ while (!settled) {
await wait(100)
await mine(testClient, { blocks: 1 })
}
@@ -50,8 +69,6 @@ async function sendCallsSync<
const client = createClient({
transport: custom({
async request({ method, params }) {
- const rpcClient = getHttpRpcClient(anvilMainnet.rpcUrl.http)
-
if (method === 'wallet_getCallsStatus') {
const hashes = calls.get(params[0])
if (!hashes)
@@ -66,7 +83,7 @@ const client = createClient({
const receipts = await Promise.all(
hashes.map(async (hash) => {
- const { result, error } = await rpcClient.request({
+ const { result, error } = await requestTevm({
body: {
method: 'eth_getTransactionReceipt',
params: [hash],
@@ -77,7 +94,7 @@ const client = createClient({
throw new RpcRequestError({
body: { method, params },
error,
- url: anvilMainnet.rpcUrl.http,
+ url: 'tevm://memory',
})
if (!result) throw new Error('receipt not found')
return {
@@ -103,7 +120,7 @@ const client = createClient({
if (method === 'wallet_sendCalls') {
const hashes = []
for (const call of params[0].calls) {
- const callResult = await rpcClient.request({
+ const callResult = await requestTevm({
body: {
method: 'eth_call',
params: [
@@ -114,7 +131,7 @@ const client = createClient({
})
if (callResult.error) throw new Error(callResult.error.message)
- const { result, error } = await rpcClient.request({
+ const { result, error } = await requestTevm({
body: {
method: 'eth_sendTransaction',
params: [
@@ -130,7 +147,7 @@ const client = createClient({
throw new RpcRequestError({
body: { method, params },
error,
- url: anvilMainnet.rpcUrl.http,
+ url: 'tevm://memory',
})
hashes.push(result)
}
diff --git a/src/actions/wallet/sendRawTransaction.test.ts b/src/actions/wallet/sendRawTransaction.test.ts
index b6398a0166..ee2ede0738 100644
--- a/src/actions/wallet/sendRawTransaction.test.ts
+++ b/src/actions/wallet/sendRawTransaction.test.ts
@@ -1,7 +1,7 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
import { blobData, kzg } from '~test/kzg.js'
+import { tevmMainnet } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { sepolia } from '../../chains/index.js'
import { createClient, http, parseGwei, stringToHex } from '../../index.js'
@@ -11,7 +11,7 @@ import { prepareTransactionRequest } from './prepareTransactionRequest.js'
import { sendRawTransaction } from './sendRawTransaction.js'
import { signTransaction } from './signTransaction.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const request = await prepareTransactionRequest(client, {
@@ -21,7 +21,7 @@ test('default', async () => {
})
const serializedTransaction = await signTransaction(client, request)
const hash = await sendRawTransaction(client, { serializedTransaction })
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
})
test.skip('4844', async () => {
diff --git a/src/actions/wallet/sendRawTransactionSync.test.ts b/src/actions/wallet/sendRawTransactionSync.test.ts
index b6fa348890..f998517f85 100644
--- a/src/actions/wallet/sendRawTransactionSync.test.ts
+++ b/src/actions/wallet/sendRawTransactionSync.test.ts
@@ -1,7 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
-import { deployErrorExample } from '~test/utils.js'
+import { tevmMainnet } from '~test/tevm.js'
import { ErrorsExample } from '../../../contracts/generated.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { encodeFunctionData } from '../../utils/index.js'
@@ -10,8 +9,11 @@ import { mine } from '../index.js'
import { prepareTransactionRequest } from './prepareTransactionRequest.js'
import { sendRawTransactionSync } from './sendRawTransactionSync.js'
import { signTransaction } from './signTransaction.js'
+import { deployErrorExample } from './tevmTestUtils.test-d.js'
-const client = anvilMainnet.getClient()
+const client = Object.assign(tevmMainnet.getClient(), {
+ mode: 'anvil' as const,
+})
test('default', async () => {
const request = await prepareTransactionRequest(client, {
diff --git a/src/actions/wallet/sendTransaction.bench.ts b/src/actions/wallet/sendTransaction.bench.ts
index 212d5d1d8a..7fff824b8f 100644
--- a/src/actions/wallet/sendTransaction.bench.ts
+++ b/src/actions/wallet/sendTransaction.bench.ts
@@ -1,13 +1,13 @@
import { JsonRpcSigner } from 'ethers'
import { bench, describe } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { ethersProvider } from '~test/bench.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { sendTransaction } from './sendTransaction.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe('Send Transaction', () => {
bench('viem: `sendTransaction`', async () => {
diff --git a/src/actions/wallet/sendTransaction.test-d.ts b/src/actions/wallet/sendTransaction.test-d.ts
index d089beb338..298703afc4 100644
--- a/src/actions/wallet/sendTransaction.test-d.ts
+++ b/src/actions/wallet/sendTransaction.test-d.ts
@@ -2,26 +2,25 @@ import type { Address } from 'abitype'
import { test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import type { Account } from '../../accounts/types.js'
import { createWalletClient } from '../../clients/createWalletClient.js'
-import { http } from '../../clients/transports/http.js'
import type { Chain } from '../../types/chain.js'
import { sendTransaction } from './sendTransaction.js'
const walletClient = createWalletClient({
account: '0x',
- chain: anvilMainnet.chain,
- transport: http(anvilMainnet.rpcUrl.http),
+ chain: tevmMainnet.chain,
+ transport: tevmMainnet.clientConfig.transport,
})
const walletClientWithoutAccount = createWalletClient({
- chain: anvilMainnet.chain,
- transport: http(anvilMainnet.rpcUrl.http),
+ chain: tevmMainnet.chain,
+ transport: tevmMainnet.clientConfig.transport,
})
const walletClientWithoutChain = createWalletClient({
account: '0x',
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
test('with and without `account`', () => {
@@ -37,11 +36,11 @@ test('with and without `account`', () => {
test('with and without `chain`', () => {
sendTransaction(walletClient, {
- chain: anvilMainnet.chain as Chain | undefined,
+ chain: tevmMainnet.chain as Chain | undefined,
// ^?
})
sendTransaction(walletClientWithoutChain, {
- chain: anvilMainnet.chain as Chain,
+ chain: tevmMainnet.chain as Chain,
// ^?
})
})
diff --git a/src/actions/wallet/sendTransaction.test.ts b/src/actions/wallet/sendTransaction.test.ts
index b9e4db41b5..0037c3ae86 100644
--- a/src/actions/wallet/sendTransaction.test.ts
+++ b/src/actions/wallet/sendTransaction.test.ts
@@ -1,15 +1,23 @@
import { describe, expect, test, vi } from 'vitest'
import { getSmartAccounts_07 } from '~test/account-abstraction.js'
-import { anvilMainnet, anvilSepolia } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
import { blobData, kzg } from '~test/kzg.js'
-import { deploy } from '~test/utils.js'
+import {
+ createMemoryTransport,
+ createTevmTestHarness,
+ tevmMainnet,
+} from '~test/tevm.js'
import { Delegation } from '../../../contracts/generated.js'
import { generatePrivateKey } from '../../accounts/generatePrivateKey.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
-import { celo, localhost, mainnet, optimism } from '../../chains/index.js'
+import {
+ celo,
+ localhost,
+ mainnet,
+ optimism,
+ sepolia,
+} from '../../chains/index.js'
import { createWalletClient } from '../../clients/createWalletClient.js'
-import { http } from '../../clients/transports/http.js'
import { maxUint256 } from '../../constants/number.js'
import {
InvalidInputRpcError,
@@ -23,12 +31,7 @@ import { concatHex } from '../../utils/data/concat.js'
import { hexToNumber } from '../../utils/encoding/fromHex.js'
import { stringToHex, toHex } from '../../utils/encoding/toHex.js'
import { toRlp } from '../../utils/encoding/toRlp.js'
-import {
- decodeEventLog,
- encodeFunctionData,
- getAddress,
- nonceManager,
-} from '../../utils/index.js'
+import { encodeFunctionData, nonceManager } from '../../utils/index.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { parseGwei } from '../../utils/unit/parseGwei.js'
import { estimateFeesPerGas } from '../public/estimateFeesPerGas.js'
@@ -43,11 +46,15 @@ import { setNextBlockBaseFeePerGas } from '../test/setNextBlockBaseFeePerGas.js'
import { setNonce } from '../test/setNonce.js'
import { sendTransaction } from './sendTransaction.js'
import { signAuthorization } from './signAuthorization.js'
+import { deploy } from './tevmTestUtils.test-d.js'
-const client = anvilMainnet.getClient()
-const clientWithAccount = anvilMainnet.getClient({
+const client = Object.assign(tevmMainnet.getClient(), {
+ mode: 'anvil' as const,
+})
+const clientWithAccount = tevmMainnet.getClient({
account: accounts[0].address,
})
+const tevmSepolia = createTevmTestHarness({ fork: false })
const sourceAccount = accounts[0]
const targetAccount = accounts[1]
@@ -137,8 +144,8 @@ test('sends transaction (w/ serializer)', async () => {
await setup()
await reset(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ blockNumber: tevmMainnet.forkBlockNumber,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
const serializer = vi.fn(
@@ -229,7 +236,7 @@ test.skip('sends transaction w/ no value', async () => {
test('client chain mismatch', async () => {
const client = createWalletClient({
chain: celo,
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
await expect(() =>
sendTransaction(client, {
@@ -266,7 +273,7 @@ test('inferred account', async () => {
test('no chain', async () => {
const client = createWalletClient({
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
await expect(() =>
// @ts-expect-error
@@ -535,7 +542,7 @@ describe('args: chain', async () => {
test('default', async () => {
expect(
await sendTransaction(client, {
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
account: sourceAccount.address,
to: targetAccount.address,
value: parseEther('1'),
@@ -600,7 +607,7 @@ describe('args: chain', async () => {
test("behavior: transport doesn't support `wallet_sendTransaction` so the original error is rethrown", async () => {
// Using a new client to reset the cached info about wallet_sendTransaction
// being supported.
- const client = anvilMainnet.getClient()
+ const client = tevmMainnet.getClient()
await setup()
const originalError = new InvalidInputRpcError(new Error())
@@ -752,21 +759,9 @@ describe('local account', () => {
await mine(client, { blocks: 1 })
const receipt = await getTransactionReceipt(client, { hash })
- const log = receipt.logs[0]
- expect(getAddress(log.address)).toBe(eoa.address)
- expect(
- decodeEventLog({
- abi: Delegation.abi,
- ...log,
- }),
- ).toEqual({
- args: {
- data: '0x',
- to: recipient.address,
- value: parseEther('1'),
- },
- eventName: 'CallEmitted',
- })
+ await expect(receipt)
+ .toEmit({ abi: Delegation.abi, address: eoa.address }, 'CallEmitted')
+ .withEventArgs(recipient.address, parseEther('1'), '0x')
expect(
await getBalance(client, {
@@ -785,7 +780,12 @@ describe('local account', () => {
const relay = privateKeyToAccount(accounts[0].privateKey)
const recipient = privateKeyToAccount(generatePrivateKey())
- const client_sepolia = anvilSepolia.getClient({ account: relay })
+ await tevmSepolia.ready()
+ const client_sepolia = createWalletClient({
+ account: relay,
+ chain: sepolia,
+ transport: createMemoryTransport(tevmSepolia.memoryClient),
+ })
await setBalance(client, { address: eoa.address, value: parseEther('10') })
await setBalance(client_sepolia, {
@@ -803,10 +803,14 @@ describe('local account', () => {
// deploy on sepolia
await setNonce(client_sepolia, { address: relay.address, nonce })
- await deploy(client_sepolia, {
- abi: Delegation.abi,
- bytecode: Delegation.bytecode.object,
- })
+ await deploy(
+ client_sepolia,
+ {
+ abi: Delegation.abi,
+ bytecode: Delegation.bytecode.object,
+ },
+ tevmSepolia,
+ )
// sign authorization with `0` chain id (all chains)
const authorization = await signAuthorization(client, {
@@ -895,21 +899,9 @@ describe('local account', () => {
await mine(client, { blocks: 1 })
const receipt = await getTransactionReceipt(client, { hash })
- const log = receipt.logs[0]
- expect(getAddress(log.address)).toBe(eoa.address)
- expect(
- decodeEventLog({
- abi: Delegation.abi,
- ...log,
- }),
- ).toEqual({
- args: {
- data: '0x',
- to: recipient.address,
- value: parseEther('1'),
- },
- eventName: 'CallEmitted',
- })
+ await expect(receipt)
+ .toEmit({ abi: Delegation.abi, address: eoa.address }, 'CallEmitted')
+ .withEventArgs(recipient.address, parseEther('1'), '0x')
expect(
await getBalance(client, {
diff --git a/src/actions/wallet/sendTransactionSync.test.ts b/src/actions/wallet/sendTransactionSync.test.ts
index c5e0518749..67aaa03278 100644
--- a/src/actions/wallet/sendTransactionSync.test.ts
+++ b/src/actions/wallet/sendTransactionSync.test.ts
@@ -1,8 +1,7 @@
import { describe, expect, test, vi } from 'vitest'
import { getSmartAccounts_07 } from '~test/account-abstraction.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
-import { deploy, deployErrorExample } from '~test/utils.js'
+import { tevmMainnet } from '~test/tevm.js'
import { Delegation, ErrorsExample } from '../../../contracts/generated.js'
import { generatePrivateKey } from '../../accounts/generatePrivateKey.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
@@ -16,7 +15,6 @@ import {
import type { Client } from '../../clients/createClient.js'
import { createWalletClient } from '../../clients/createWalletClient.js'
import type { Transport } from '../../clients/transports/createTransport.js'
-import { http } from '../../clients/transports/http.js'
import { maxUint256 } from '../../constants/number.js'
import {
InvalidInputRpcError,
@@ -30,12 +28,7 @@ import { concatHex } from '../../utils/data/concat.js'
import { hexToNumber } from '../../utils/encoding/fromHex.js'
import { toHex } from '../../utils/encoding/toHex.js'
import { toRlp } from '../../utils/encoding/toRlp.js'
-import {
- decodeEventLog,
- encodeFunctionData,
- getAddress,
- nonceManager,
-} from '../../utils/index.js'
+import { encodeFunctionData, nonceManager } from '../../utils/index.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { parseGwei } from '../../utils/unit/parseGwei.js'
import { wait } from '../../utils/wait.js'
@@ -52,9 +45,12 @@ import {
sendTransactionSync as sendTransaction,
} from './sendTransactionSync.js'
import { signAuthorization } from './signAuthorization.js'
+import { deploy, deployErrorExample } from './tevmTestUtils.test-d.js'
-const client = anvilMainnet.getClient()
-const clientWithAccount = anvilMainnet.getClient({
+const client = Object.assign(tevmMainnet.getClient(), {
+ mode: 'anvil' as const,
+})
+const clientWithAccount = tevmMainnet.getClient({
account: accounts[0].address,
})
@@ -203,8 +199,8 @@ test('sends transaction (w/ serializer)', async () => {
await setup()
await reset(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ blockNumber: tevmMainnet.forkBlockNumber,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
const serializer = vi.fn(
@@ -267,7 +263,7 @@ test('sends transaction (w/ serializer)', async () => {
test('client chain mismatch', async () => {
const client = createWalletClient({
chain: celo,
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
await expect(() =>
sendTransactionSync(client, {
@@ -304,7 +300,7 @@ test('inferred account', async () => {
test('no chain', async () => {
const client = createWalletClient({
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
await expect(() =>
// @ts-expect-error
@@ -694,7 +690,7 @@ describe('args: chain', async () => {
test('default', async () => {
expect(
await sendTransactionSync(client, {
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
account: sourceAccount.address,
to: targetAccount.address,
value: parseEther('1'),
@@ -759,7 +755,7 @@ describe('args: chain', async () => {
test("behavior: transport doesn't support `wallet_sendTransaction` so the original error is rethrown", async () => {
// Using a new client to reset the cached info about wallet_sendTransaction
// being supported.
- const client = anvilMainnet.getClient()
+ const client = tevmMainnet.getClient()
await setup()
const originalError = new InvalidInputRpcError(new Error())
@@ -944,21 +940,9 @@ describe('local account', () => {
})
expect(receipt).toBeDefined()
- const log = receipt.logs[0]
- expect(getAddress(log.address)).toBe(eoa.address)
- expect(
- decodeEventLog({
- abi: Delegation.abi,
- ...log,
- }),
- ).toEqual({
- args: {
- data: '0x',
- to: recipient.address,
- value: parseEther('1'),
- },
- eventName: 'CallEmitted',
- })
+ await expect(receipt)
+ .toEmit({ abi: Delegation.abi, address: eoa.address }, 'CallEmitted')
+ .withEventArgs(recipient.address, parseEther('1'), '0x')
expect(
await getBalance(client, {
diff --git a/src/actions/wallet/signAuthorization.test.ts b/src/actions/wallet/signAuthorization.test.ts
index b0fab85881..16960d39ed 100644
--- a/src/actions/wallet/signAuthorization.test.ts
+++ b/src/actions/wallet/signAuthorization.test.ts
@@ -1,21 +1,13 @@
-import { beforeAll, expect, test } from 'vitest'
+import { expect, test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { verifyAuthorization } from '../../utils/authorization/verifyAuthorization.js'
-import { reset } from '../index.js'
import { signAuthorization } from './signAuthorization.js'
const account = privateKeyToAccount(accounts[0].privateKey)
-const client = anvilMainnet.getClient()
-
-beforeAll(async () => {
- await reset(client, {
- blockNumber: anvilMainnet.forkBlockNumber,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
-})
+const client = tevmMainnet.getClient()
test('default', async () => {
const authorization = await signAuthorization(client, {
@@ -108,7 +100,7 @@ test('behavior: address as authorization', async () => {
{
"address": "0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2",
"chainId": 1,
- "nonce": 953,
+ "nonce": 0,
"r": null,
"s": null,
"v": null,
@@ -145,7 +137,7 @@ test('behavior: partial authorization: no chainId + nonce', async () => {
{
"address": "0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2",
"chainId": 1,
- "nonce": 953,
+ "nonce": 0,
"r": null,
"s": null,
"v": null,
@@ -183,7 +175,7 @@ test('behavior: partial authorization: no nonce', async () => {
{
"address": "0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2",
"chainId": 10,
- "nonce": 953,
+ "nonce": 0,
"r": null,
"s": null,
"v": null,
@@ -248,7 +240,7 @@ test('behavior: self-executing', async () => {
executor: 'self',
})
- expect(authorization.nonce).toBe(954)
+ expect(authorization.nonce).toBe(1)
expect(
await verifyAuthorization({
address: account.address,
@@ -258,7 +250,7 @@ test('behavior: self-executing', async () => {
})
test('behavior: hoisted account on client', async () => {
- const client = anvilMainnet.getClient({ account })
+ const client = tevmMainnet.getClient({ account })
const authorization = await signAuthorization(client, {
contractAddress: wagmiContractConfig.address,
chainId: 1,
@@ -297,7 +289,7 @@ test('behavior: hoisted account on client', async () => {
})
test('behavior: no client chain', async () => {
- const client = anvilMainnet.getClient({ chain: false })
+ const client = tevmMainnet.getClient({ chain: false })
const authorization = await signAuthorization(client, {
account,
contractAddress: wagmiContractConfig.address,
diff --git a/src/actions/wallet/signMessage.test.ts b/src/actions/wallet/signMessage.test.ts
index f738bfd52f..38ae0c832b 100644
--- a/src/actions/wallet/signMessage.test.ts
+++ b/src/actions/wallet/signMessage.test.ts
@@ -1,12 +1,29 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
+import { createClient } from '../../clients/createClient.js'
+import { custom } from '../../clients/transports/custom.js'
import { signMessage } from './signMessage.js'
-const client = anvilMainnet.getClient()
-const clientWithAccount = anvilMainnet.getClient({
+const signer = privateKeyToAccount(accounts[0].privateKey)
+const transport = custom({
+ async request({ method, params }) {
+ if (method === 'personal_sign')
+ return signer.signMessage({
+ message: { raw: params[0] },
+ })
+ return tevmMainnet.memoryClient.request({ method, params } as never)
+ },
+})
+const client = createClient({
+ chain: tevmMainnet.chain,
+ transport,
+})
+const clientWithAccount = createClient({
account: accounts[0].address,
+ chain: tevmMainnet.chain,
+ transport,
})
test('default', async () => {
@@ -65,10 +82,9 @@ test('emoji', async () => {
})
test('local account', async () => {
- const account = privateKeyToAccount(accounts[0].privateKey)
expect(
await signMessage(client!, {
- account,
+ account: signer,
message: 'hello world',
}),
).toMatchInlineSnapshot(
diff --git a/src/actions/wallet/signTransaction.test-d.ts b/src/actions/wallet/signTransaction.test-d.ts
index 841c17251f..1ba07851ee 100644
--- a/src/actions/wallet/signTransaction.test-d.ts
+++ b/src/actions/wallet/signTransaction.test-d.ts
@@ -1,10 +1,9 @@
import type { Address } from 'abitype'
import { expectTypeOf, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import type { Account } from '../../accounts/types.js'
import { createWalletClient } from '../../clients/createWalletClient.js'
-import { http } from '../../clients/transports/http.js'
import type {
TransactionSerializedEIP1559,
TransactionSerializedEIP2930,
@@ -17,16 +16,16 @@ import { signTransaction } from './signTransaction.js'
const walletClient = createWalletClient({
account: '0x',
- chain: anvilMainnet.chain,
- transport: http(anvilMainnet.rpcUrl.http),
+ chain: tevmMainnet.chain,
+ transport: tevmMainnet.clientConfig.transport,
})
const walletClientWithoutAccount = createWalletClient({
- chain: anvilMainnet.chain,
- transport: http(anvilMainnet.rpcUrl.http),
+ chain: tevmMainnet.chain,
+ transport: tevmMainnet.clientConfig.transport,
})
const walletClientWithoutChain = createWalletClient({
account: '0x',
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
test('with and without `account`', () => {
@@ -42,11 +41,11 @@ test('with and without `account`', () => {
test('with and without `chain`', () => {
signTransaction(walletClient, {
- chain: anvilMainnet.chain as Chain | undefined,
+ chain: tevmMainnet.chain as Chain | undefined,
// ^?
})
signTransaction(walletClientWithoutChain, {
- chain: anvilMainnet.chain as Chain,
+ chain: tevmMainnet.chain as Chain,
// ^?
})
})
diff --git a/src/actions/wallet/signTransaction.test.ts b/src/actions/wallet/signTransaction.test.ts
index 85a36dc106..ccc278ae07 100644
--- a/src/actions/wallet/signTransaction.test.ts
+++ b/src/actions/wallet/signTransaction.test.ts
@@ -1,13 +1,12 @@
import { describe, expect, test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
import { blobData, kzg } from '~test/kzg.js'
+import { tevmMainnet } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { celo, mainnet } from '../../chains/index.js'
import {
createWalletClient,
- http,
parseGwei,
stringToHex,
type TransactionRequestBase,
@@ -24,7 +23,9 @@ import { mine } from '../index.js'
import { prepareTransactionRequest } from './prepareTransactionRequest.js'
import { signTransaction } from './signTransaction.js'
-const client = anvilMainnet.getClient()
+const client = Object.assign(tevmMainnet.getClient(), {
+ mode: 'anvil' as const,
+})
const sourceAccount = accounts[0]
@@ -49,7 +50,7 @@ describe('eip7702', async () => {
type: 'eip7702',
} as const satisfies TransactionRequestEIP7702
- // TODO: Anvil does not support sign 7702 over JSON-RPC yet.
+ // TODO: Tevm's JSON-RPC signer does not support EIP-7702 yet.
test.todo('default: json-rpc')
test('default: local', async () => {
@@ -425,7 +426,7 @@ describe('legacy', () => {
describe('custom (cip64)', () => {
const client = createWalletClient({
chain: celo,
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
test('default', async () => {
diff --git a/src/actions/wallet/signTypedData.test-d.ts b/src/actions/wallet/signTypedData.test-d.ts
index 0e03c7bf71..6b717f42c4 100644
--- a/src/actions/wallet/signTypedData.test-d.ts
+++ b/src/actions/wallet/signTypedData.test-d.ts
@@ -1,11 +1,11 @@
import type { TypedData } from 'abitype'
import { expectTypeOf, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { walletActions } from '../../clients/decorators/wallet.js'
import { type SignTypedDataParameters, signTypedData } from './signTypedData.js'
-const client = anvilMainnet.getClient().extend(walletActions)
+const client = tevmMainnet.getClient().extend(walletActions)
const types = {
Name: [
diff --git a/src/actions/wallet/signTypedData.test.ts b/src/actions/wallet/signTypedData.test.ts
index 68be2a1086..afd431b887 100644
--- a/src/actions/wallet/signTypedData.test.ts
+++ b/src/actions/wallet/signTypedData.test.ts
@@ -1,7 +1,9 @@
import { describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, typedData } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
+import { createClient } from '../../clients/createClient.js'
+import { custom } from '../../clients/transports/custom.js'
import { getAddress } from '../../utils/address/getAddress.js'
import { recoverTypedDataAddress } from '../../utils/signature/recoverTypedDataAddress.js'
import { signTypedData } from './signTypedData.js'
@@ -9,9 +11,21 @@ import { signTypedData } from './signTypedData.js'
const localAccount = privateKeyToAccount(accounts[0].privateKey)
const jsonRpcAccount = accounts[0].address
-const client = anvilMainnet.getClient()
-const clientWithAccount = anvilMainnet.getClient({
+const transport = custom({
+ async request({ method, params }) {
+ if (method === 'eth_signTypedData_v4')
+ return localAccount.signTypedData(JSON.parse(params[1]) as never)
+ return tevmMainnet.memoryClient.request({ method, params } as never)
+ },
+})
+const client = createClient({
+ chain: tevmMainnet.chain,
+ transport,
+})
+const clientWithAccount = createClient({
account: jsonRpcAccount,
+ chain: tevmMainnet.chain,
+ transport,
})
describe('default', async () => {
@@ -404,8 +418,7 @@ describe('args: domain: verifyingContract', () => {
})
describe('args: domain: salt', () => {
- // TODO: Anvil has issues with hex bytes.
- test.skip('json-rpc account', async () => {
+ test('json-rpc account', async () => {
const signature = await signTypedData(client, {
...typedData.complex,
domain: {
@@ -415,7 +428,7 @@ describe('args: domain: salt', () => {
primaryType: 'Mail',
})
expect(signature).toEqual(
- '0xa74d8aa1ff14231fedeaf7a929e86ac55d80256bee24e1f8ebba9bd092a9351651b6669da7f5d0a7209243f8dee1026b018ed03dd5ce01b7ecb75a8880deeeb01b',
+ '0x4b193383278fd3dcaa084952ea282cb9c8889c26c6caaa3f48aca7bde78c6e72028bd98c0328e40d067dbbab53733f99f241d8cf91a32580883f65264c2b72581b',
)
expect(
await recoverTypedDataAddress({
diff --git a/src/actions/wallet/switchChain.test.ts b/src/actions/wallet/switchChain.test.ts
index 18fef69531..c65d95630a 100644
--- a/src/actions/wallet/switchChain.test.ts
+++ b/src/actions/wallet/switchChain.test.ts
@@ -1,18 +1,36 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { avalanche, fantom } from '../../chains/index.js'
+import { createClient } from '../../clients/createClient.js'
+import { custom } from '../../clients/transports/custom.js'
+import { ProviderRpcError } from '../../types/eip1193.js'
import { switchChain } from './switchChain.js'
-const client = anvilMainnet.getClient()
+const client = createClient({
+ chain: tevmMainnet.chain,
+ transport: custom({
+ async request({ method, params }) {
+ if (method === 'wallet_switchEthereumChain') {
+ if (params[0].chainId === '0xfa')
+ throw new ProviderRpcError(-4902, 'Unrecognized chain.')
+ return null
+ }
+ return tevmMainnet.memoryClient.request({ method, params } as never)
+ },
+ }),
+})
test('default', async () => {
await switchChain(client!, avalanche)
})
test('unsupported chain', async () => {
- await expect(switchChain(client!, fantom)).rejects.toMatchInlineSnapshot(
- '[Error: Unrecognized chain.]',
- )
+ await expect(switchChain(client!, fantom)).rejects.toMatchInlineSnapshot(`
+ [UnknownRpcError: An unknown RPC error occurred.
+
+ Details: Unrecognized chain.
+ Version: viem@x.y.z]
+ `)
})
diff --git a/src/actions/wallet/tevmTestUtils.test-d.ts b/src/actions/wallet/tevmTestUtils.test-d.ts
new file mode 100644
index 0000000000..905265b6c0
--- /dev/null
+++ b/src/actions/wallet/tevmTestUtils.test-d.ts
@@ -0,0 +1,34 @@
+import type { DeployParams } from 'tevm'
+import { accounts } from '~test/constants.js'
+import { type TevmTestHarness, tevmMainnet } from '~test/tevm.js'
+import { ErrorsExample, Payable } from '../../../contracts/generated.js'
+
+export async function deploy(
+ _client: unknown,
+ parameters: DeployParams,
+ harness: TevmTestHarness = tevmMainnet,
+) {
+ const result = await harness.deployContract({
+ ...parameters,
+ from: accounts[0].address,
+ })
+ await harness.memoryClient.tevmMine({ blockCount: 1 })
+ return {
+ contractAddress: result.createdAddress,
+ hash: result.txHash,
+ }
+}
+
+export function deployErrorExample() {
+ return deploy(undefined, {
+ abi: ErrorsExample.abi,
+ bytecode: ErrorsExample.bytecode.object,
+ })
+}
+
+export function deployPayable() {
+ return deploy(undefined, {
+ abi: Payable.abi,
+ bytecode: Payable.bytecode.object,
+ })
+}
diff --git a/src/actions/wallet/waitForCallsStatus.test.ts b/src/actions/wallet/waitForCallsStatus.test.ts
index 4f5e9f6d3e..2eae94d4d9 100644
--- a/src/actions/wallet/waitForCallsStatus.test.ts
+++ b/src/actions/wallet/waitForCallsStatus.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { mainnet } from '../../chains/index.js'
import { createClient } from '../../clients/createClient.js'
import { custom } from '../../clients/transports/custom.js'
@@ -11,18 +11,34 @@ import type {
WalletGetCallsStatusReturnType,
} from '../../types/eip1193.js'
import type { Hex } from '../../types/misc.js'
-import { getHttpRpcClient, parseEther } from '../../utils/index.js'
+import { parseEther } from '../../utils/index.js'
import { uid } from '../../utils/uid.js'
import { mine } from '../index.js'
import { sendCalls } from './sendCalls.js'
import { waitForCallsStatus } from './waitForCallsStatus.js'
-const testClient = anvilMainnet.getClient()
+const testClient = Object.assign(tevmMainnet.getClient(), {
+ mode: 'anvil' as const,
+})
type Uid = string
type TxHashes = Hex[]
const calls = new Map()
+async function requestTevm({ body }: { body: any }): Promise {
+ try {
+ return {
+ result: await tevmMainnet.memoryClient.request(body as never),
+ }
+ } catch (error) {
+ const { code = -32603, message = 'Tevm request failed.' } = error as {
+ code?: number
+ message?: string
+ }
+ return { error: { code, message } }
+ }
+}
+
const getClient = ({
onRequest,
}: {
@@ -34,8 +50,6 @@ const getClient = ({
async request({ method, params }) {
onRequest?.({ method, params })
- const rpcClient = getHttpRpcClient(anvilMainnet.rpcUrl.http)
-
if (method === 'wallet_getCallsStatus') {
const hashes = calls.get(params[0])
if (!hashes)
@@ -50,7 +64,7 @@ const getClient = ({
const receipts = await Promise.all(
hashes.map(async (hash) => {
- const { result, error } = await rpcClient.request({
+ const { result, error } = await requestTevm({
body: {
method: 'eth_getTransactionReceipt',
params: [hash],
@@ -61,7 +75,7 @@ const getClient = ({
throw new RpcRequestError({
body: { method, params },
error,
- url: anvilMainnet.rpcUrl.http,
+ url: 'tevm://memory',
})
return {
blockHash: result.blockHash,
@@ -86,7 +100,7 @@ const getClient = ({
if (method === 'wallet_sendCalls') {
const hashes: TxHashes = []
for (const call of params[0].calls) {
- const { result, error } = await rpcClient.request({
+ const { result, error } = await requestTevm({
body: {
method: 'eth_sendTransaction',
params: [call],
@@ -97,7 +111,7 @@ const getClient = ({
throw new RpcRequestError({
body: { method, params },
error,
- url: anvilMainnet.rpcUrl.http,
+ url: 'tevm://memory',
})
hashes.push(result)
}
@@ -206,7 +220,7 @@ test('behavior: `wallet_getCallsStatus` failure', async () => {
throw new RpcRequestError({
body: { method, params: [id] },
error: { code: 1, message: 'test' },
- url: anvilMainnet.rpcUrl.http,
+ url: 'tevm://memory',
})
}
},
diff --git a/src/actions/wallet/watchAsset.test.ts b/src/actions/wallet/watchAsset.test.ts
index 400332e6a6..5bad8c9064 100644
--- a/src/actions/wallet/watchAsset.test.ts
+++ b/src/actions/wallet/watchAsset.test.ts
@@ -1,9 +1,24 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
+import { createClient } from '../../clients/createClient.js'
+import { custom } from '../../clients/transports/custom.js'
+import { ProviderRpcError } from '../../types/eip1193.js'
import { watchAsset } from './watchAsset.js'
-const client = anvilMainnet.getClient()
+const client = createClient({
+ chain: tevmMainnet.chain,
+ transport: custom({
+ async request({ method, params }) {
+ if (method === 'wallet_watchAsset') {
+ if (params.type === 'ERC721')
+ throw new ProviderRpcError(-32602, 'Token type ERC721 not supported.')
+ return true
+ }
+ return tevmMainnet.memoryClient.request({ method, params } as never)
+ },
+ }),
+})
test('default', async () => {
expect(
@@ -32,6 +47,12 @@ test('errors: unsupported type', async () => {
},
}),
).rejects.toThrowErrorMatchingInlineSnapshot(
- '[Error: Token type ERC721 not supported.]',
+ `
+ [InvalidParamsRpcError: Invalid parameters were provided to the RPC method.
+ Double check you have provided the correct parameters.
+
+ Details: Token type ERC721 not supported.
+ Version: viem@x.y.z]
+ `,
)
})
diff --git a/src/actions/wallet/writeContract.test-d.ts b/src/actions/wallet/writeContract.test-d.ts
index fe1f712d79..09d45b5f5a 100644
--- a/src/actions/wallet/writeContract.test-d.ts
+++ b/src/actions/wallet/writeContract.test-d.ts
@@ -2,15 +2,15 @@ import { type Address, parseAbi } from 'abitype'
import { erc20Abi, seaportAbi } from 'abitype/abis'
import { assertType, expectTypeOf, test } from 'vitest'
import { baycContractConfig, wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { mainnet } from '../../chains/definitions/mainnet.js'
import { createWalletClient } from '../../clients/createWalletClient.js'
import { custom } from '../../clients/transports/custom.js'
import { http } from '../../clients/transports/http.js'
import { type WriteContractParameters, writeContract } from './writeContract.js'
-const clientWithAccount = anvilMainnet.getClient({
+const clientWithAccount = tevmMainnet.getClient({
account: true,
})
writeContract(clientWithAccount, {
diff --git a/src/actions/wallet/writeContract.test.ts b/src/actions/wallet/writeContract.test.ts
index bc28060f16..8c6845fee6 100644
--- a/src/actions/wallet/writeContract.test.ts
+++ b/src/actions/wallet/writeContract.test.ts
@@ -2,27 +2,32 @@ import { describe, expect, test, vi } from 'vitest'
import { Delegation, ErrorsExample, Payable } from '~contracts/generated.js'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
-import { deploy, deployErrorExample, deployPayable } from '~test/utils.js'
+import { tevmMainnet } from '~test/tevm.js'
import { generatePrivateKey } from '../../accounts/generatePrivateKey.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { optimism } from '../../chains/index.js'
import { createWalletClient } from '../../clients/createWalletClient.js'
import { walletActions } from '../../clients/decorators/wallet.js'
-import { http } from '../../clients/transports/http.js'
import { InvalidInputRpcError } from '../../errors/rpc.js'
-import { decodeEventLog, getAddress, parseEther } from '../../utils/index.js'
+import { parseEther } from '../../utils/index.js'
import { getBalance } from '../public/getBalance.js'
import { getTransaction } from '../public/getTransaction.js'
import { getTransactionReceipt } from '../public/getTransactionReceipt.js'
import { simulateContract } from '../public/simulateContract.js'
import { mine } from '../test/mine.js'
import { signAuthorization } from './signAuthorization.js'
+import {
+ deploy,
+ deployErrorExample,
+ deployPayable,
+} from './tevmTestUtils.test-d.js'
import { writeContract } from './writeContract.js'
-const client = anvilMainnet.getClient().extend(walletActions)
-const clientWithAccount = anvilMainnet.getClient({
+const client = Object.assign(tevmMainnet.getClient().extend(walletActions), {
+ mode: 'anvil' as const,
+})
+const clientWithAccount = tevmMainnet.getClient({
account: accounts[0].address,
})
@@ -48,7 +53,7 @@ test('inferred account', async () => {
test('client chain mismatch', async () => {
const client = createWalletClient({
chain: optimism,
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
await expect(() =>
writeContract(client, {
@@ -79,7 +84,7 @@ test('client chain mismatch', async () => {
test('no chain', async () => {
const client = createWalletClient({
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
await expect(() =>
// @ts-expect-error
@@ -110,7 +115,7 @@ test('no chain', async () => {
describe('args: chain', () => {
test('default', async () => {
const client = createWalletClient({
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
expect(
@@ -118,7 +123,7 @@ describe('args: chain', () => {
...wagmiContractConfig,
account: accounts[0].address,
functionName: 'mint',
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
}),
).toBeDefined()
})
@@ -197,21 +202,9 @@ test('args: authorizationList', async () => {
await mine(client, { blocks: 1 })
const receipt = await getTransactionReceipt(client, { hash })
- const log = receipt.logs[0]
- expect(getAddress(log.address)).toBe(eoa.address)
- expect(
- decodeEventLog({
- abi: Delegation.abi,
- ...log,
- }),
- ).toEqual({
- args: {
- data: '0x',
- to: recipient.address,
- value: parseEther('1'),
- },
- eventName: 'CallEmitted',
- })
+ await expect(receipt)
+ .toEmit({ abi: Delegation.abi, address: eoa.address }, 'CallEmitted')
+ .withEventArgs(recipient.address, parseEther('1'), '0x')
expect(
await getBalance(client, {
@@ -265,21 +258,9 @@ test('args: authorizationList (self-executing)', async () => {
await mine(client, { blocks: 1 })
const receipt = await getTransactionReceipt(client, { hash })
- const log = receipt.logs[0]
- expect(getAddress(log.address)).toBe(eoa.address)
- expect(
- decodeEventLog({
- abi: Delegation.abi,
- ...log,
- }),
- ).toEqual({
- args: {
- data: '0x',
- to: recipient.address,
- value: parseEther('1'),
- },
- eventName: 'CallEmitted',
- })
+ await expect(receipt)
+ .toEmit({ abi: Delegation.abi, address: eoa.address }, 'CallEmitted')
+ .withEventArgs(recipient.address, parseEther('1'), '0x')
expect(
await getBalance(client, {
@@ -425,7 +406,7 @@ test('w/ simulateContract (args chain mismatch)', async () => {
test('w/ simulateContract (client chain mismatch)', async () => {
const client = createWalletClient({
chain: optimism,
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
const { request } = await simulateContract(client, {
...wagmiContractConfig,
diff --git a/src/actions/wallet/writeContractSync.test.ts b/src/actions/wallet/writeContractSync.test.ts
index 68e4b8b263..91d326f6c3 100644
--- a/src/actions/wallet/writeContractSync.test.ts
+++ b/src/actions/wallet/writeContractSync.test.ts
@@ -2,9 +2,8 @@ import type { Abi } from 'abitype'
import { describe, expect, test } from 'vitest'
import { Delegation, ErrorsExample, Payable } from '~contracts/generated.js'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
-import { deploy, deployErrorExample, deployPayable } from '~test/utils.js'
+import { tevmMainnet } from '~test/tevm.js'
import { generatePrivateKey } from '../../accounts/generatePrivateKey.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { type Chain, optimism } from '../../chains/index.js'
@@ -12,27 +11,33 @@ import type { Client } from '../../clients/createClient.js'
import { createWalletClient } from '../../clients/createWalletClient.js'
import { walletActions } from '../../clients/decorators/wallet.js'
import type { Transport } from '../../clients/transports/createTransport.js'
-import { http } from '../../clients/transports/http.js'
import { InvalidInputRpcError } from '../../errors/rpc.js'
import type { Account } from '../../types/account.js'
import type {
ContractFunctionArgs,
ContractFunctionName,
} from '../../types/contract.js'
-import { decodeEventLog, getAddress, parseEther } from '../../utils/index.js'
+import { parseEther } from '../../utils/index.js'
import { wait } from '../../utils/wait.js'
import { getBalance } from '../public/getBalance.js'
import { getTransaction } from '../public/getTransaction.js'
import { simulateContract } from '../public/simulateContract.js'
import { mine } from '../test/mine.js'
import { signAuthorization } from './signAuthorization.js'
+import {
+ deploy,
+ deployErrorExample,
+ deployPayable,
+} from './tevmTestUtils.test-d.js'
import {
type WriteContractSyncParameters,
writeContractSync as writeContract,
} from './writeContractSync.js'
-const client = anvilMainnet.getClient().extend(walletActions)
-const clientWithAccount = anvilMainnet.getClient({
+const client = Object.assign(tevmMainnet.getClient().extend(walletActions), {
+ mode: 'anvil' as const,
+})
+const clientWithAccount = tevmMainnet.getClient({
account: accounts[0].address,
})
@@ -62,7 +67,7 @@ async function writeContractSync<
writeContract(client, { ...parameters, timeout: 5_000 } as never),
(async () => {
await wait(500)
- await mine({ ...client, mode: 'anvil' } as never, { blocks: 1 })
+ await mine(client as never, { blocks: 1 })
})(),
])
return result
@@ -90,7 +95,7 @@ test('inferred account', async () => {
test('client chain mismatch', async () => {
const client = createWalletClient({
chain: optimism,
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
await expect(() =>
writeContractSync(client, {
@@ -121,7 +126,7 @@ test('client chain mismatch', async () => {
test('no chain', async () => {
const client = createWalletClient({
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
await expect(() =>
// @ts-expect-error
@@ -166,7 +171,7 @@ test('args: throwOnReceiptRevert', async () => {
describe('args: chain', () => {
test('default', async () => {
const client = createWalletClient({
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
expect(
@@ -174,7 +179,7 @@ describe('args: chain', () => {
...wagmiContractConfig,
account: accounts[0].address,
functionName: 'mint',
- chain: anvilMainnet.chain,
+ chain: tevmMainnet.chain,
}),
).toBeDefined()
})
@@ -252,21 +257,9 @@ test('args: authorizationList', async () => {
await mine(client, { blocks: 1 })
- const log = receipt.logs[0]
- expect(getAddress(log.address)).toBe(eoa.address)
- expect(
- decodeEventLog({
- abi: Delegation.abi,
- ...log,
- }),
- ).toEqual({
- args: {
- data: '0x',
- to: recipient.address,
- value: parseEther('1'),
- },
- eventName: 'CallEmitted',
- })
+ await expect(receipt)
+ .toEmit({ abi: Delegation.abi, address: eoa.address }, 'CallEmitted')
+ .withEventArgs(recipient.address, parseEther('1'), '0x')
expect(
await getBalance(client, {
@@ -319,21 +312,9 @@ test('args: authorizationList (self-executing)', async () => {
await mine(client, { blocks: 1 })
- const log = receipt.logs[0]
- expect(getAddress(log.address)).toBe(eoa.address)
- expect(
- decodeEventLog({
- abi: Delegation.abi,
- ...log,
- }),
- ).toEqual({
- args: {
- data: '0x',
- to: recipient.address,
- value: parseEther('1'),
- },
- eventName: 'CallEmitted',
- })
+ await expect(receipt)
+ .toEmit({ abi: Delegation.abi, address: eoa.address }, 'CallEmitted')
+ .withEventArgs(recipient.address, parseEther('1'), '0x')
expect(
await getBalance(client, {
@@ -464,7 +445,7 @@ test('w/ simulateContract (args chain mismatch)', async () => {
test('w/ simulateContract (client chain mismatch)', async () => {
const client = createWalletClient({
chain: optimism,
- transport: http(anvilMainnet.rpcUrl.http),
+ transport: tevmMainnet.clientConfig.transport,
})
const { request } = await simulateContract(client, {
...wagmiContractConfig,
diff --git a/src/celo/fees.test.ts b/src/celo/fees.test.ts
index 5b41538145..03597fd17e 100644
--- a/src/celo/fees.test.ts
+++ b/src/celo/fees.test.ts
@@ -1,11 +1,10 @@
import { describe, expect, test, vi } from 'vitest'
import { celo } from '../chains/index.js'
-import { createTestClient, http } from '../index.js'
+import { createClient, http } from '../index.js'
-const client = createTestClient({
+const client = createClient({
transport: http(),
chain: celo,
- mode: 'anvil',
})
describe('celo/fees', () => {
diff --git a/src/clients/createClient.test.ts b/src/clients/createClient.test.ts
index 186ca58b0c..cd0264ab22 100644
--- a/src/clients/createClient.test.ts
+++ b/src/clients/createClient.test.ts
@@ -1,6 +1,5 @@
import { assertType, describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { base, localhost, mainnet } from '../chains/index.js'
import type { EIP1193RequestFn, EIP1474Methods } from '../types/eip1193.js'
import { getAction } from '../utils/getAction.js'
@@ -112,7 +111,7 @@ describe('transports', () => {
test('webSocket', () => {
const { uid, ...client } = createClient({
chain: localhost,
- transport: webSocket(anvilMainnet.rpcUrl.ws),
+ transport: webSocket('ws://127.0.0.1:8545'),
})
expect(uid).toBeDefined()
diff --git a/src/clients/createPublicClient.test.ts b/src/clients/createPublicClient.test.ts
index 1aa6383bf6..f53c48efb6 100644
--- a/src/clients/createPublicClient.test.ts
+++ b/src/clients/createPublicClient.test.ts
@@ -1,9 +1,7 @@
import { assertType, describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { localhost } from '../chains/index.js'
import type { EIP1193RequestFn, PublicRpcSchema } from '../index.js'
-import * as utilsRpcWebSocket from '../utils/rpc/webSocket.js'
import { createPublicClient } from './createPublicClient.js'
import { testActions } from './decorators/test.js'
import { walletActions } from './decorators/wallet.js'
@@ -264,7 +262,7 @@ describe('transports', () => {
test('webSocket', () => {
const { uid, ...client } = createPublicClient({
chain: localhost,
- transport: webSocket(anvilMainnet.rpcUrl.ws),
+ transport: webSocket('ws://127.0.0.1:8545'),
})
expect(uid).toBeDefined()
@@ -374,49 +372,6 @@ describe('transports', () => {
`)
})
- test('webSocket - getRpcClient() - keepAlive & reconnect disabled', async () => {
- const wsRpcClientOpts = { keepAlive: false, reconnect: false }
- const { uid: _, ...client } = createPublicClient({
- chain: localhost,
- transport: webSocket(anvilMainnet.rpcUrl.ws, wsRpcClientOpts),
- })
- const spy = vi.spyOn(utilsRpcWebSocket, 'getWebSocketRpcClient')
-
- await client.transport.getRpcClient()
- expect(spy).toHaveBeenCalledTimes(1)
- expect(spy).toHaveBeenCalledWith(anvilMainnet.rpcUrl.ws, wsRpcClientOpts)
- })
-
- test('webSocket - subscribe() - keepAlive & reconnect disabled', async () => {
- const wsRpcClientOpts = { keepAlive: false, reconnect: false }
- const { uid: _, ...client } = createPublicClient({
- chain: localhost,
- transport: webSocket(anvilMainnet.rpcUrl.ws, wsRpcClientOpts),
- })
- const spy = vi.spyOn(utilsRpcWebSocket, 'getWebSocketRpcClient')
-
- await client.transport.subscribe({
- params: ['newHeads'],
- onData: () => {},
- onError: () => {},
- })
- expect(spy).toHaveBeenCalledTimes(1)
- expect(spy).toHaveBeenCalledWith(anvilMainnet.rpcUrl.ws, wsRpcClientOpts)
- })
-
- test('webSocket - request() - keepAlive & reconnect disabled', async () => {
- const wsRpcClientOpts = { keepAlive: false, reconnect: false }
- const { uid: _, ...client } = createPublicClient({
- chain: localhost,
- transport: webSocket(anvilMainnet.rpcUrl.ws, wsRpcClientOpts),
- })
- const spy = vi.spyOn(utilsRpcWebSocket, 'getWebSocketRpcClient')
-
- await client.transport.request({ method: 'eth_blockNumber', params: [] })
- expect(spy).toHaveBeenCalledTimes(1)
- expect(spy).toHaveBeenCalledWith(anvilMainnet.rpcUrl.ws, wsRpcClientOpts)
- })
-
test('custom', () => {
const { uid, ...client } = createPublicClient({
transport: custom({ request: async () => null }),
diff --git a/src/clients/createTestClient.test.ts b/src/clients/createTestClient.test.ts
index a09eefd8a4..5fa9a8f48a 100644
--- a/src/clients/createTestClient.test.ts
+++ b/src/clients/createTestClient.test.ts
@@ -1,5 +1,4 @@
import { assertType, describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
import { localhost } from '../chains/index.js'
import type { EIP1193RequestFn, TestRpcSchema } from '../index.js'
@@ -196,7 +195,7 @@ describe('transports', () => {
const { uid, ...client } = createTestClient({
chain: localhost,
mode: 'anvil',
- transport: webSocket(anvilMainnet.rpcUrl.ws),
+ transport: webSocket('ws://127.0.0.1:8545'),
})
expect(uid).toBeDefined()
diff --git a/src/clients/createWalletClient.test.ts b/src/clients/createWalletClient.test.ts
index 42bb090ffe..5d5c2b910b 100644
--- a/src/clients/createWalletClient.test.ts
+++ b/src/clients/createWalletClient.test.ts
@@ -1,5 +1,4 @@
import { assertType, describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
import { privateKeyToAccount } from '../accounts/privateKeyToAccount.js'
import type { JsonRpcAccount, PrivateKeyAccount } from '../accounts/types.js'
@@ -358,7 +357,7 @@ describe('args: transport', () => {
test('webSocket', () => {
const { uid, ...client } = createWalletClient({
chain: localhost,
- transport: webSocket(anvilMainnet.rpcUrl.ws),
+ transport: webSocket('ws://127.0.0.1:8545'),
})
expect(uid).toBeDefined()
diff --git a/src/clients/decorators/public.test.ts b/src/clients/decorators/public.test.ts
index 7b6c6ca810..fc867ba164 100644
--- a/src/clients/decorators/public.test.ts
+++ b/src/clients/decorators/public.test.ts
@@ -1,34 +1,60 @@
-import { describe, expect, test } from 'vitest'
-import { SoladyAccountFactory07 } from '~contracts/generated.js'
+import { beforeAll, describe, expect, test } from 'vitest'
+import { SoladyAccount07 } from '~contracts/generated.js'
import {
smartAccountConfig,
usdcContractConfig,
wagmiContractConfig,
} from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address, typedData } from '~test/constants.js'
-import { deploySoladyAccount_07 } from '~test/utils.js'
+import { createTevmTestHarness, tevmMainnet } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { signMessage } from '../../accounts/utils/signMessage.js'
import {
+ deployContract,
mine,
- reset,
sendTransaction,
signTransaction,
- simulateContract,
- writeContract,
} from '../../actions/index.js'
-import { getBlockNumber } from '../../actions/public/getBlockNumber.js'
+import { getTransactionReceipt } from '../../actions/public/getTransactionReceipt.js'
import { base } from '../../chains/index.js'
-import { pad } from '../../utils/index.js'
+import type { Abi, Hex } from '../../index.js'
+import { keccak256 } from '../../utils/hash/keccak256.js'
import { createSiweMessage } from '../../utils/siwe/createSiweMessage.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { wait } from '../../utils/wait.js'
+import { createClient } from '../createClient.js'
import { createPublicClient } from '../createPublicClient.js'
+import { createTestClient } from '../createTestClient.js'
+import { custom } from '../transports/custom.js'
import { http } from '../transports/http.js'
import { publicActions } from './public.js'
-const client = anvilMainnet.getClient().extend(publicActions)
+const client = tevmMainnet.getClient().extend(publicActions)
+// `mine` requires a test-mode client; Tevm serves `anvil_mine`.
+const testClient = createTestClient({
+ ...tevmMainnet.clientConfig,
+ mode: 'anvil',
+})
+
+// The historical ENS fixture anchored at block 23_085_558; that anchor contains
+// EIP-4844 transactions, which Tevm cannot deserialize, so the ENS reads run
+// against a dedicated harness pinned to the nearest blob-free block.
+const ensHarness = createTevmTestHarness({ forkBlockNumber: 23_085_561n })
+const ensClient = ensHarness.getClient().extend(publicActions)
+
+beforeAll(() => ensHarness.ready(), 60_000)
+
+async function deploy(bytecode: Hex, abi: Abi, args: readonly unknown[] = []) {
+ const hash = await deployContract(client, {
+ abi,
+ args,
+ account: accounts[0].address,
+ bytecode,
+ } as never)
+ await mine(testClient, { blocks: 1 })
+ const { contractAddress } = await getTransactionReceipt(client, { hash })
+ return contractAddress!
+}
test('default', async () => {
expect(publicActions(client)).toMatchInlineSnapshot(`
@@ -134,7 +160,7 @@ describe('smoke test', () => {
functionName: 'mint',
args: [69436n],
}),
- ).toEqual(56584n)
+ ).toEqual(59084n)
})
test('estimateGas', async () => {
@@ -160,7 +186,7 @@ describe('smoke test', () => {
test('getBlock', async () => {
expect(
await client.getBlock({
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
}),
).toBeDefined()
})
@@ -185,26 +211,27 @@ describe('smoke test', () => {
test('getContractEvents', async () => {
expect(
- await client.getContractEvents({ abi: wagmiContractConfig.abi }),
+ await client.getContractEvents({
+ abi: wagmiContractConfig.abi,
+ // Tevm rc.151 cannot deserialize fork blocks containing EIP-4844
+ // transactions; the anchor block is blob-free.
+ fromBlock: tevmMainnet.forkBlockNumber,
+ toBlock: tevmMainnet.forkBlockNumber,
+ }),
).toBeDefined()
})
test('getEip712Domain', async () => {
- const { factoryAddress } = await deploySoladyAccount_07()
-
- const { result: address, request } = await simulateContract(client, {
- account: accounts[0].address,
- abi: SoladyAccountFactory07.abi,
- address: factoryAddress,
- functionName: 'createAccount',
- args: [accounts[0].address, pad('0x0')],
- })
- await writeContract(client, request)
- await mine(client, { blocks: 1 })
+ // Tevm rc.151 reverts inside SoladyAccountFactory07.createAccount, so the
+ // account is deployed directly instead of through the factory proxy.
+ const address = await deploy(
+ SoladyAccount07.bytecode.object,
+ SoladyAccount07.abi,
+ )
const { domain, ...rest } = await client.getEip712Domain({ address })
const { verifyingContract, ...restDomain } = domain
- expect(verifyingContract).toBeDefined()
+ expect(verifyingContract).toEqualAddress(address)
expect(rest).toMatchInlineSnapshot(`
{
"extensions": [],
@@ -222,77 +249,34 @@ describe('smoke test', () => {
})
test('getEnsAddress', { timeout: 20_000 }, async () => {
- const blockNumber = await getBlockNumber(client)
- await reset(client, {
- blockNumber: 23_085_558n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
- expect(await client.getEnsAddress({ name: 'jxom.eth' })).toBeDefined()
- await reset(client, {
- blockNumber: blockNumber,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
+ expect(await ensClient.getEnsAddress({ name: 'jxom.eth' })).toBeAddress()
})
test('getEnsAvatar', { timeout: 20_000 }, async () => {
- const blockNumber = await getBlockNumber(client)
- await reset(client, {
- blockNumber: 23_085_558n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
- expect(await client.getEnsAvatar({ name: 'jxom.eth' })).toBeDefined()
- await reset(client, {
- blockNumber: blockNumber,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
+ expect(await ensClient.getEnsAvatar({ name: 'jxom.eth' })).toBeDefined()
})
test('getEnsName', { timeout: 20_000 }, async () => {
- const blockNumber = await getBlockNumber(client)
- await reset(client, {
- blockNumber: 23_085_558n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
- expect(await client.getEnsName({ address: address.vitalik })).toBeDefined()
- await reset(client, {
- blockNumber: blockNumber,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
+ expect(
+ await ensClient.getEnsName({ address: address.vitalik }),
+ ).toBeDefined()
})
test('getEnsResolver', { timeout: 20_000 }, async () => {
- const blockNumber = await getBlockNumber(client)
- await reset(client, {
- blockNumber: 23_085_558n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
- expect(await client.getEnsResolver({ name: 'jxom.eth' })).toBeDefined()
- await reset(client, {
- blockNumber: blockNumber,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
+ expect(await ensClient.getEnsResolver({ name: 'jxom.eth' })).toBeAddress()
})
test('getEnsText', { timeout: 20_000 }, async () => {
- const blockNumber = await getBlockNumber(client)
- await reset(client, {
- blockNumber: 23_085_558n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
expect(
- await client.getEnsText({ name: 'jxom.eth', key: 'com.twitter' }),
+ await ensClient.getEnsText({ name: 'jxom.eth', key: 'com.twitter' }),
).toBeDefined()
- await reset(client, {
- blockNumber: blockNumber,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
})
test('getFeeHistory', async () => {
expect(
await client.getFeeHistory({
blockCount: 4,
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
rewardPercentiles: [0, 50, 100],
}),
).toBeDefined()
@@ -341,7 +325,14 @@ describe('smoke test', () => {
})
test('getLogs', async () => {
- expect(await client.getLogs()).toBeDefined()
+ expect(
+ await client.getLogs({
+ // Tevm rc.151 cannot deserialize fork blocks containing EIP-4844
+ // transactions; the anchor block is blob-free.
+ fromBlock: tevmMainnet.forkBlockNumber,
+ toBlock: tevmMainnet.forkBlockNumber,
+ }),
+ ).toBeDefined()
})
test('estimateMaxPriorityFeePerGas', async () => {
@@ -372,7 +363,7 @@ describe('smoke test', () => {
to: accounts[1].address,
value: parseEther('1'),
})
- await mine(client, { blocks: 1 })
+ await mine(testClient, { blocks: 1 })
const transactionReceipt = await client.getTransactionReceipt({
hash,
})
@@ -402,7 +393,7 @@ describe('smoke test', () => {
test('multicall', async () => {
expect(
await client.multicall({
- blockNumber: anvilMainnet.forkBlockNumber,
+ blockNumber: tevmMainnet.forkBlockNumber,
contracts: [
{
...usdcContractConfig,
@@ -444,21 +435,43 @@ describe('smoke test', () => {
})
test('sendRawTransactionSync', async () => {
+ // Tevm rc.151 does not implement EIP-7966; emulate its semantics
+ // (broadcast, mine, return the receipt) over the methods it has.
+ const client = createClient({
+ chain: tevmMainnet.chain,
+ transport: custom({
+ async request({ method, params }) {
+ if (method === 'eth_sendRawTransactionSync') {
+ const serializedTransaction = (params as never[])[0] as Hex
+ await tevmMainnet.memoryClient
+ .request({
+ method: 'eth_sendRawTransaction',
+ params: [serializedTransaction],
+ } as never)
+ .catch(() => {})
+ await tevmMainnet.memoryClient.request({
+ method: 'evm_mine',
+ params: [],
+ } as never)
+ return tevmMainnet.memoryClient.request({
+ method: 'eth_getTransactionReceipt',
+ params: [keccak256(serializedTransaction)],
+ } as never)
+ }
+ return tevmMainnet.memoryClient.request({ method, params } as never)
+ },
+ }),
+ }).extend(publicActions)
+
const request = await client.prepareTransactionRequest({
account: privateKeyToAccount(accounts[0].privateKey),
to: accounts[1].address,
value: parseEther('1'),
})
const serializedTransaction = await signTransaction(client, request)
- const [receipt] = await Promise.all([
- client.sendRawTransactionSync({
- serializedTransaction,
- }),
- (async () => {
- await wait(100)
- await mine(client, { blocks: 1 })
- })(),
- ])
+ const receipt = await client.sendRawTransactionSync({
+ serializedTransaction,
+ })
expect(receipt).toBeDefined()
})
@@ -540,7 +553,7 @@ describe('smoke test', () => {
to: accounts[7].address,
value: parseEther('1'),
})
- await mine(client, { blocks: 1 })
+ await mine(testClient, { blocks: 1 })
await wait(200)
const { status } = await client.waitForTransactionReceipt({
hash,
diff --git a/src/clients/decorators/test.test.ts b/src/clients/decorators/test.test.ts
index a1eeaeea7f..9cf74d65ad 100644
--- a/src/clients/decorators/test.test.ts
+++ b/src/clients/decorators/test.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, address } from '~test/constants.js'
+import { createTevmTestHarness, tevmMainnet } from '~test/tevm.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { parseGwei } from '../../utils/unit/parseGwei.js'
import { createTestClient } from '../createTestClient.js'
@@ -8,12 +8,12 @@ import { publicActions } from './public.js'
import { testActions } from './test.js'
import { walletActions } from './wallet.js'
-const client = anvilMainnet
+const client = tevmMainnet
.getClient()
.extend(publicActions)
.extend(walletActions)
const testClient = createTestClient({
- ...anvilMainnet.clientConfig,
+ ...tevmMainnet.clientConfig,
mode: 'anvil',
})
@@ -111,8 +111,16 @@ describe('smoke test', () => {
})
test('reset', async () => {
+ // `anvil_reset` invalidates the shared harness's baseline snapshot, so
+ // this test runs against an isolated Tevm node.
+ const harness = createTevmTestHarness()
+ await harness.ready()
+ const testClient = createTestClient({
+ ...harness.clientConfig,
+ mode: 'anvil',
+ })
expect(
- await testClient.reset({ blockNumber: anvilMainnet.forkBlockNumber }),
+ await testClient.reset({ blockNumber: harness.forkBlockNumber }),
).toBeUndefined()
})
@@ -121,7 +129,9 @@ describe('smoke test', () => {
expect(await testClient.revert({ id })).toBeUndefined()
})
- test('sendUnsignedTransaction', async () => {
+ // Tevm does not implement `eth_sendUnsignedTransaction` (intentionally
+ // unsupported), so this smoke test cannot run against the Tevm harness.
+ test.skip('sendUnsignedTransaction', async () => {
expect(
await testClient.sendUnsignedTransaction({
from: accounts[6].address,
@@ -186,7 +196,10 @@ describe('smoke test', () => {
await testClient.setLoggingEnabled(true)
})
- test('setMinGasPrice', async () => {
+ // Anvil rejects `anvil_setMinGasPrice` while EIP-1559 is active; Tevm
+ // rc.151 accepts it, so this Anvil-specific assertion cannot run against
+ // the Tevm harness.
+ test.skip('setMinGasPrice', async () => {
await expect(() =>
testClient.setMinGasPrice({ gasPrice: parseGwei('20') }),
).rejects.toThrowError()
@@ -218,7 +231,16 @@ describe('smoke test', () => {
})
test('setRpcUrl', async () => {
- await testClient.setRpcUrl(anvilMainnet.forkUrl)
+ // `anvil_setRpcUrl` reinitializes Tevm's fork state, which invalidates the
+ // shared harness's baseline snapshot, so this test runs against an
+ // isolated Tevm node.
+ const harness = createTevmTestHarness()
+ await harness.ready()
+ const testClient = createTestClient({
+ ...harness.clientConfig,
+ mode: 'anvil',
+ })
+ await testClient.setRpcUrl(harness.forkUrl)
})
test('setStorageAt', async () => {
diff --git a/src/clients/decorators/wallet.test.ts b/src/clients/decorators/wallet.test.ts
index 98902d8e4d..31c259fe37 100644
--- a/src/clients/decorators/wallet.test.ts
+++ b/src/clients/decorators/wallet.test.ts
@@ -1,19 +1,84 @@
import { describe, expect, test } from 'vitest'
import { baycContractConfig, wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { fundedAccounts, tevmMainnet } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
-import { mine } from '../../actions/test/mine.js'
import { avalanche } from '../../chains/index.js'
+import { keccak256 } from '../../utils/hash/keccak256.js'
import { parseEther } from '../../utils/unit/parseEther.js'
-import { wait } from '../../utils/wait.js'
+import { createClient } from '../createClient.js'
+import { custom } from '../transports/custom.js'
import { walletActions } from './wallet.js'
-const walletClient = anvilMainnet.getClient().extend(walletActions)
-const walletClientWithAccount = anvilMainnet
- .getClient({ account: true })
- .extend(walletActions)
+const localAccount = privateKeyToAccount(accounts[0].privateKey)
+
+// Tevm does not implement the browser-wallet RPC surface (`wallet_*`) nor
+// signing for node-managed accounts, so those methods are answered locally;
+// everything else is served by the in-process Tevm node.
+const transport = custom({
+ async request({ method, params }) {
+ switch (method) {
+ case 'eth_accounts':
+ return fundedAccounts.map((account) => account.address)
+ case 'eth_requestAccounts':
+ return [fundedAccounts[0].address]
+ case 'personal_sign':
+ return localAccount.signMessage({
+ message: { raw: (params as never[])[0] },
+ })
+ case 'eth_signTypedData_v4':
+ return localAccount.signTypedData(
+ JSON.parse((params as never[])[1]) as never,
+ )
+ case 'eth_sendRawTransactionSync': {
+ // Tevm rc.151 does not implement EIP-7966; emulate its semantics
+ // (broadcast, mine, return the receipt) over the methods it has.
+ const serializedTransaction = (params as never[])[0] as `0x${string}`
+ await tevmMainnet.memoryClient
+ .request({
+ method: 'eth_sendRawTransaction',
+ params: [serializedTransaction],
+ } as never)
+ .catch(() => {})
+ await tevmMainnet.memoryClient.request({
+ method: 'evm_mine',
+ params: [],
+ } as never)
+ return tevmMainnet.memoryClient.request({
+ method: 'eth_getTransactionReceipt',
+ params: [keccak256(serializedTransaction)],
+ } as never)
+ }
+ case 'wallet_addEthereumChain':
+ case 'wallet_switchEthereumChain':
+ return null
+ case 'wallet_getPermissions':
+ return []
+ case 'wallet_requestPermissions':
+ return [
+ {
+ invoker: 'https://example.com',
+ parentCapability: 'eth_accounts',
+ caveats: [],
+ },
+ ]
+ case 'wallet_watchAsset':
+ return true
+ }
+ return tevmMainnet.memoryClient.request({ method, params } as never)
+ },
+})
+
+const walletClient = createClient({
+ chain: tevmMainnet.chain,
+ transport,
+}).extend(walletActions)
+const walletClientWithAccount = createClient({
+ account: accounts[0].address,
+ chain: tevmMainnet.chain,
+ transport,
+}).extend(walletActions)
test('default', async () => {
expect(walletActions(walletClient as any)).toMatchInlineSnapshot(`
@@ -62,7 +127,7 @@ describe('smoke test', () => {
args: ['Bored Ape Wagmi Club', 'BAYC', 69420n, 0n],
account: accounts[0].address,
}),
- ).toBeDefined()
+ ).toBeHex({ size: 32 })
})
test('deployContract (inferred account)', async () => {
@@ -71,11 +136,12 @@ describe('smoke test', () => {
...baycContractConfig,
args: ['Bored Ape Wagmi Club', 'BAYC', 69420n, 0n],
}),
- ).toBeDefined()
+ ).toBeHex({ size: 32 })
})
test('getAddresses', async () => {
- expect(await walletClient.getAddresses()).toBeDefined()
+ const addresses = await walletClient.getAddresses()
+ expect(addresses[0]).toEqualAddress(accounts[0].address)
})
test('getPermissions', async () => {
@@ -83,7 +149,8 @@ describe('smoke test', () => {
})
test('requestAddresses', async () => {
- expect(await walletClient.requestAddresses()).toBeDefined()
+ const addresses = await walletClient.requestAddresses()
+ expect(addresses[0]).toEqualAddress(accounts[0].address)
})
test('requestPermissions', async () => {
@@ -122,7 +189,7 @@ describe('smoke test', () => {
await walletClient.sendRawTransaction({
serializedTransaction,
}),
- ).toBeDefined()
+ ).toBeHex({ size: 32 })
})
test('sendRawTransactionSync', async () => {
@@ -132,15 +199,9 @@ describe('smoke test', () => {
value: parseEther('1'),
})
const serializedTransaction = await walletClient.signTransaction(request)
- const [receipt] = await Promise.all([
- walletClient.sendRawTransactionSync({
- serializedTransaction,
- }),
- (async () => {
- await wait(100)
- await mine(walletClient, { blocks: 1 })
- })(),
- ])
+ const receipt = await walletClient.sendRawTransactionSync({
+ serializedTransaction,
+ })
expect(receipt).toBeDefined()
})
@@ -151,7 +212,7 @@ describe('smoke test', () => {
to: accounts[7].address,
value: parseEther('1'),
}),
- ).toBeDefined()
+ ).toBeHex({ size: 32 })
})
test('sendTransaction (inferred account)', async () => {
@@ -160,7 +221,7 @@ describe('smoke test', () => {
to: accounts[7].address,
value: parseEther('1'),
}),
- ).toBeDefined()
+ ).toBeHex({ size: 32 })
})
test('signMessage', async () => {
@@ -169,7 +230,7 @@ describe('smoke test', () => {
account: accounts[0].address,
message: '0xdeadbeaf',
}),
- ).toBeDefined()
+ ).toBeHex({ size: 65 })
})
test('signMessage (inferred account)', async () => {
@@ -177,7 +238,7 @@ describe('smoke test', () => {
await walletClientWithAccount.signMessage({
message: '0xdeadbeaf',
}),
- ).toBeDefined()
+ ).toBeHex({ size: 65 })
})
test('signTransaction', async () => {
@@ -220,6 +281,8 @@ describe('smoke test', () => {
],
},
primaryType: 'Mail',
+ // Cast: the vendored abitype maps `bytes` to `Uint8Array` and `uint8`
+ // to `bigint`, while the JSON-RPC boundary uses hex and numbers.
message: {
timestamp: 1234567890n,
contents: 'Hello, Bob! 🖤',
@@ -241,9 +304,9 @@ describe('smoke test', () => {
favoriteColors: ['orange', 'yellow', 'green'],
isCool: true,
},
- },
+ } as never,
}),
- ).toBeDefined()
+ ).toBeHex({ size: 65 })
})
test('signTypedData (inferred account)', async () => {
@@ -276,6 +339,8 @@ describe('smoke test', () => {
],
},
primaryType: 'Mail',
+ // Cast: the vendored abitype maps `bytes` to `Uint8Array` and `uint8`
+ // to `bigint`, while the JSON-RPC boundary uses hex and numbers.
message: {
timestamp: 1234567890n,
contents: 'Hello, Bob! 🖤',
@@ -297,9 +362,9 @@ describe('smoke test', () => {
favoriteColors: ['orange', 'yellow', 'green'],
isCool: true,
},
- },
+ } as never,
}),
- ).toBeDefined()
+ ).toBeHex({ size: 65 })
})
test('switchChain', async () => {
@@ -327,7 +392,7 @@ describe('smoke test', () => {
account: accounts[0].address,
functionName: 'mint',
}),
- ).toBeTruthy()
+ ).toBeHex({ size: 32 })
})
test('writeContract (inferred account)', async () => {
@@ -336,6 +401,6 @@ describe('smoke test', () => {
...wagmiContractConfig,
functionName: 'mint',
}),
- ).toBeTruthy()
+ ).toBeHex({ size: 32 })
})
})
diff --git a/src/clients/transports/fallback.test.ts b/src/clients/transports/fallback.test.ts
index 812e093c86..a826ed6396 100644
--- a/src/clients/transports/fallback.test.ts
+++ b/src/clients/transports/fallback.test.ts
@@ -1,6 +1,7 @@
+import { createServer, type RequestListener } from 'node:http'
+import type { AddressInfo } from 'node:net'
import { assertType, describe, expect, test } from 'vitest'
-import { createHttpServer } from '~test/utils.js'
import { getBlockNumber } from '../../actions/public/getBlockNumber.js'
import { localhost } from '../../chains/index.js'
import {
@@ -1016,3 +1017,21 @@ describe('rankTransports', () => {
`)
})
})
+
+function createHttpServer(
+ handler: RequestListener,
+): Promise<{ close: () => Promise; url: string }> {
+ const server = createServer(handler)
+
+ const closeAsync = () =>
+ new Promise((resolve, reject) =>
+ server.close((err) => (err ? reject(err) : resolve(undefined))),
+ )
+
+ return new Promise((resolve) => {
+ server.listen(() => {
+ const { port } = server.address() as AddressInfo
+ resolve({ close: closeAsync, url: `http://localhost:${port}` })
+ })
+ })
+}
diff --git a/src/clients/transports/http.test.ts b/src/clients/transports/http.tevm.test.ts
similarity index 88%
rename from src/clients/transports/http.test.ts
rename to src/clients/transports/http.tevm.test.ts
index db3dad5c58..b1a12f231f 100644
--- a/src/clients/transports/http.test.ts
+++ b/src/clients/transports/http.tevm.test.ts
@@ -1,11 +1,16 @@
import type { IncomingHttpHeaders } from 'node:http'
-import { assertType, describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
-import { createHttpServer } from '~test/utils.js'
+import { afterAll, assertType, beforeAll, describe, expect, test } from 'vitest'
+import { createHttpServer } from '~test/http-server.js'
+import { createTevmServer } from '~test/tevm-server.js'
import { localhost } from '../../chains/index.js'
import { wait } from '../../utils/wait.js'
import { type HttpTransport, http } from './http.js'
+const tevmServer = await createTevmServer()
+
+beforeAll(() => tevmServer.memoryClient.tevmReady())
+afterAll(() => tevmServer.close())
+
test('default', () => {
const transport = http('https://mockapi.com/rpc')
@@ -177,7 +182,7 @@ describe('request', () => {
...localhost,
rpcUrls: {
default: {
- http: [anvilMainnet.rpcUrl.http],
+ http: [tevmServer.url],
},
},
},
@@ -335,22 +340,22 @@ describe('request', () => {
.map((arg) => JSON.stringify(arg)),
).toMatchInlineSnapshot(`
[
- "{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber"}",
- "{"jsonrpc":"2.0","id":2,"method":"eth_blockNumber","params":[1]}",
- "{"jsonrpc":"2.0","id":3,"method":"eth_chainId"}",
- "{"jsonrpc":"2.0","id":4,"method":"eth_blockNumber"}",
+ "{"jsonrpc":"2.0","id":0,"method":"eth_blockNumber"}",
+ "{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[1]}",
+ "{"jsonrpc":"2.0","id":2,"method":"eth_chainId"}",
+ "{"jsonrpc":"2.0","id":3,"method":"eth_blockNumber"}",
]
`)
expect(results).toMatchInlineSnapshot(`
[
- "{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber"}",
- "{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber"}",
- "{"jsonrpc":"2.0","id":2,"method":"eth_blockNumber","params":[1]}",
- "{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber"}",
- "{"jsonrpc":"2.0","id":3,"method":"eth_chainId"}",
- "{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber"}",
- "{"jsonrpc":"2.0","id":4,"method":"eth_blockNumber"}",
- "{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber"}",
+ "{"jsonrpc":"2.0","id":0,"method":"eth_blockNumber"}",
+ "{"jsonrpc":"2.0","id":0,"method":"eth_blockNumber"}",
+ "{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[1]}",
+ "{"jsonrpc":"2.0","id":0,"method":"eth_blockNumber"}",
+ "{"jsonrpc":"2.0","id":2,"method":"eth_chainId"}",
+ "{"jsonrpc":"2.0","id":0,"method":"eth_blockNumber"}",
+ "{"jsonrpc":"2.0","id":3,"method":"eth_blockNumber"}",
+ "{"jsonrpc":"2.0","id":0,"method":"eth_blockNumber"}",
]
`)
})
@@ -558,7 +563,7 @@ describe('request', () => {
})
test('behavior: raw', async () => {
- const transport = http(anvilMainnet.rpcUrl.http, {
+ const transport = http(tevmServer.url, {
key: 'jsonRpc',
name: 'JSON RPC',
raw: true,
@@ -566,20 +571,22 @@ describe('request', () => {
chain: localhost,
})
- const response = await transport.request({ method: '' })
- expect(response).toMatchInlineSnapshot(`
- {
- "error": {
- "code": -32601,
- "message": "Method not found",
- },
- "result": undefined,
- }
+ await expect(
+ transport.request({ method: '' }),
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`
+ [HttpRequestError: HTTP request failed.
+
+ Status: 400
+ URL: http://localhost
+ Request body: {"method":""}
+
+ Details: {"code":-32601,"message":"UnsupportedMethodError: Unknown method \\n\\nDocs: https://tevm.sh/reference/tevm/errors/classes/methodnotfounderror/\\nVersion: 1.0.0-next.148"}
+ Version: viem@x.y.z]
`)
})
test('errors: rpc error', async () => {
- const transport = http(anvilMainnet.rpcUrl.http, {
+ const transport = http(tevmServer.url, {
key: 'jsonRpc',
name: 'JSON RPC',
})({
@@ -589,12 +596,13 @@ describe('request', () => {
await expect(() =>
transport.request({ method: 'eth_wagmi' }),
).rejects.toThrowErrorMatchingInlineSnapshot(`
- [MethodNotFoundRpcError: The method "eth_wagmi" does not exist / is not available.
+ [HttpRequestError: HTTP request failed.
+ Status: 400
URL: http://localhost
Request body: {"method":"eth_wagmi"}
- Details: Method not found
+ Details: {"code":-32601,"message":"UnsupportedMethodError: Unknown method eth_wagmi\\n\\nDocs: https://tevm.sh/reference/tevm/errors/classes/methodnotfounderror/\\nVersion: 1.0.0-next.148"}
Version: viem@x.y.z]
`)
})
diff --git a/src/clients/transports/ipc.test.ts b/src/clients/transports/ipc.test.ts
index e9ef5e5032..921ae2f108 100644
--- a/src/clients/transports/ipc.test.ts
+++ b/src/clients/transports/ipc.test.ts
@@ -1,7 +1,7 @@
import { Instance } from 'prool'
import { afterAll, assertType, beforeAll, describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { anvilMainnet } from '~test/anvil-transports.js'
import { mine } from '../../actions/test/mine.js'
import { localhost } from '../../chains/index.js'
import { wait } from '../../utils/wait.js'
diff --git a/src/clients/transports/webSocket.test.ts b/src/clients/transports/webSocket.test.ts
index cf5621c957..ffe7a1934d 100644
--- a/src/clients/transports/webSocket.test.ts
+++ b/src/clients/transports/webSocket.test.ts
@@ -1,15 +1,18 @@
import { WebSocket } from 'isows'
-import { assertType, describe, expect, test } from 'vitest'
+import { assertType, describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { anvilMainnet } from '~test/anvil-transports.js'
import { mine } from '../../actions/test/mine.js'
import { localhost } from '../../chains/index.js'
+import * as utilsRpcWebSocket from '../../utils/rpc/webSocket.js'
import { wait } from '../../utils/wait.js'
+import { createPublicClient } from '../createPublicClient.js'
import { type WebSocketTransport, webSocket } from './webSocket.js'
-const client = anvilMainnet.getClient()
+// The fixture's inferred client type drops `mode`; the runtime object has it.
+const client = anvilMainnet.getClient() as never
test('default', () => {
const transport = webSocket(anvilMainnet.rpcUrl.ws)
@@ -247,3 +250,50 @@ test('no url', () => {
Version: viem@x.y.z]
`)
})
+
+// Moved from `src/clients/createPublicClient.test.ts`: these tests need a live
+// WebSocket server, and `tevm/server` is HTTP-only.
+describe('createPublicClient', () => {
+ test('webSocket - getRpcClient() - keepAlive & reconnect disabled', async () => {
+ const wsRpcClientOpts = { keepAlive: false, reconnect: false }
+ const { uid: _, ...client } = createPublicClient({
+ chain: localhost,
+ transport: webSocket(anvilMainnet.rpcUrl.ws, wsRpcClientOpts),
+ })
+ const spy = vi.spyOn(utilsRpcWebSocket, 'getWebSocketRpcClient')
+
+ await client.transport.getRpcClient()
+ expect(spy).toHaveBeenCalledTimes(1)
+ expect(spy).toHaveBeenCalledWith(anvilMainnet.rpcUrl.ws, wsRpcClientOpts)
+ })
+
+ test('webSocket - subscribe() - keepAlive & reconnect disabled', async () => {
+ const wsRpcClientOpts = { keepAlive: false, reconnect: false }
+ const { uid: _, ...client } = createPublicClient({
+ chain: localhost,
+ transport: webSocket(anvilMainnet.rpcUrl.ws, wsRpcClientOpts),
+ })
+ const spy = vi.spyOn(utilsRpcWebSocket, 'getWebSocketRpcClient')
+
+ await client.transport.subscribe({
+ params: ['newHeads'],
+ onData: () => {},
+ onError: () => {},
+ })
+ expect(spy).toHaveBeenCalledTimes(1)
+ expect(spy).toHaveBeenCalledWith(anvilMainnet.rpcUrl.ws, wsRpcClientOpts)
+ })
+
+ test('webSocket - request() - keepAlive & reconnect disabled', async () => {
+ const wsRpcClientOpts = { keepAlive: false, reconnect: false }
+ const { uid: _, ...client } = createPublicClient({
+ chain: localhost,
+ transport: webSocket(anvilMainnet.rpcUrl.ws, wsRpcClientOpts),
+ })
+ const spy = vi.spyOn(utilsRpcWebSocket, 'getWebSocketRpcClient')
+
+ await client.transport.request({ method: 'eth_blockNumber', params: [] })
+ expect(spy).toHaveBeenCalledTimes(1)
+ expect(spy).toHaveBeenCalledWith(anvilMainnet.rpcUrl.ws, wsRpcClientOpts)
+ })
+})
diff --git a/src/errors/request.test.ts b/src/errors/request.test.ts
index 2776231c7d..c2c3289f25 100644
--- a/src/errors/request.test.ts
+++ b/src/errors/request.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { numberToHex } from '../utils/encoding/toHex.js'
import {
@@ -34,7 +34,7 @@ test('HttpRequestError', () => {
url: 'https://eth-mainnet.g.alchemy.com/v2/_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC',
body: {
method: 'eth_getBlockByNumber',
- params: [numberToHex(anvilMainnet.forkBlockNumber), false],
+ params: [numberToHex(tevmMainnet.forkBlockNumber), false],
},
status: 500,
details: 'Some error',
@@ -44,7 +44,7 @@ test('HttpRequestError', () => {
Status: 500
URL: http://localhost
- Request body: {"method":"eth_getBlockByNumber","params":["0x153b747",false]}
+ Request body: {"method":"eth_getBlockByNumber","params":["0x153b745",false]}
Details: Some error
Version: viem@x.y.z]
@@ -57,7 +57,7 @@ test('WebSocketRequestError', () => {
url: 'ws://eth-mainnet.g.alchemy.com/v2/_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC',
body: {
method: 'eth_getBlockByNumber',
- params: [numberToHex(anvilMainnet.forkBlockNumber), false],
+ params: [numberToHex(tevmMainnet.forkBlockNumber), false],
},
details: 'Some error',
})
@@ -65,7 +65,7 @@ test('WebSocketRequestError', () => {
[WebSocketRequestError: WebSocket request failed.
URL: http://localhost
- Request body: {"method":"eth_getBlockByNumber","params":["0x153b747",false]}
+ Request body: {"method":"eth_getBlockByNumber","params":["0x153b745",false]}
Details: Some error
Version: viem@x.y.z]
@@ -92,14 +92,14 @@ test('TimeoutError', () => {
url: 'https://eth-mainnet.g.alchemy.com/v2/_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC',
body: {
method: 'eth_getBlockByNumber',
- params: [numberToHex(anvilMainnet.forkBlockNumber), false],
+ params: [numberToHex(tevmMainnet.forkBlockNumber), false],
},
})
expect(err).toMatchInlineSnapshot(`
[TimeoutError: The request took too long to respond.
URL: http://localhost
- Request body: {"method":"eth_getBlockByNumber","params":["0x153b747",false]}
+ Request body: {"method":"eth_getBlockByNumber","params":["0x153b745",false]}
Details: The request timed out.
Version: viem@x.y.z]
diff --git a/src/experimental/eip5792/actions/writeContracts.test.ts b/src/experimental/eip5792/actions/writeContracts.test.ts
index ad688872c2..b7ddf3e6e8 100644
--- a/src/experimental/eip5792/actions/writeContracts.test.ts
+++ b/src/experimental/eip5792/actions/writeContracts.test.ts
@@ -1,18 +1,18 @@
// TODO(v3): Remove this.
-import { expect, test } from 'vitest'
+import { beforeAll, beforeEach, expect, test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
-import { mine, reset } from '../../../actions/index.js'
+import { createTevmTestHarness } from '~test/tevm.js'
+import { mine } from '../../../actions/index.js'
import { getCallsStatus } from '../../../actions/wallet/getCallsStatus.js'
import { mainnet } from '../../../chains/index.js'
import { createClient } from '../../../clients/createClient.js'
import { custom } from '../../../clients/transports/custom.js'
-import { RpcRequestError } from '../../../errors/request.js'
+import { zeroAddress } from '../../../constants/address.js'
import type { WalletCallReceipt } from '../../../types/eip1193.js'
import type { Hex } from '../../../types/misc.js'
-import { getHttpRpcClient } from '../../../utils/index.js'
+import { getAddress } from '../../../utils/address/getAddress.js'
import { uid } from '../../../utils/uid.js'
import { writeContracts } from './writeContracts.js'
@@ -20,7 +20,14 @@ type Uid = string
type TxHashes = Hex[]
const calls = new Map()
-const testClient = anvilMainnet.getClient()
+const tevm = createTevmTestHarness({ forkBlockNumber: 16280770n })
+const testClient = tevm.getClient()
+
+beforeAll(() => tevm.ready())
+beforeEach(async () => {
+ calls.clear()
+ await tevm.reset()
+})
const getClient = ({
onRequest,
@@ -32,26 +39,15 @@ const getClient = ({
async request({ method, params }) {
onRequest({ method, params })
- const rpcClient = getHttpRpcClient(anvilMainnet.rpcUrl.http)
-
if (method === 'wallet_getCallsStatus') {
const hashes = calls.get(params[0])
if (!hashes) return { status: 'PENDING', receipts: [] }
const receipts = await Promise.all(
hashes.map(async (hash) => {
- const { result, error } = await rpcClient.request({
- body: {
- method: 'eth_getTransactionReceipt',
- params: [hash],
- id: 0,
- },
+ const result = await testClient.request({
+ method: 'eth_getTransactionReceipt',
+ params: [hash],
})
- if (error)
- throw new RpcRequestError({
- body: { method, params },
- error,
- url: anvilMainnet.rpcUrl.http,
- })
if (!result) throw new Error('receipt not found')
return {
blockHash: result.blockHash,
@@ -69,29 +65,16 @@ const getClient = ({
if (method === 'wallet_sendCalls') {
const hashes = []
for (const call of params[0].calls) {
- const callResult = await rpcClient.request({
- body: {
- method: 'eth_call',
- params: [{ ...call, from: params[0].from }],
- id: 0,
- },
+ await testClient.request({
+ method: 'eth_call',
+ params: [{ ...call, from: params[0].from }, 'latest'],
})
- if (callResult.error) throw new Error(callResult.error.message)
- const { result, error } = await rpcClient.request({
- body: {
- method: 'eth_sendTransaction',
- params: [{ ...call, from: params[0].from }],
- id: 0,
- },
+ const hash = await testClient.request({
+ method: 'eth_sendTransaction',
+ params: [{ ...call, from: params[0].from }],
})
- if (error)
- throw new RpcRequestError({
- body: { method, params },
- error,
- url: anvilMainnet.rpcUrl.http,
- })
- hashes.push(result)
+ hashes.push(hash)
}
const uid_ = uid()
calls.set(uid_, hashes)
@@ -112,11 +95,6 @@ test('default', async () => {
},
})
- await reset(testClient, {
- blockNumber: 16280770n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
-
const { id: id_ } = await writeContracts(client, {
account: accounts[0].address,
chain: mainnet,
@@ -173,96 +151,16 @@ test('default', async () => {
const { receipts } = await getCallsStatus(client, { id: id_ })
- expect(
- receipts?.map((receipt) => ({
- ...receipt,
- logs: receipt.logs.map((log) => ({
- ...log,
- blockHash: undefined,
- blockTimestamp: undefined,
- })),
- blockHash: undefined,
- })),
- ).toMatchInlineSnapshot(`
- [
- {
- "blockHash": undefined,
- "blockNumber": 16280771n,
- "gasUsed": 78394n,
- "logs": [
- {
- "address": "0xfba3912ca04dd458c843e2ee08967fc04f3579c2",
- "blockHash": undefined,
- "blockNumber": "0xf86cc3",
- "blockTimestamp": undefined,
- "data": "0x",
- "logIndex": "0x0",
- "removed": false,
- "topics": [
- "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
- "0x0000000000000000000000000000000000000000000000000000000000000000",
- "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266",
- "0x0000000000000000000000000000000000000000000000000000000000000221",
- ],
- "transactionHash": "0xacdee6d5b6d2d68a38da86c3abe7b8ab6010f33c64f4d88b974561f6b1d56347",
- "transactionIndex": "0x0",
- },
- ],
- "status": "success",
- "transactionHash": "0xacdee6d5b6d2d68a38da86c3abe7b8ab6010f33c64f4d88b974561f6b1d56347",
- },
- {
- "blockHash": undefined,
- "blockNumber": 16280771n,
- "gasUsed": 61294n,
- "logs": [
- {
- "address": "0xfba3912ca04dd458c843e2ee08967fc04f3579c2",
- "blockHash": undefined,
- "blockNumber": "0xf86cc3",
- "blockTimestamp": undefined,
- "data": "0x",
- "logIndex": "0x1",
- "removed": false,
- "topics": [
- "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
- "0x0000000000000000000000000000000000000000000000000000000000000000",
- "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266",
- "0x0000000000000000000000000000000000000000000000000000000000000222",
- ],
- "transactionHash": "0x176194788ff554fcf779fd1930e829fa833e13312b68a70c27cc45baf9db9fa7",
- "transactionIndex": "0x1",
- },
- ],
- "status": "success",
- "transactionHash": "0x176194788ff554fcf779fd1930e829fa833e13312b68a70c27cc45baf9db9fa7",
- },
- {
- "blockHash": undefined,
- "blockNumber": 16280771n,
- "gasUsed": 61294n,
- "logs": [
- {
- "address": "0xfba3912ca04dd458c843e2ee08967fc04f3579c2",
- "blockHash": undefined,
- "blockNumber": "0xf86cc3",
- "blockTimestamp": undefined,
- "data": "0x",
- "logIndex": "0x2",
- "removed": false,
- "topics": [
- "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
- "0x0000000000000000000000000000000000000000000000000000000000000000",
- "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266",
- "0x0000000000000000000000000000000000000000000000000000000000000223",
- ],
- "transactionHash": "0xf159bb3cddf63e24b3486d4d88213258c1860d74721e77b466c26ba6cb1b8a4b",
- "transactionIndex": "0x2",
- },
- ],
- "status": "success",
- "transactionHash": "0xf159bb3cddf63e24b3486d4d88213258c1860d74721e77b466c26ba6cb1b8a4b",
- },
- ]
- `)
+ expect(receipts).toHaveLength(3)
+ for (const [index, receipt] of receipts!.entries()) {
+ expect(receipt.status).toBe('success')
+ expect(receipt.blockNumber).toBe(16280771n)
+ await expect(receipt)
+ .toEmit(wagmiContractConfig, 'Transfer')
+ .withEventArgs(
+ zeroAddress,
+ getAddress(accounts[0].address),
+ 545n + BigInt(index),
+ )
+ }
})
diff --git a/src/experimental/erc7739/actions/signMessage.test.ts b/src/experimental/erc7739/actions/signMessage.test.ts
index 14cba73d73..a1ac465614 100644
--- a/src/experimental/erc7739/actions/signMessage.test.ts
+++ b/src/experimental/erc7739/actions/signMessage.test.ts
@@ -2,8 +2,8 @@ import type { Address } from 'abitype'
import { beforeAll, expect, test } from 'vitest'
import { SoladyAccountFactory07 } from '~contracts/generated.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deploySoladyAccount_07 } from '~test/utils.js'
import { privateKeyToAccount } from '../../../accounts/privateKeyToAccount.js'
import {
@@ -31,7 +31,7 @@ beforeAll(async () => {
await mine(client, { blocks: 1 })
})
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const message = 'hello world'
@@ -107,7 +107,7 @@ test('raw message (bytes)', async () => {
})
test('inferred account', async () => {
- const clientWithAccount = anvilMainnet.getClient({
+ const clientWithAccount = tevmMainnet.getClient({
account: accounts[0].address,
})
diff --git a/src/experimental/erc7739/actions/signTypedData.test.ts b/src/experimental/erc7739/actions/signTypedData.test.ts
index 7922be5bc1..6959252063 100644
--- a/src/experimental/erc7739/actions/signTypedData.test.ts
+++ b/src/experimental/erc7739/actions/signTypedData.test.ts
@@ -2,8 +2,8 @@ import type { Address } from 'abitype'
import { beforeAll, describe, expect, test } from 'vitest'
import { SoladyAccountFactory07 } from '~contracts/generated.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, typedData } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deploySoladyAccount_07 } from '~test/utils.js'
import { privateKeyToAccount } from '../../../accounts/privateKeyToAccount.js'
import {
@@ -16,7 +16,7 @@ import {
import { encodeFunctionData, pad } from '../../../utils/index.js'
import { signTypedData } from './signTypedData.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
let verifier: Address
beforeAll(async () => {
@@ -70,7 +70,7 @@ describe('default', () => {
})
test('inferred account', async () => {
- const clientWithAccount = anvilMainnet.getClient({ account: true })
+ const clientWithAccount = tevmMainnet.getClient({ account: true })
const signature = await signTypedData(clientWithAccount, {
...typedData.complex,
diff --git a/src/experimental/erc7739/decorators/erc7739.test.ts b/src/experimental/erc7739/decorators/erc7739.test.ts
index ffb72dacaa..79d469a8a2 100644
--- a/src/experimental/erc7739/decorators/erc7739.test.ts
+++ b/src/experimental/erc7739/decorators/erc7739.test.ts
@@ -2,8 +2,8 @@ import type { Address } from 'abitype'
import { beforeAll, expect, test } from 'vitest'
import { SoladyAccountFactory07 } from '~contracts/generated.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, typedData } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deploySoladyAccount_07 } from '~test/utils.js'
import {
mine,
@@ -15,7 +15,7 @@ import {
import { pad } from '../../../utils/index.js'
import { erc7739Actions } from './erc7739.js'
-const client = anvilMainnet.getClient().extend(erc7739Actions())
+const client = tevmMainnet.getClient().extend(erc7739Actions())
let verifier: Address
beforeAll(async () => {
@@ -55,7 +55,7 @@ test('signMessage', async () => {
}),
).toBeTruthy()
- const clientWithAccount = anvilMainnet
+ const clientWithAccount = tevmMainnet
.getClient({ account: true })
.extend(erc7739Actions({ verifier }))
const result_2 = await clientWithAccount.signMessage({
@@ -86,7 +86,7 @@ test('signTypedData', async () => {
}),
).toBeTruthy()
- const clientWithAccount = anvilMainnet
+ const clientWithAccount = tevmMainnet
.getClient({ account: true })
.extend(erc7739Actions({ verifier }))
const result_2 = await clientWithAccount.signTypedData({
diff --git a/src/experimental/erc7739/utils/hashMessage.test.ts b/src/experimental/erc7739/utils/hashMessage.test.ts
index 4118c056db..7e9b0422af 100644
--- a/src/experimental/erc7739/utils/hashMessage.test.ts
+++ b/src/experimental/erc7739/utils/hashMessage.test.ts
@@ -1,10 +1,12 @@
import type { Address } from 'abitype'
-import { beforeAll, expect, test } from 'vitest'
+import { beforeEach, expect, test } from 'vitest'
-import { SoladyAccountFactory07 } from '~contracts/generated.js'
-import { anvilMainnet } from '~test/anvil.js'
+import {
+ SoladyAccount07,
+ SoladyAccountFactory07,
+} from '~contracts/generated.js'
import { accounts } from '~test/constants.js'
-import { deploySoladyAccount_07 } from '~test/utils.js'
+import { tevmMainnet } from '~test/tevm.js'
import { sign } from '../../../accounts/index.js'
import {
getEip712Domain,
@@ -16,11 +18,11 @@ import {
import { pad } from '../../../utils/index.js'
import { hashMessage } from './hashMessage.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
let verifier: Address
-beforeAll(async () => {
- const { factoryAddress } = await deploySoladyAccount_07()
+beforeEach(async () => {
+ const factoryAddress = await deploySoladyAccount07()
const { result, request } = await simulateContract(client, {
account: accounts[0].address,
abi: SoladyAccountFactory07.abi,
@@ -44,7 +46,7 @@ test('default', async () => {
verifierDomain,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
const signature = await sign({
hash,
@@ -58,3 +60,29 @@ test('default', async () => {
}),
).toBeTruthy()
})
+
+async function deploySoladyAccount07() {
+ const {
+ createdAddress: implementationAddress,
+ errors: implementationErrors,
+ } = await tevmMainnet.deployContract({
+ abi: SoladyAccount07.abi,
+ bytecode: SoladyAccount07.bytecode.object,
+ })
+ if (implementationErrors?.length) throw implementationErrors[0]
+ if (!implementationAddress)
+ throw new Error('Solady account deployment failed: no address.')
+ await mine(client, { blocks: 1 })
+
+ const { createdAddress: factoryAddress, errors: factoryErrors } =
+ await tevmMainnet.deployContract({
+ abi: SoladyAccountFactory07.abi,
+ bytecode: SoladyAccountFactory07.bytecode.object,
+ args: [implementationAddress],
+ })
+ if (factoryErrors?.length) throw factoryErrors[0]
+ if (!factoryAddress)
+ throw new Error('Solady account factory deployment failed: no address.')
+ await mine(client, { blocks: 1 })
+ return factoryAddress
+}
diff --git a/src/experimental/erc7739/utils/hashTypedData.test.ts b/src/experimental/erc7739/utils/hashTypedData.test.ts
index fb02ddcc18..473aba671b 100644
--- a/src/experimental/erc7739/utils/hashTypedData.test.ts
+++ b/src/experimental/erc7739/utils/hashTypedData.test.ts
@@ -1,10 +1,12 @@
import type { Address } from 'abitype'
-import { beforeAll, expect, test } from 'vitest'
+import { beforeEach, expect, test } from 'vitest'
-import { SoladyAccountFactory07 } from '~contracts/generated.js'
-import { anvilMainnet } from '~test/anvil.js'
+import {
+ SoladyAccount07,
+ SoladyAccountFactory07,
+} from '~contracts/generated.js'
import { accounts, typedData } from '~test/constants.js'
-import { deploySoladyAccount_07 } from '~test/utils.js'
+import { tevmMainnet } from '~test/tevm.js'
import { serializeSignature, sign } from '../../../accounts/index.js'
import {
getEip712Domain,
@@ -17,11 +19,11 @@ import { pad } from '../../../utils/index.js'
import { hashTypedData } from './hashTypedData.js'
import { wrapTypedDataSignature } from './wrapTypedDataSignature.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
let verifier: Address
-beforeAll(async () => {
- const { factoryAddress } = await deploySoladyAccount_07()
+beforeEach(async () => {
+ const factoryAddress = await deploySoladyAccount07()
const { result, request } = await simulateContract(client, {
account: accounts[0].address,
abi: SoladyAccountFactory07.abi,
@@ -45,7 +47,7 @@ test('default', async () => {
primaryType: 'Mail',
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
const signature = await sign({
hash,
@@ -64,3 +66,29 @@ test('default', async () => {
}),
).toBeTruthy()
})
+
+async function deploySoladyAccount07() {
+ const {
+ createdAddress: implementationAddress,
+ errors: implementationErrors,
+ } = await tevmMainnet.deployContract({
+ abi: SoladyAccount07.abi,
+ bytecode: SoladyAccount07.bytecode.object,
+ })
+ if (implementationErrors?.length) throw implementationErrors[0]
+ if (!implementationAddress)
+ throw new Error('Solady account deployment failed: no address.')
+ await mine(client, { blocks: 1 })
+
+ const { createdAddress: factoryAddress, errors: factoryErrors } =
+ await tevmMainnet.deployContract({
+ abi: SoladyAccountFactory07.abi,
+ bytecode: SoladyAccountFactory07.bytecode.object,
+ args: [implementationAddress],
+ })
+ if (factoryErrors?.length) throw factoryErrors[0]
+ if (!factoryAddress)
+ throw new Error('Solady account factory deployment failed: no address.')
+ await mine(client, { blocks: 1 })
+ return factoryAddress
+}
diff --git a/src/experimental/erc7811/decorators/erc7811.test.ts b/src/experimental/erc7811/decorators/erc7811.test.ts
index e39de9aa2f..015320c9c0 100644
--- a/src/experimental/erc7811/decorators/erc7811.test.ts
+++ b/src/experimental/erc7811/decorators/erc7811.test.ts
@@ -1,9 +1,9 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { erc7811Actions } from './erc7811.js'
-const client = anvilMainnet.getClient().extend(erc7811Actions())
+const client = tevmMainnet.getClient().extend(erc7811Actions())
test('default', async () => {
expect(erc7811Actions()(client)).toMatchInlineSnapshot(`
diff --git a/src/experimental/erc7821/actions/execute.test.ts b/src/experimental/erc7821/actions/execute.test.ts
index fd78008fac..af00b1b40b 100644
--- a/src/experimental/erc7821/actions/execute.test.ts
+++ b/src/experimental/erc7821/actions/execute.test.ts
@@ -1,7 +1,7 @@
import { expect, test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deploy, deployErrorExample } from '~test/utils.js'
import {
ERC7821Example,
@@ -18,7 +18,7 @@ import {
import { decodeEventLog, parseEther } from '../../../utils/index.js'
import { execute } from './execute.js'
-const client = anvilMainnet.getClient({
+const client = tevmMainnet.getClient({
account: privateKeyToAccount(accounts[1].privateKey),
})
diff --git a/src/experimental/erc7821/actions/executeBatches.test.ts b/src/experimental/erc7821/actions/executeBatches.test.ts
index 80b245e477..2d54fc7772 100644
--- a/src/experimental/erc7821/actions/executeBatches.test.ts
+++ b/src/experimental/erc7821/actions/executeBatches.test.ts
@@ -1,7 +1,7 @@
import { expect, test } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deploy, deployErrorExample } from '~test/utils.js'
import {
ERC7821Example,
@@ -18,7 +18,7 @@ import {
import { decodeEventLog, parseEther } from '../../../utils/index.js'
import { executeBatches } from './executeBatches.js'
-const client = anvilMainnet.getClient({
+const client = tevmMainnet.getClient({
account: privateKeyToAccount(accounts[1].privateKey),
})
diff --git a/src/experimental/erc7821/actions/supportsExecutionMode.test.ts b/src/experimental/erc7821/actions/supportsExecutionMode.test.ts
index b442db72a5..081a37bfff 100644
--- a/src/experimental/erc7821/actions/supportsExecutionMode.test.ts
+++ b/src/experimental/erc7821/actions/supportsExecutionMode.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deploy } from '~test/utils.js'
import { ERC7821Example } from '../../../../contracts/generated.js'
import { privateKeyToAccount } from '../../../accounts/privateKeyToAccount.js'
@@ -11,7 +11,7 @@ import {
} from '../../../actions/index.js'
import { supportsExecutionMode } from './supportsExecutionMode.js'
-const client = anvilMainnet.getClient({
+const client = tevmMainnet.getClient({
account: privateKeyToAccount(accounts[0].privateKey),
})
diff --git a/src/experimental/erc7821/decorators/erc7821.test.ts b/src/experimental/erc7821/decorators/erc7821.test.ts
index 00cf997162..89c47fdaba 100644
--- a/src/experimental/erc7821/decorators/erc7821.test.ts
+++ b/src/experimental/erc7821/decorators/erc7821.test.ts
@@ -1,13 +1,13 @@
import { describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deploy } from '~test/utils.js'
import { ERC7821Example } from '../../../../contracts/generated.js'
import { privateKeyToAccount } from '../../../accounts/privateKeyToAccount.js'
import { mine, signAuthorization } from '../../../actions/index.js'
import { erc7821Actions } from './erc7821.js'
-const client = anvilMainnet
+const client = tevmMainnet
.getClient({ account: privateKeyToAccount(accounts[0].privateKey) })
.extend(erc7821Actions())
diff --git a/src/experimental/erc7846/actions/connect.test.ts b/src/experimental/erc7846/actions/connect.test.ts
index 1ceb943b75..ea8b22536c 100644
--- a/src/experimental/erc7846/actions/connect.test.ts
+++ b/src/experimental/erc7846/actions/connect.test.ts
@@ -1,28 +1,66 @@
import { describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { UnsupportedProviderMethodError } from '../../../errors/rpc.js'
+import { createSiweMessage } from '../../../siwe/index.js'
import { connect } from './connect.js'
-const client = anvilMainnet.getClient()
+function getClient() {
+ const client = tevmMainnet.getClient()
+ const request = client.request
+ client.request = (async (parameters: any) => {
+ if (parameters.method === 'wallet_connect') {
+ const capabilities = parameters.params[0].capabilities
+ return {
+ accounts: [
+ {
+ address: accounts[0].address.toLowerCase(),
+ capabilities: {
+ ...(capabilities?.signInWithEthereum
+ ? {
+ signInWithEthereum: {
+ message: createSiweMessage({
+ ...capabilities.signInWithEthereum,
+ address: accounts[0].address,
+ chainId: 1,
+ domain: 'example.com',
+ issuedAt: new Date('2024-01-01T00:00:00.000Z'),
+ expirationTime: new Date('2024-01-01T00:00:00.000Z'),
+ notBefore: new Date('2024-01-01T00:00:00.000Z'),
+ uri: 'https://example.com',
+ version: '1',
+ }),
+ signature:
+ '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
+ },
+ }
+ : {}),
+ ...(capabilities?.addSubAccount
+ ? {
+ subAccounts: [{ address: accounts[1].address }],
+ }
+ : {}),
+ },
+ },
+ ],
+ }
+ }
+ return request(parameters)
+ }) as typeof request
+ return client
+}
test('default', async () => {
+ const client = getClient()
const response = await connect(client)
- expect(response).toMatchInlineSnapshot(`
- {
- "accounts": [
- {
- "address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
- "capabilities": {},
- },
- ],
- }
- `)
+ expect(response.accounts[0]?.address).toEqualAddress(accounts[0].address)
+ expect(response.accounts[0]?.capabilities).toEqual({})
})
describe('behavior: eth_requestAccounts fallback', async () => {
test('default', async () => {
- const client = anvilMainnet.getClient()
+ const client = tevmMainnet.getClient()
const request = client.request
client.request = (parameters: any) => {
if (parameters.method === 'wallet_connect')
@@ -44,7 +82,7 @@ describe('behavior: eth_requestAccounts fallback', async () => {
})
test('behavior: with capabilities', async () => {
- const client = anvilMainnet.getClient()
+ const client = tevmMainnet.getClient()
const request = client.request
client.request = (parameters: any) => {
if (parameters.method === 'wallet_connect')
@@ -66,6 +104,7 @@ describe('behavior: eth_requestAccounts fallback', async () => {
})
test('behavior: capability: signInWithEthereum', async () => {
+ const client = getClient()
{
const response = await connect(client, {
capabilities: {
@@ -145,6 +184,7 @@ test('behavior: capability: signInWithEthereum', async () => {
})
test('behavior: capability: addSubAccount', async () => {
+ const client = getClient()
{
const response = await connect(client, {
capabilities: {
diff --git a/src/experimental/erc7846/actions/disconnect.test.ts b/src/experimental/erc7846/actions/disconnect.test.ts
index 25abe56478..a53b9e57ed 100644
--- a/src/experimental/erc7846/actions/disconnect.test.ts
+++ b/src/experimental/erc7846/actions/disconnect.test.ts
@@ -1,9 +1,14 @@
import { test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { disconnect } from './disconnect.js'
-const client = anvilMainnet.getClient()
-
test('default', async () => {
+ const client = tevmMainnet.getClient()
+ const request = client.request
+ client.request = (async (parameters: any) => {
+ if (parameters.method === 'wallet_disconnect') return null
+ return request(parameters)
+ }) as typeof request
+
await disconnect(client)
})
diff --git a/src/experimental/erc7846/decorators/erc7846.test.ts b/src/experimental/erc7846/decorators/erc7846.test.ts
index bbf2015f08..3dc5be3059 100644
--- a/src/experimental/erc7846/decorators/erc7846.test.ts
+++ b/src/experimental/erc7846/decorators/erc7846.test.ts
@@ -2,10 +2,28 @@
import { describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { erc7846Actions } from './erc7846.js'
-const client = anvilMainnet.getClient().extend(erc7846Actions())
+const client = (() => {
+ const client = tevmMainnet.getClient()
+ const request = client.request
+ client.request = (async (parameters: any) => {
+ if (parameters.method === 'wallet_connect')
+ return {
+ accounts: [
+ {
+ address: accounts[0].address,
+ capabilities: {},
+ },
+ ],
+ }
+ if (parameters.method === 'wallet_disconnect') return null
+ return request(parameters)
+ }) as typeof request
+ return client.extend(erc7846Actions())
+})()
test('default', async () => {
expect(erc7846Actions()(client)).toMatchInlineSnapshot(`
@@ -18,16 +36,9 @@ test('default', async () => {
describe('smoke test', () => {
test('connect', async () => {
- expect(await client.connect()).toMatchInlineSnapshot(`
- {
- "accounts": [
- {
- "address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
- "capabilities": {},
- },
- ],
- }
- `)
+ const response = await client.connect()
+ expect(response.accounts[0]?.address).toEqualAddress(accounts[0].address)
+ expect(response.accounts[0]?.capabilities).toEqual({})
})
test('disconnect', async () => {
diff --git a/src/experimental/erc7895/actions/addSubAccount.test.ts b/src/experimental/erc7895/actions/addSubAccount.test.ts
index ee094e500a..f127d3a53c 100644
--- a/src/experimental/erc7895/actions/addSubAccount.test.ts
+++ b/src/experimental/erc7895/actions/addSubAccount.test.ts
@@ -1,8 +1,18 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { addSubAccount } from './addSubAccount.js'
-const client = anvilMainnet.getClient()
+const client = (() => {
+ const client = tevmMainnet.getClient()
+ const request = client.request
+ client.request = (async (parameters: any) => {
+ if (parameters.method === 'wallet_addSubAccount')
+ return { address: accounts[1].address }
+ return request(parameters)
+ }) as typeof request
+ return client
+})()
test('default', async () => {
{
@@ -10,11 +20,7 @@ test('default', async () => {
type: 'create',
})
- expect(response).toMatchInlineSnapshot(`
- {
- "address": "0x70997970c51812dc3a010c7d01b50e0d17dc79c8",
- }
- `)
+ expect(response.address).toEqualAddress(accounts[1].address)
}
{
@@ -28,11 +34,7 @@ test('default', async () => {
type: 'create',
})
- expect(response).toMatchInlineSnapshot(`
- {
- "address": "0x70997970c51812dc3a010c7d01b50e0d17dc79c8",
- }
- `)
+ expect(response.address).toEqualAddress(accounts[1].address)
}
{
@@ -42,10 +44,6 @@ test('default', async () => {
type: 'deployed',
})
- expect(response).toMatchInlineSnapshot(`
- {
- "address": "0x70997970c51812dc3a010c7d01b50e0d17dc79c8",
- }
- `)
+ expect(response.address).toEqualAddress(accounts[1].address)
}
})
diff --git a/src/experimental/erc7895/decorators/erc7895.test.ts b/src/experimental/erc7895/decorators/erc7895.test.ts
index 913ac9e1c4..0ce14ed007 100644
--- a/src/experimental/erc7895/decorators/erc7895.test.ts
+++ b/src/experimental/erc7895/decorators/erc7895.test.ts
@@ -2,10 +2,20 @@
import { describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { erc7895Actions } from './erc7895.js'
-const client = anvilMainnet.getClient().extend(erc7895Actions())
+const client = (() => {
+ const client = tevmMainnet.getClient()
+ const request = client.request
+ client.request = (async (parameters: any) => {
+ if (parameters.method === 'wallet_addSubAccount')
+ return { address: accounts[1].address }
+ return request(parameters)
+ }) as typeof request
+ return client.extend(erc7895Actions())
+})()
test('default', async () => {
expect(erc7895Actions()(client)).toMatchInlineSnapshot(`
@@ -17,20 +27,15 @@ test('default', async () => {
describe('smoke test', () => {
test('addSubAccount', async () => {
- expect(
- await client.addSubAccount({
- keys: [
- {
- publicKey: '0x0000000000000000000000000000000000000000',
- type: 'address',
- },
- ],
- type: 'create',
- }),
- ).toMatchInlineSnapshot(`
- {
- "address": "0x70997970c51812dc3a010c7d01b50e0d17dc79c8",
- }
- `)
+ const response = await client.addSubAccount({
+ keys: [
+ {
+ publicKey: '0x0000000000000000000000000000000000000000',
+ type: 'address',
+ },
+ ],
+ type: 'create',
+ })
+ expect(response.address).toEqualAddress(accounts[1].address)
})
})
diff --git a/src/op-stack/actions/buildDepositTransaction.test.ts b/src/op-stack/actions/buildDepositTransaction.test.ts
index 62e9c84772..40fc45e5b5 100644
--- a/src/op-stack/actions/buildDepositTransaction.test.ts
+++ b/src/op-stack/actions/buildDepositTransaction.test.ts
@@ -1,19 +1,19 @@
import { expect, test } from 'vitest'
import { baycContractConfig } from '~test/abis.js'
-import { anvilMainnet, anvilOptimism } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet, tevmOptimism } from '~test/tevm.js'
import { parseEther } from '../../index.js'
import { base } from '../chains.js'
import { buildDepositTransaction } from './buildDepositTransaction.js'
import { depositTransaction } from './depositTransaction.js'
-const client = anvilMainnet.getClient()
-const clientWithAccount = anvilMainnet.getClient({
+const client = tevmMainnet.getClient()
+const clientWithAccount = tevmMainnet.getClient({
account: accounts[0].address,
})
-const optimismClient = anvilOptimism.getClient()
-const optimismClientWithoutChain = anvilOptimism.getClient({
+const optimismClient = tevmOptimism.getClient()
+const optimismClientWithoutChain = tevmOptimism.getClient({
chain: false,
})
diff --git a/src/op-stack/actions/buildInitiateWithdrawal.test.ts b/src/op-stack/actions/buildInitiateWithdrawal.test.ts
index d067090b29..e753810fd5 100644
--- a/src/op-stack/actions/buildInitiateWithdrawal.test.ts
+++ b/src/op-stack/actions/buildInitiateWithdrawal.test.ts
@@ -1,13 +1,13 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { mainnet } from '../../chains/index.js'
import { buildInitiateWithdrawal } from './buildInitiateWithdrawal.js'
import { initiateWithdrawal } from './initiateWithdrawal.js'
-const client = anvilMainnet.getClient()
-const clientWithAccount = anvilMainnet.getClient({
+const client = tevmMainnet.getClient()
+const clientWithAccount = tevmMainnet.getClient({
account: accounts[0].address,
})
diff --git a/src/op-stack/actions/buildProveWithdrawal.test.ts b/src/op-stack/actions/buildProveWithdrawal.test.ts
index 75df239335..40ecff5960 100644
--- a/src/op-stack/actions/buildProveWithdrawal.test.ts
+++ b/src/op-stack/actions/buildProveWithdrawal.test.ts
@@ -1,7 +1,7 @@
import { keccak256 } from 'ethers'
import { describe, expect, test } from 'vitest'
-import { anvilMainnet, anvilOptimism } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet, tevmOptimism } from '~test/tevm.js'
import { getTransactionReceipt, reset } from '../../actions/index.js'
import { getL2Output, getWithdrawals, proveWithdrawal } from '../index.js'
@@ -11,17 +11,17 @@ import {
} from './buildProveWithdrawal.js'
import { getGame } from './getGame.js'
-const client = anvilMainnet.getClient()
-const optimismClient = anvilOptimism.getClient()
+const client = tevmMainnet.getClient()
+const optimismClient = tevmOptimism.getClient()
test.skip('default', async () => {
await reset(optimismClient, {
blockNumber: 132253445n,
- jsonRpcUrl: anvilOptimism.forkUrl,
+ jsonRpcUrl: tevmOptimism.forkUrl,
})
await reset(client, {
blockNumber: 21892012n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
// https://optimistic.etherscan.io/tx/0x3107023b21569799804933e8fbf564d9b89d547b06ab64ffb8b3b671dfc76a85
@@ -78,7 +78,7 @@ test.skip('default', async () => {
test.skip('args: output (legacy)', async () => {
await reset(client, {
blockNumber: 18772363n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
// https://optimistic.etherscan.io/tx/0x7b5cedccfaf9abe6ce3d07982f57bcb9176313b019ff0fc602a0b70342fe3147
diff --git a/src/op-stack/actions/depositTransaction.test.ts b/src/op-stack/actions/depositTransaction.test.ts
index 4c1396a50f..f37ee43d8e 100644
--- a/src/op-stack/actions/depositTransaction.test.ts
+++ b/src/op-stack/actions/depositTransaction.test.ts
@@ -1,6 +1,6 @@
import { beforeAll, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import {
getTransactionReceipt,
@@ -22,15 +22,15 @@ import { getL2TransactionHashes } from '../index.js'
import { buildDepositTransaction } from './buildDepositTransaction.js'
import { depositTransaction } from './depositTransaction.js'
-const client = anvilMainnet.getClient()
-const clientWithoutChain = anvilMainnet.getClient({
+const client = tevmMainnet.getClient()
+const clientWithoutChain = tevmMainnet.getClient({
chain: false,
})
beforeAll(async () => {
await reset(client, {
blockNumber: 18136086n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
await setBalance(client, {
address: accounts[0].address,
diff --git a/src/op-stack/actions/estimateContractL1Fee.test.ts b/src/op-stack/actions/estimateContractL1Fee.test.ts
index 6449ea93d5..5041d299c0 100644
--- a/src/op-stack/actions/estimateContractL1Fee.test.ts
+++ b/src/op-stack/actions/estimateContractL1Fee.test.ts
@@ -1,10 +1,10 @@
import { expect, test } from 'vitest'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilOptimism } from '~test/anvil.js'
+import { tevmOptimism } from '~test/tevm.js'
import { estimateContractL1Fee } from './estimateContractL1Fee.js'
-const optimismClient = anvilOptimism.getClient()
+const optimismClient = tevmOptimism.getClient()
test('default', async () => {
expect(
diff --git a/src/op-stack/actions/estimateContractL1Gas.test.ts b/src/op-stack/actions/estimateContractL1Gas.test.ts
index 508c5d0879..445050d9e0 100644
--- a/src/op-stack/actions/estimateContractL1Gas.test.ts
+++ b/src/op-stack/actions/estimateContractL1Gas.test.ts
@@ -1,10 +1,10 @@
import { expect, test } from 'vitest'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilOptimism } from '~test/anvil.js'
+import { tevmOptimism } from '~test/tevm.js'
import { estimateContractL1Gas } from './estimateContractL1Gas.js'
-const optimismClient = anvilOptimism.getClient()
+const optimismClient = tevmOptimism.getClient()
test('default', async () => {
expect(
diff --git a/src/op-stack/actions/estimateContractTotalFee.test.ts b/src/op-stack/actions/estimateContractTotalFee.test.ts
index aad6a3f1e9..6c4397e131 100644
--- a/src/op-stack/actions/estimateContractTotalFee.test.ts
+++ b/src/op-stack/actions/estimateContractTotalFee.test.ts
@@ -1,10 +1,10 @@
import { expect, test } from 'vitest'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilOptimism } from '~test/anvil.js'
+import { tevmOptimism } from '~test/tevm.js'
import { estimateContractTotalFee } from './estimateContractTotalFee.js'
-const optimismClient = anvilOptimism.getClient()
+const optimismClient = tevmOptimism.getClient()
test('default', async () => {
expect(
diff --git a/src/op-stack/actions/estimateContractTotalGas.test.ts b/src/op-stack/actions/estimateContractTotalGas.test.ts
index 7c88d591d5..e89ff46318 100644
--- a/src/op-stack/actions/estimateContractTotalGas.test.ts
+++ b/src/op-stack/actions/estimateContractTotalGas.test.ts
@@ -1,10 +1,10 @@
import { expect, test } from 'vitest'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilOptimism } from '~test/anvil.js'
+import { tevmOptimism } from '~test/tevm.js'
import { estimateContractTotalGas } from './estimateContractTotalGas.js'
-const optimismClient = anvilOptimism.getClient()
+const optimismClient = tevmOptimism.getClient()
test('default', async () => {
expect(
diff --git a/src/op-stack/actions/estimateDepositTransactionGas.test.ts b/src/op-stack/actions/estimateDepositTransactionGas.test.ts
index ce9ac5edef..73ef3ec74f 100644
--- a/src/op-stack/actions/estimateDepositTransactionGas.test.ts
+++ b/src/op-stack/actions/estimateDepositTransactionGas.test.ts
@@ -1,23 +1,13 @@
import { beforeAll, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
-import { reset, setBalance } from '../../actions/index.js'
-import { parseEther } from '../../index.js'
+import { createTevmTestHarness } from '~test/tevm.js'
import { base } from '../../op-stack/chains.js'
import { estimateDepositTransactionGas } from './estimateDepositTransactionGas.js'
-const client = anvilMainnet.getClient()
+const tevm = createTevmTestHarness({ forkBlockNumber: 18136086n })
+const client = tevm.getClient()
-beforeAll(async () => {
- await reset(client, {
- blockNumber: 18136086n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
- await setBalance(client, {
- address: accounts[0].address,
- value: parseEther('10000'),
- })
-})
+beforeAll(() => tevm.ready())
test('default', async () => {
const gas = await estimateDepositTransactionGas(client, {
diff --git a/src/op-stack/actions/estimateFinalizeWithdrawalGas.test.ts b/src/op-stack/actions/estimateFinalizeWithdrawalGas.test.ts
index 300b2026c4..62b8f2d976 100644
--- a/src/op-stack/actions/estimateFinalizeWithdrawalGas.test.ts
+++ b/src/op-stack/actions/estimateFinalizeWithdrawalGas.test.ts
@@ -1,12 +1,13 @@
-import { beforeEach, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { beforeAll, beforeEach, expect, test } from 'vitest'
import { accounts } from '~test/constants.js'
+import { createTevmTestHarness } from '~test/tevm.js'
-import { reset } from '../../actions/index.js'
import { optimism } from '../chains.js'
import { estimateFinalizeWithdrawalGas } from './estimateFinalizeWithdrawalGas.js'
-const client = anvilMainnet.getClient()
+const tevm = createTevmTestHarness({ forkBlockNumber: 16280770n })
+const faultProofTevm = createTevmTestHarness({ forkBlockNumber: 21165285n })
+const client = tevm.getClient()
const withdrawal = {
nonce:
@@ -20,12 +21,8 @@ const withdrawal = {
'0x539dfd84b3939c6d2f61e1fbaa176a70e6a433e222093c3fea872ac36527d6ac',
} as const
-beforeEach(async () => {
- await reset(client, {
- blockNumber: 16280770n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
-})
+beforeAll(() => tevm.ready())
+beforeEach(() => tevm.reset())
test('default', async () => {
const gas = await estimateFinalizeWithdrawalGas(client, {
@@ -39,10 +36,8 @@ test('default', async () => {
test.skip('args: proof submitter', async () => {
// TODO: migrate the rest of the test suite to a block with fault proofs
// Sample withdrawal with fault proofs: https://optimistic.etherscan.io/tx/0x039d2fdf3161910cb667ed599a0a899314bd5041797b6707ba312792b6d43b5c
- await reset(client, {
- blockNumber: 21165285n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
+ await faultProofTevm.ready()
+ const client = faultProofTevm.getClient()
const proofSubmitter = '0xD15F47c16BD277ff2dee6a0bD4e418165231CB69'
const withdrawal = {
diff --git a/src/op-stack/actions/estimateInitiateWithdrawalGas.test.ts b/src/op-stack/actions/estimateInitiateWithdrawalGas.test.ts
index 7153f32c8c..4631819e60 100644
--- a/src/op-stack/actions/estimateInitiateWithdrawalGas.test.ts
+++ b/src/op-stack/actions/estimateInitiateWithdrawalGas.test.ts
@@ -1,9 +1,9 @@
import { expect, test } from 'vitest'
-import { anvilOptimism } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmOptimism } from '~test/tevm.js'
import { estimateInitiateWithdrawalGas } from './estimateInitiateWithdrawalGas.js'
-const optimismClient = anvilOptimism.getClient()
+const optimismClient = tevmOptimism.getClient()
test('default', async () => {
const gas = await estimateInitiateWithdrawalGas(optimismClient, {
diff --git a/src/op-stack/actions/estimateL1Fee.test.ts b/src/op-stack/actions/estimateL1Fee.test.ts
index 56c4e2574c..6462806f5d 100644
--- a/src/op-stack/actions/estimateL1Fee.test.ts
+++ b/src/op-stack/actions/estimateL1Fee.test.ts
@@ -1,7 +1,7 @@
import { Hex } from 'ox'
import { expect, test } from 'vitest'
-import { anvilOptimism } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmOptimism } from '~test/tevm.js'
import { optimism } from '../../chains/index.js'
import {
createClient,
@@ -10,9 +10,9 @@ import {
} from '../../index.js'
import { estimateL1Fee } from './estimateL1Fee.js'
-const optimismClient = anvilOptimism.getClient()
-const optimismClientWithAccount = anvilOptimism.getClient({ account: true })
-const optimismClientWithoutChain = anvilOptimism.getClient({ chain: false })
+const optimismClient = tevmOptimism.getClient()
+const optimismClientWithAccount = tevmOptimism.getClient({ account: true })
+const optimismClientWithoutChain = tevmOptimism.getClient({ chain: false })
const baseTransaction = {
data: '0xdeadbeef',
diff --git a/src/op-stack/actions/estimateL1Gas.test.ts b/src/op-stack/actions/estimateL1Gas.test.ts
index ecae1cc5f2..a003d85b38 100644
--- a/src/op-stack/actions/estimateL1Gas.test.ts
+++ b/src/op-stack/actions/estimateL1Gas.test.ts
@@ -1,7 +1,7 @@
import { Hex } from 'ox'
import { expect, test } from 'vitest'
-import { anvilOptimism } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmOptimism } from '~test/tevm.js'
import { optimism } from '../../chains/index.js'
import {
createClient,
@@ -10,9 +10,9 @@ import {
} from '../../index.js'
import { estimateL1Gas } from './estimateL1Gas.js'
-const optimismClient = anvilOptimism.getClient()
-const optimismClientWithAccount = anvilOptimism.getClient({ account: true })
-const optimismClientWithoutChain = anvilOptimism.getClient({ chain: false })
+const optimismClient = tevmOptimism.getClient()
+const optimismClientWithAccount = tevmOptimism.getClient({ account: true })
+const optimismClientWithoutChain = tevmOptimism.getClient({ chain: false })
const baseTransaction = {
data: '0xdeadbeef',
diff --git a/src/op-stack/actions/estimateOperatorFee.test.ts b/src/op-stack/actions/estimateOperatorFee.test.ts
index ca09547b18..c5bc365ca2 100644
--- a/src/op-stack/actions/estimateOperatorFee.test.ts
+++ b/src/op-stack/actions/estimateOperatorFee.test.ts
@@ -1,13 +1,13 @@
import { expect, test } from 'vitest'
-import { anvilOptimism } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmOptimism } from '~test/tevm.js'
import { parseGwei, type TransactionRequestEIP1559 } from '../../index.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { estimateOperatorFee } from './estimateOperatorFee.js'
-const optimismClient = anvilOptimism.getClient()
-const optimismClientWithAccount = anvilOptimism.getClient({ account: true })
-const optimismClientWithoutChain = anvilOptimism.getClient({ chain: false })
+const optimismClient = tevmOptimism.getClient()
+const optimismClientWithAccount = tevmOptimism.getClient({ account: true })
+const optimismClientWithoutChain = tevmOptimism.getClient({ chain: false })
const baseTransaction = {
maxFeePerGas: parseGwei('100'),
diff --git a/src/op-stack/actions/estimateProveWithdrawalGas.test.ts b/src/op-stack/actions/estimateProveWithdrawalGas.test.ts
index fb210a2039..7007110cba 100644
--- a/src/op-stack/actions/estimateProveWithdrawalGas.test.ts
+++ b/src/op-stack/actions/estimateProveWithdrawalGas.test.ts
@@ -1,11 +1,11 @@
import { expect, test } from 'vitest'
-import { anvilMainnet, anvilOptimism } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet, tevmOptimism } from '~test/tevm.js'
import { estimateProveWithdrawalGas } from './estimateProveWithdrawalGas.js'
-const client = anvilMainnet.getClient()
-const optimismClient = anvilOptimism.getClient()
+const client = tevmMainnet.getClient()
+const optimismClient = tevmOptimism.getClient()
const args = {
l2OutputIndex: 4529n,
diff --git a/src/op-stack/actions/estimateTotalFee.test.ts b/src/op-stack/actions/estimateTotalFee.test.ts
index bb8f0ebd9d..224485b181 100644
--- a/src/op-stack/actions/estimateTotalFee.test.ts
+++ b/src/op-stack/actions/estimateTotalFee.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilOptimism } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmOptimism } from '~test/tevm.js'
import { estimateGas } from '../../actions/public/estimateGas.js'
import { getGasPrice } from '../../actions/public/getGasPrice.js'
import { parseGwei, type TransactionRequestEIP1559 } from '../../index.js'
@@ -9,9 +9,9 @@ import { estimateL1Fee } from './estimateL1Fee.js'
import { estimateOperatorFee } from './estimateOperatorFee.js'
import { estimateTotalFee } from './estimateTotalFee.js'
-const optimismClient = anvilOptimism.getClient()
-const optimismClientWithAccount = anvilOptimism.getClient({ account: true })
-const optimismClientWithoutChain = anvilOptimism.getClient({ chain: false })
+const optimismClient = tevmOptimism.getClient()
+const optimismClientWithAccount = tevmOptimism.getClient({ account: true })
+const optimismClientWithoutChain = tevmOptimism.getClient({ chain: false })
const baseTransaction = {
maxFeePerGas: parseGwei('100'),
diff --git a/src/op-stack/actions/estimateTotalGas.test.ts b/src/op-stack/actions/estimateTotalGas.test.ts
index 3bd9fdbe1f..279c55defd 100644
--- a/src/op-stack/actions/estimateTotalGas.test.ts
+++ b/src/op-stack/actions/estimateTotalGas.test.ts
@@ -1,13 +1,13 @@
import { expect, test } from 'vitest'
-import { anvilOptimism } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmOptimism } from '~test/tevm.js'
import { parseGwei, type TransactionRequestEIP1559 } from '../../index.js'
import { parseEther } from '../../utils/unit/parseEther.js'
import { estimateTotalGas } from './estimateTotalGas.js'
-const optimismClient = anvilOptimism.getClient()
-const optimismClientWithAccount = anvilOptimism.getClient({ account: true })
-const optimismClientWithoutChain = anvilOptimism.getClient({ chain: false })
+const optimismClient = tevmOptimism.getClient()
+const optimismClientWithAccount = tevmOptimism.getClient({ account: true })
+const optimismClientWithoutChain = tevmOptimism.getClient({ chain: false })
const baseTransaction = {
maxFeePerGas: parseGwei('100'),
diff --git a/src/op-stack/actions/finalizeWithdrawal.test.ts b/src/op-stack/actions/finalizeWithdrawal.test.ts
index 40ff9254d0..2051c06540 100644
--- a/src/op-stack/actions/finalizeWithdrawal.test.ts
+++ b/src/op-stack/actions/finalizeWithdrawal.test.ts
@@ -1,11 +1,11 @@
import { beforeEach, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getTransactionReceipt, mine, reset } from '../../actions/index.js'
import { optimism } from '../../op-stack/chains.js'
import { finalizeWithdrawal } from './finalizeWithdrawal.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const withdrawal = {
nonce:
@@ -22,7 +22,7 @@ const withdrawal = {
beforeEach(async () => {
await reset(client, {
blockNumber: 16280770n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
})
@@ -116,7 +116,7 @@ test.skip('args: proof submitter', async () => {
// Sample withdrawal with fault proofs: https://optimistic.etherscan.io/tx/0x039d2fdf3161910cb667ed599a0a899314bd5041797b6707ba312792b6d43b5c
await reset(client, {
blockNumber: 21165285n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
const proofSubmitter = '0xD15F47c16BD277ff2dee6a0bD4e418165231CB69'
diff --git a/src/op-stack/actions/getGame.test.ts b/src/op-stack/actions/getGame.test.ts
index 7247954b27..168f61aa1f 100644
--- a/src/op-stack/actions/getGame.test.ts
+++ b/src/op-stack/actions/getGame.test.ts
@@ -1,10 +1,10 @@
import { beforeAll, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { reset } from '../../actions/index.js'
import { optimism } from '../../op-stack/chains.js'
import { getGame } from './getGame.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
beforeAll(async () => {
await reset(client, {
diff --git a/src/op-stack/actions/getGames.test.ts b/src/op-stack/actions/getGames.test.ts
index 6fdf775d30..0861949ec3 100644
--- a/src/op-stack/actions/getGames.test.ts
+++ b/src/op-stack/actions/getGames.test.ts
@@ -1,10 +1,10 @@
import { beforeAll, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { reset } from '../../actions/index.js'
import { optimism } from '../../op-stack/chains.js'
import { getGames } from './getGames.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
beforeAll(async () => {
await reset(client, {
diff --git a/src/op-stack/actions/getL1BaseFee.test.ts b/src/op-stack/actions/getL1BaseFee.test.ts
index b37d9b14c6..38a8f03add 100644
--- a/src/op-stack/actions/getL1BaseFee.test.ts
+++ b/src/op-stack/actions/getL1BaseFee.test.ts
@@ -1,11 +1,11 @@
import { expect, test } from 'vitest'
-import { anvilOptimism } from '~test/anvil.js'
+import { tevmOptimism } from '~test/tevm.js'
import { getL1BaseFee } from './getL1BaseFee.js'
-const optimismClient = anvilOptimism.getClient()
-const optimismClientWithAccount = anvilOptimism.getClient({ account: true })
-const optimismClientWithoutChain = anvilOptimism.getClient({ chain: false })
+const optimismClient = tevmOptimism.getClient()
+const optimismClientWithAccount = tevmOptimism.getClient({ account: true })
+const optimismClientWithoutChain = tevmOptimism.getClient({ chain: false })
test('default', async () => {
const baseFee = await getL1BaseFee(optimismClient)
diff --git a/src/op-stack/actions/getL2Output.test.ts b/src/op-stack/actions/getL2Output.test.ts
index 29c0c1ccff..4978ae98a7 100644
--- a/src/op-stack/actions/getL2Output.test.ts
+++ b/src/op-stack/actions/getL2Output.test.ts
@@ -1,10 +1,10 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { reset } from '../../actions/index.js'
import { optimism } from '../../op-stack/chains.js'
import { getL2Output } from './getL2Output.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
await reset(client, {
diff --git a/src/op-stack/actions/getPortalVersion.test.ts b/src/op-stack/actions/getPortalVersion.test.ts
index df51c9fbd4..6d630ad802 100644
--- a/src/op-stack/actions/getPortalVersion.test.ts
+++ b/src/op-stack/actions/getPortalVersion.test.ts
@@ -1,13 +1,13 @@
import { beforeAll, expect, test } from 'vitest'
-import { anvilSepolia } from '~test/anvil.js'
+import { tevmSepolia } from '~test/tevm.js'
import { mainnetClient } from '~test/utils.js'
import { base, optimismSepolia } from '../../op-stack/chains.js'
import { getPortalVersion } from './getPortalVersion.js'
-const sepoliaClient = anvilSepolia.getClient()
+const sepoliaClient = tevmSepolia.getClient()
beforeAll(async () => {
- await anvilSepolia.restart()
+ await tevmSepolia.ready()
})
test('default', async () => {
diff --git a/src/op-stack/actions/getTimeToFinalize.test.ts b/src/op-stack/actions/getTimeToFinalize.test.ts
index f3b558ccff..177d3a84ce 100644
--- a/src/op-stack/actions/getTimeToFinalize.test.ts
+++ b/src/op-stack/actions/getTimeToFinalize.test.ts
@@ -1,17 +1,17 @@
import { beforeAll, describe, expect, test, vi } from 'vitest'
-import { anvilMainnet, anvilOptimism } from '~test/anvil.js'
+import { tevmMainnet, tevmOptimism } from '~test/tevm.js'
import { getTransactionReceipt, reset } from '../../actions/index.js'
import { getWithdrawals, optimism } from '../../op-stack/index.js'
import { getTimeToFinalize } from './getTimeToFinalize.js'
-const client = anvilMainnet.getClient()
-const optimismClient = anvilOptimism.getClient()
+const client = tevmMainnet.getClient()
+const optimismClient = tevmOptimism.getClient()
beforeAll(async () => {
await reset(client, {
blockNumber: 21890932n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
})
@@ -59,7 +59,7 @@ describe('legacy (portal v2)', () => {
beforeAll(async () => {
await reset(client, {
blockNumber: 18770525n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
})
diff --git a/src/op-stack/actions/getTimeToNextGame.test.ts b/src/op-stack/actions/getTimeToNextGame.test.ts
index ebcd2a6578..010bb8be19 100644
--- a/src/op-stack/actions/getTimeToNextGame.test.ts
+++ b/src/op-stack/actions/getTimeToNextGame.test.ts
@@ -1,11 +1,11 @@
import { beforeAll, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { reset } from '../../actions/index.js'
import { optimism } from '../../op-stack/chains.js'
import { getGames } from './getGames.js'
import { getTimeToNextGame } from './getTimeToNextGame.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
let l2BlockNumber: bigint
beforeAll(async () => {
diff --git a/src/op-stack/actions/getTimeToNextL2Output.test.ts b/src/op-stack/actions/getTimeToNextL2Output.test.ts
index d287aded25..5d98a7453d 100644
--- a/src/op-stack/actions/getTimeToNextL2Output.test.ts
+++ b/src/op-stack/actions/getTimeToNextL2Output.test.ts
@@ -1,18 +1,13 @@
import { beforeAll, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { createTevmTestHarness } from '~test/tevm.js'
-import { reset } from '../../actions/index.js'
import { optimism } from '../../op-stack/chains.js'
import { getTimeToNextL2Output } from './getTimeToNextL2Output.js'
-const client = anvilMainnet.getClient()
+const tevm = createTevmTestHarness({ forkBlockNumber: 18772363n })
+const client = tevm.getClient()
-beforeAll(async () => {
- await reset(client, {
- blockNumber: 18772363n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
-})
+beforeAll(() => tevm.ready())
test('default', async () => {
const { interval, seconds, timestamp } = await getTimeToNextL2Output(client, {
diff --git a/src/op-stack/actions/getTimeToProve.test.ts b/src/op-stack/actions/getTimeToProve.test.ts
index 1a76d87748..ac6c7afc59 100644
--- a/src/op-stack/actions/getTimeToProve.test.ts
+++ b/src/op-stack/actions/getTimeToProve.test.ts
@@ -1,20 +1,20 @@
import { expect, test } from 'vitest'
-import { anvilMainnet, anvilOptimism } from '~test/anvil.js'
+import { tevmMainnet, tevmOptimism } from '~test/tevm.js'
import { getTransactionReceipt, reset } from '../../actions/index.js'
import { getTimeToProve } from './getTimeToProve.js'
-const client = anvilMainnet.getClient()
-const optimismClient = anvilOptimism.getClient()
+const client = tevmMainnet.getClient()
+const optimismClient = tevmOptimism.getClient()
test('default', async () => {
await reset(optimismClient, {
blockNumber: 119830071n,
- jsonRpcUrl: anvilOptimism.forkUrl,
+ jsonRpcUrl: tevmOptimism.forkUrl,
})
await reset(client, {
blockNumber: 21892012n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
// https://optimistic.etherscan.io/tx/0x3107023b21569799804933e8fbf564d9b89d547b06ab64ffb8b3b671dfc76a85
@@ -33,7 +33,7 @@ test('default', async () => {
test('legacy (portal v2)', async () => {
await reset(client, {
blockNumber: 18772363n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
// https://optimistic.etherscan.io/tx/0x7b5cedccfaf9abe6ce3d07982f57bcb9176313b019ff0fc602a0b70342fe3147
diff --git a/src/op-stack/actions/getWithdrawalStatus.test.ts b/src/op-stack/actions/getWithdrawalStatus.test.ts
index 5189a99701..b5bf2f1dd5 100644
--- a/src/op-stack/actions/getWithdrawalStatus.test.ts
+++ b/src/op-stack/actions/getWithdrawalStatus.test.ts
@@ -1,20 +1,20 @@
import { beforeAll, describe, expect, test, vi } from 'vitest'
-import { anvilMainnet, anvilOptimism } from '~test/anvil.js'
+import { tevmMainnet, tevmOptimism } from '~test/tevm.js'
import { getTransactionReceipt, reset } from '../../actions/index.js'
import { getWithdrawalStatus } from './getWithdrawalStatus.js'
-const client = anvilMainnet.getClient()
-const optimismClient = anvilOptimism.getClient()
+const client = tevmMainnet.getClient()
+const optimismClient = tevmOptimism.getClient()
test('waiting-to-prove', async () => {
await reset(client, {
blockNumber: 19868020n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
await reset(optimismClient, {
blockNumber: 131027672n,
- jsonRpcUrl: anvilOptimism.forkUrl,
+ jsonRpcUrl: tevmOptimism.forkUrl,
})
const receipt = await getTransactionReceipt(optimismClient, {
@@ -31,11 +31,11 @@ test('waiting-to-prove', async () => {
test('ready-to-prove (U16)', async () => {
await reset(client, {
blockNumber: 22991516n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
await reset(optimismClient, {
blockNumber: 138895794n,
- jsonRpcUrl: anvilOptimism.forkUrl,
+ jsonRpcUrl: tevmOptimism.forkUrl,
})
const receipt = await getTransactionReceipt(optimismClient, {
@@ -53,11 +53,11 @@ test('ready-to-prove (U16)', async () => {
test('waiting-to-finalize (U16)', async () => {
await reset(client, {
blockNumber: 22991516n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
await reset(optimismClient, {
blockNumber: 138895794n,
- jsonRpcUrl: anvilOptimism.forkUrl,
+ jsonRpcUrl: tevmOptimism.forkUrl,
})
const receipt = await getTransactionReceipt(optimismClient, {
@@ -75,11 +75,11 @@ test('waiting-to-finalize (U16)', async () => {
test('waiting-to-prove (U16)', async () => {
await reset(client, {
blockNumber: 22991714n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
await reset(optimismClient, {
blockNumber: 138896489n,
- jsonRpcUrl: anvilOptimism.forkUrl,
+ jsonRpcUrl: tevmOptimism.forkUrl,
})
const receipt = await getTransactionReceipt(optimismClient, {
@@ -97,7 +97,7 @@ test('waiting-to-prove (U16)', async () => {
test('waiting-to-finalize', async () => {
await reset(client, {
blockNumber: 21890132n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
const status = await getWithdrawalStatus(client, {
@@ -114,7 +114,7 @@ test('waiting-to-finalize', async () => {
test('ready-to-finalize', async () => {
await reset(client, {
blockNumber: 21890438n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
const status = await getWithdrawalStatus(client, {
@@ -131,7 +131,7 @@ test('ready-to-finalize', async () => {
test('finalized', async () => {
await reset(client, {
blockNumber: 21890440n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
const status = await getWithdrawalStatus(client, {
@@ -165,7 +165,7 @@ test('error: non-withdrawal tx', async () => {
test('error: portal contract non-existent (old block)', async () => {
await reset(client, {
blockNumber: 15772363n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
const receipt = await getTransactionReceipt(optimismClient, {
hash: '0x7b5cedccfaf9abe6ce3d07982f57bcb9176313b019ff0fc602a0b70342fe3147',
@@ -197,7 +197,7 @@ describe('legacy (portal v2)', () => {
beforeAll(async () => {
await reset(client, {
blockNumber: 18772363n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
})
@@ -232,7 +232,7 @@ describe('legacy (portal v2)', () => {
test('waiting-to-finalize', async () => {
await reset(client, {
blockNumber: 18804700n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
vi.setSystemTime(new Date(1702805347000))
@@ -254,7 +254,7 @@ describe('legacy (portal v2)', () => {
test('ready-to-finalize', async () => {
await reset(client, {
blockNumber: 18803790n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
// https://etherscan.io/tx/0xec7d0380be9c64daf725369fc3bb6ebe2b0b5ed01291661130f6322696d9f1d7
// https://optimistic.etherscan.io/tx/0x80c06f76d42e94a6427672e99e83bc487fde29570d1cf59844cad2d43fdf2ab4
diff --git a/src/op-stack/actions/initiateWithdrawal.test.ts b/src/op-stack/actions/initiateWithdrawal.test.ts
index 358531af3d..7fe7992f35 100644
--- a/src/op-stack/actions/initiateWithdrawal.test.ts
+++ b/src/op-stack/actions/initiateWithdrawal.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, test } from 'vitest'
-import { anvilOptimism } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmOptimism } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import {
getTransactionReceipt,
@@ -23,7 +23,7 @@ import { proveWithdrawal } from './proveWithdrawal.js'
import { waitToFinalize } from './waitToFinalize.js'
import { waitToProve } from './waitToProve.js'
-const optimismClient = anvilOptimism.getClient()
+const optimismClient = tevmOptimism.getClient()
test('default', async () => {
const hash = await initiateWithdrawal(optimismClient, {
diff --git a/src/op-stack/actions/proveWithdrawal.test.ts b/src/op-stack/actions/proveWithdrawal.test.ts
index 76ed7442d2..f1f9ba5cf2 100644
--- a/src/op-stack/actions/proveWithdrawal.test.ts
+++ b/src/op-stack/actions/proveWithdrawal.test.ts
@@ -1,11 +1,11 @@
import { beforeEach, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getTransactionReceipt, mine, reset } from '../../actions/index.js'
import { optimism } from '../../op-stack/chains.js'
import { proveWithdrawal } from './proveWithdrawal.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const args = {
l2OutputIndex: 4529n,
@@ -40,7 +40,7 @@ const args = {
beforeEach(async () => {
await reset(client, {
blockNumber: 16280770n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
})
diff --git a/src/op-stack/actions/waitForNextGame.test.ts b/src/op-stack/actions/waitForNextGame.test.ts
index c196668b75..2a146cf0a9 100644
--- a/src/op-stack/actions/waitForNextGame.test.ts
+++ b/src/op-stack/actions/waitForNextGame.test.ts
@@ -1,11 +1,11 @@
import { beforeAll, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { reset } from '../../actions/index.js'
import { optimism } from '../../op-stack/chains.js'
import { getGames } from './getGames.js'
import { waitForNextGame } from './waitForNextGame.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
beforeAll(async () => {
await reset(client, {
diff --git a/src/op-stack/actions/waitForNextL2Output.test.ts b/src/op-stack/actions/waitForNextL2Output.test.ts
index 86f8a2f5ed..3c02118806 100644
--- a/src/op-stack/actions/waitForNextL2Output.test.ts
+++ b/src/op-stack/actions/waitForNextL2Output.test.ts
@@ -1,10 +1,12 @@
import { expect, test } from 'vitest'
-import { mainnetClient } from '~test/utils.js'
+import { tevmMainnet } from '~test/tevm.js'
import { optimism } from '../../chains/index.js'
import { waitForNextL2Output } from './waitForNextL2Output.js'
+const client = tevmMainnet.getClient()
+
test('default', async () => {
- const output = await waitForNextL2Output(mainnetClient, {
+ const output = await waitForNextL2Output(client, {
l2BlockNumber: 19494651n,
targetChain: optimism,
})
diff --git a/src/op-stack/actions/waitToFinalize.test.ts b/src/op-stack/actions/waitToFinalize.test.ts
index 1b1c500525..cf0b69b3e8 100644
--- a/src/op-stack/actions/waitToFinalize.test.ts
+++ b/src/op-stack/actions/waitToFinalize.test.ts
@@ -1,17 +1,17 @@
import { beforeAll, test, vi } from 'vitest'
-import { anvilMainnet, anvilOptimism } from '~test/anvil.js'
+import { tevmMainnet, tevmOptimism } from '~test/tevm.js'
import { getTransactionReceipt, reset } from '../../actions/index.js'
import { getWithdrawals, optimism } from '../../op-stack/index.js'
import { waitToFinalize } from './waitToFinalize.js'
-const client = anvilMainnet.getClient()
-const optimismClient = anvilOptimism.getClient()
+const client = tevmMainnet.getClient()
+const optimismClient = tevmOptimism.getClient()
beforeAll(async () => {
await reset(client, {
blockNumber: 18770525n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
})
diff --git a/src/op-stack/actions/waitToProve.test.ts b/src/op-stack/actions/waitToProve.test.ts
index 4ce73303a2..08c72fd634 100644
--- a/src/op-stack/actions/waitToProve.test.ts
+++ b/src/op-stack/actions/waitToProve.test.ts
@@ -1,20 +1,20 @@
import { expect, test } from 'vitest'
-import { anvilMainnet, anvilOptimism } from '~test/anvil.js'
+import { tevmMainnet, tevmOptimism } from '~test/tevm.js'
import { getTransactionReceipt, reset } from '../../actions/index.js'
import { waitToProve } from './waitToProve.js'
-const client = anvilMainnet.getClient()
-const optimismClient = anvilOptimism.getClient()
+const client = tevmMainnet.getClient()
+const optimismClient = tevmOptimism.getClient()
test('default', async () => {
await reset(optimismClient, {
blockNumber: 119830071n,
- jsonRpcUrl: anvilOptimism.forkUrl,
+ jsonRpcUrl: tevmOptimism.forkUrl,
})
await reset(client, {
blockNumber: 21892012n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
// https://optimistic.etherscan.io/tx/0x3107023b21569799804933e8fbf564d9b89d547b06ab64ffb8b3b671dfc76a85
@@ -33,7 +33,7 @@ test('default', async () => {
test('legacy (portal v2)', async () => {
await reset(client, {
blockNumber: 18772363n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
// https://optimistic.etherscan.io/tx/0x7b5cedccfaf9abe6ce3d07982f57bcb9176313b019ff0fc602a0b70342fe3147
diff --git a/src/op-stack/decorators/publicL1.test.ts b/src/op-stack/decorators/publicL1.test.ts
index 1cca0bb5a4..31651853a3 100644
--- a/src/op-stack/decorators/publicL1.test.ts
+++ b/src/op-stack/decorators/publicL1.test.ts
@@ -1,12 +1,13 @@
import { describe, expect, test } from 'vitest'
import { accounts } from '~test/constants.js'
-import { mainnetClient } from '~test/utils.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createPublicClient, http } from '../../index.js'
import { optimism } from '../../op-stack/chains.js'
import { getWithdrawals } from '../../op-stack/index.js'
import { publicActionsL1 } from './publicL1.js'
+const mainnetClient = tevmMainnet.getClient()
const client = mainnetClient.extend(publicActionsL1())
const l2Client = createPublicClient({
chain: optimism,
diff --git a/src/op-stack/decorators/publicL2.test.ts b/src/op-stack/decorators/publicL2.test.ts
index d740184ee6..402984c92b 100644
--- a/src/op-stack/decorators/publicL2.test.ts
+++ b/src/op-stack/decorators/publicL2.test.ts
@@ -1,11 +1,11 @@
import { describe, expect, test } from 'vitest'
import { usdcContractConfig } from '~test/abis.js'
-import { anvilOptimism } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmOptimism } from '~test/tevm.js'
import { publicActionsL2 } from './publicL2.js'
-const optimismClient = anvilOptimism.getClient()
+const optimismClient = tevmOptimism.getClient()
const opStackClient = optimismClient.extend(publicActionsL2())
test('default', async () => {
diff --git a/src/op-stack/decorators/walletL1.test.ts b/src/op-stack/decorators/walletL1.test.ts
index 31506b8576..623f5a71d0 100644
--- a/src/op-stack/decorators/walletL1.test.ts
+++ b/src/op-stack/decorators/walletL1.test.ts
@@ -1,12 +1,13 @@
import { describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
-import { reset } from '../../actions/index.js'
+import { createTevmTestHarness, tevmMainnet } from '~test/tevm.js'
import { base } from '../../op-stack/chains.js'
import { walletActionsL1 } from './walletL1.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const opStackClient = client.extend(walletActionsL1())
+const proofTevm = createTevmTestHarness({ forkBlockNumber: 16280770n })
+const opStackProofClient = proofTevm.getClient().extend(walletActionsL1())
test('default', async () => {
expect(walletActionsL1()(client)).toMatchInlineSnapshot(`
@@ -28,14 +29,11 @@ describe('smoke test', () => {
},
targetChain: base,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
})
test('proveWithdrawal', async () => {
- await reset(client, {
- blockNumber: 16280770n,
- jsonRpcUrl: anvilMainnet.forkUrl,
- })
+ await proofTevm.ready()
const args = {
l2OutputIndex: 4529n,
@@ -66,11 +64,11 @@ describe('smoke test', () => {
value: 13000000000000000n,
},
} as const
- const hash = await opStackClient.proveWithdrawal({
+ const hash = await opStackProofClient.proveWithdrawal({
...args,
account: accounts[0].address,
targetChain: base,
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
})
})
diff --git a/src/op-stack/decorators/walletL2.test.ts b/src/op-stack/decorators/walletL2.test.ts
index 3448d886a4..6798ad4144 100644
--- a/src/op-stack/decorators/walletL2.test.ts
+++ b/src/op-stack/decorators/walletL2.test.ts
@@ -1,9 +1,9 @@
import { describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { walletActionsL2 } from './walletL2.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const opStackClient = client.extend(walletActionsL2())
test('default', async () => {
@@ -24,6 +24,6 @@ describe('smoke test', () => {
value: 1n,
},
})
- expect(hash).toBeDefined()
+ expect(hash).toBeHex({ size: 32 })
})
})
diff --git a/src/op-stack/formatters.test.ts b/src/op-stack/formatters.test.ts
index 8cc3510e32..150a532be7 100644
--- a/src/op-stack/formatters.test.ts
+++ b/src/op-stack/formatters.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, test } from 'vitest'
-import { anvilOptimism } from '~test/anvil.js'
+import { tevmOptimism } from '~test/tevm.js'
import { getBlock } from '../actions/public/getBlock.js'
import { getTransaction } from '../actions/public/getTransaction.js'
import { getTransactionReceipt } from '../actions/public/getTransactionReceipt.js'
@@ -8,7 +8,7 @@ import { optimism } from '../chains/index.js'
import { createClient } from '../clients/createClient.js'
import { http } from '../clients/transports/http.js'
-const optimismClient = anvilOptimism.getClient()
+const optimismClient = tevmOptimism.getClient()
describe('block', () => {
test('formatter', async () => {
diff --git a/src/op-stack/utils/getWithdrawals.test.ts b/src/op-stack/utils/getWithdrawals.test.ts
index 97741b90d1..e72c8ed59a 100644
--- a/src/op-stack/utils/getWithdrawals.test.ts
+++ b/src/op-stack/utils/getWithdrawals.test.ts
@@ -1,9 +1,9 @@
import { expect, test } from 'vitest'
-import { anvilOptimism } from '~test/anvil.js'
+import { tevmOptimism } from '~test/tevm.js'
import { getTransactionReceipt } from '../../actions/index.js'
import { getWithdrawals } from './getWithdrawals.js'
-const optimismClient = anvilOptimism.getClient()
+const optimismClient = tevmOptimism.getClient()
test('default', async () => {
const receipt = await getTransactionReceipt(optimismClient, {
diff --git a/src/tevm-resolution.tevm.test.ts b/src/tevm-resolution.tevm.test.ts
new file mode 100644
index 0000000000..34a1d2918c
--- /dev/null
+++ b/src/tevm-resolution.tevm.test.ts
@@ -0,0 +1,41 @@
+import { expect, test } from 'vitest'
+
+/**
+ * Tevm resolves its own published Viem (pinned by `pnpm.packageExtensions`)
+ * rather than this workspace's unbuilt `viem`. If that pin ever regresses, the
+ * failure surfaces as an opaque module-resolution error deep inside an
+ * unrelated suite. These smoke tests make it fail here, first, and loudly.
+ */
+
+test('tevm entrypoints load at runtime', async () => {
+ const [tevm, actions, address, common, node, server] = await Promise.all([
+ import('tevm'),
+ import('tevm/actions'),
+ import('tevm/address'),
+ import('tevm/common'),
+ import('tevm/node'),
+ import('tevm/server'),
+ ])
+
+ expect(tevm.createMemoryClient).toBeTypeOf('function')
+ expect(actions.callHandler).toBeTypeOf('function')
+ expect(address.createAddress).toBeTypeOf('function')
+ expect(common.createCommon).toBeTypeOf('function')
+ expect(node.createTevmNode).toBeTypeOf('function')
+ expect(server.createServer).toBeTypeOf('function')
+})
+
+test('test-utils fixtures and matcher utilities load at runtime', async () => {
+ const [testUtils, testMatchers] = await Promise.all([
+ import('@tevm/test-utils'),
+ import('@tevm/test-matchers'),
+ ])
+
+ expect(testUtils.SimpleContract.deploy).toBeTypeOf('function')
+ expect(testMatchers).toBeDefined()
+})
+
+test('the matchers registered by `setup.ts` are installed on `expect`', () => {
+ expect(expect('0x1234').toBeHex).toBeTypeOf('function')
+ expect(expect('0x1234').toEqualAddress).toBeTypeOf('function')
+})
diff --git a/src/tevm-showcase.tevm.test.ts b/src/tevm-showcase.tevm.test.ts
new file mode 100644
index 0000000000..6df196b03d
--- /dev/null
+++ b/src/tevm-showcase.tevm.test.ts
@@ -0,0 +1,396 @@
+import {
+ AdvancedContract,
+ ErrorContract,
+ SimpleContract,
+ TestERC20,
+} from '@tevm/test-utils'
+import { createMemoryClient } from 'tevm'
+import {
+ callHandler,
+ contractHandler,
+ dealHandler,
+ deployHandler,
+ setAccountHandler,
+} from 'tevm/actions'
+import { createAddress } from 'tevm/address'
+import {
+ createCommon,
+ createMockKzg,
+ mainnet as tevmMainnetCommon,
+} from 'tevm/common'
+import { createTevmNode } from 'tevm/node'
+import { assert, beforeAll, describe, expect, test } from 'vitest'
+import { accounts } from '~test/constants.js'
+import { createTevmForkTransport, tevmMainnet } from '~test/tevm.js'
+import { getBalance } from './actions/public/getBalance.js'
+import { getBlockNumber } from './actions/public/getBlockNumber.js'
+import { sendTransaction } from './actions/wallet/sendTransaction.js'
+import { createClient } from './clients/createClient.js'
+import { custom } from './clients/transports/custom.js'
+import { numberToHex } from './utils/encoding/toHex.js'
+import { parseEther } from './utils/unit/parseEther.js'
+
+const sender = accounts[0].address
+const recipient = accounts[1].address
+
+describe('in-process node', () => {
+ test('runs a MemoryClient and this repository’s Viem client in one process', async () => {
+ const memoryClient = createMemoryClient({
+ miningConfig: { type: 'manual' },
+ })
+ await memoryClient.tevmReady()
+ const client = createClient({
+ account: sender,
+ transport: custom({
+ request: (request) => memoryClient.request(request as never) as never,
+ }),
+ })
+
+ await memoryClient.tevmSetAccount({
+ address: sender,
+ balance: parseEther('10'),
+ })
+
+ expect(await getBalance(client, { address: sender })).toBe(parseEther('10'))
+ expect(memoryClient.transport.tevm.miningConfig.type).toBe('manual')
+ })
+
+ test('mines manually: transactions stay pending until `tevmMine`', async () => {
+ const memoryClient = createMemoryClient({
+ miningConfig: { type: 'manual' },
+ })
+ await memoryClient.tevmReady()
+ const client = createClient({
+ account: sender,
+ transport: custom({
+ request: (request) => memoryClient.request(request as never) as never,
+ }),
+ })
+
+ await memoryClient.tevmSetAccount({
+ address: sender,
+ balance: parseEther('10'),
+ })
+ await memoryClient.impersonateAccount({ address: sender })
+
+ const before = await getBlockNumber(client, { cacheTime: 0 })
+ const recipientBalance = await getBalance(client, { address: recipient })
+ const hash = await sendTransaction(client, {
+ account: sender,
+ chain: null,
+ to: recipient,
+ value: parseEther('1'),
+ })
+
+ expect(hash).toBeHex()
+ expect(await getBlockNumber(client, { cacheTime: 0 })).toBe(before)
+
+ await memoryClient.tevmMine({ blockCount: 1 })
+
+ expect(await getBlockNumber(client, { cacheTime: 0 })).toBe(before + 1n)
+ expect(await getBalance(client, { address: recipient })).toBe(
+ recipientBalance + parseEther('1'),
+ )
+
+ await memoryClient.stopImpersonatingAccount({ address: sender })
+ })
+
+ test('snapshots and reverts through the Anvil-compatible RPC surface', async () => {
+ const memoryClient = createMemoryClient({
+ miningConfig: { type: 'manual' },
+ })
+ await memoryClient.tevmReady()
+ const client = createClient({
+ transport: custom({
+ request: (request) => memoryClient.request(request as never) as never,
+ }),
+ })
+
+ await memoryClient.tevmSetAccount({
+ address: recipient,
+ balance: parseEther('5'),
+ })
+
+ const snapshot = await memoryClient.request({
+ method: 'anvil_snapshot',
+ params: [],
+ } as never)
+ await memoryClient.tevmSetAccount({ address: recipient, balance: 1n })
+ expect(await getBalance(client, { address: recipient })).toBe(1n)
+
+ expect(
+ await memoryClient.request({
+ method: 'anvil_revert',
+ params: [snapshot],
+ } as never),
+ ).toBe(true)
+ expect(await getBalance(client, { address: recipient })).toBe(
+ parseEther('5'),
+ )
+ })
+})
+
+describe('forking', () => {
+ test('retains lazily fetched fork state in the node cache', async () => {
+ const stateRequests: string[] = []
+ const cachedAddress = '0x1111111111111111111111111111111111111111'
+ const upstream = createTevmForkTransport(tevmMainnet.forkUrl)
+ const request = (async (request: {
+ method: string
+ params?: readonly unknown[]
+ }) => {
+ if (
+ request.method === 'eth_getCode' &&
+ request.params?.[0]?.toString().toLowerCase() === cachedAddress
+ ) {
+ stateRequests.push(request.method)
+ return '0x6000'
+ }
+ return upstream.request(request as never)
+ }) as typeof upstream.request
+ const memoryClient = createMemoryClient({
+ common: createCommon({
+ ...tevmMainnetCommon,
+ customCrypto: { kzg: createMockKzg() },
+ }),
+ fork: {
+ blockTag: tevmMainnet.forkBlockNumber,
+ transport: { ...upstream, request },
+ },
+ miningConfig: { type: 'manual' },
+ })
+ await memoryClient.tevmReady()
+
+ const stateManager = (await memoryClient.transport.tevm.getVm())
+ .stateManager
+ const address = createAddress(cachedAddress)
+ const first = await stateManager.getCode(address)
+ const afterFirstRead = stateRequests.filter(isCodeRequest).length
+ const second = await stateManager.getCode(address)
+
+ expect(first).toBeDefined()
+ expect(second).toEqual(first)
+ expect(afterFirstRead).toBeGreaterThan(0)
+ // This proves Tevm's lazy in-memory fork-state cache, not a durable cache
+ // of arbitrary RPC responses.
+ expect(stateRequests.filter(isCodeRequest)).toHaveLength(afterFirstRead)
+ })
+
+ test('pins the fork at the configured block number', async () => {
+ const client = tevmMainnet.getClient()
+ await tevmMainnet.ready()
+
+ expect(await getBlockNumber(client, { cacheTime: 0 })).toBe(
+ tevmMainnet.forkBlockNumber,
+ )
+ })
+})
+
+describe('@tevm/test-matchers', () => {
+ describe('primitives', () => {
+ test('toBeAddress / toEqualAddress', () => {
+ expect(sender).toBeAddress()
+ expect('0xF39Fd6e51aad88F6F4ce6aB8827279cffFb92266').toEqualAddress(
+ sender,
+ )
+ })
+
+ test('toBeHex / toEqualHex', () => {
+ expect('0x1234').toBeHex()
+ expect('0x1234').toEqualHex('0x1234')
+ })
+ })
+
+ describe('account & state', () => {
+ test('toBeInitializedAccount and toHaveState', async () => {
+ const stateAccount = '0x1111111111111111111111111111111111111111'
+ const node = createTevmNode()
+ await setAccountHandler(node)({
+ address: stateAccount,
+ balance: parseEther('2'),
+ nonce: 3n,
+ })
+
+ await expect(stateAccount).toBeInitializedAccount(node)
+ await expect(stateAccount).toHaveState(node, {
+ balance: parseEther('2'),
+ nonce: 3n,
+ })
+ })
+
+ test('toHaveStorageAt', async () => {
+ const node = createTevmNode()
+ const deployment = await deployHandler(node)({
+ ...SimpleContract.deploy(7n),
+ addToBlockchain: true,
+ })
+ assert(deployment.createdAddress)
+ const simple = SimpleContract.withAddress(deployment.createdAddress)
+
+ const slot = numberToHex(0, { size: 32 })
+ const value = numberToHex(7, { size: 1 })
+ await setAccountHandler(node)({
+ address: simple.address,
+ deployedBytecode: simple.deployedBytecode,
+ state: { [slot]: value },
+ })
+
+ await expect(simple).toHaveStorageAt(node, { slot, value })
+ })
+ })
+
+ describe('events', () => {
+ let memoryClient: ReturnType
+ let simple: ReturnType
+
+ beforeAll(async () => {
+ memoryClient = createMemoryClient()
+ await memoryClient.tevmReady()
+ const deployment = await memoryClient.tevmDeploy({
+ ...SimpleContract.deploy(7n),
+ addToBlockchain: true,
+ })
+ assert(deployment.createdAddress)
+ simple = SimpleContract.withAddress(deployment.createdAddress)
+ })
+
+ test('toEmit with positional args', async () => {
+ await expect(
+ memoryClient.tevmContract({
+ ...simple.write.set(100n),
+ from: sender,
+ addToBlockchain: true,
+ }),
+ )
+ .toEmit(simple, 'ValueSet')
+ .withEventArgs(100n)
+ })
+
+ test('toEmit with named args', async () => {
+ await expect(
+ memoryClient.tevmContract({
+ ...simple.write.set(101n),
+ from: sender,
+ addToBlockchain: true,
+ }),
+ )
+ .toEmit(simple, 'ValueSet')
+ .withEventNamedArgs({ newValue: 101n })
+ })
+ })
+
+ describe('traces', () => {
+ test('toCallContractFunction with named args', async () => {
+ const node = createTevmNode()
+ await setAccountHandler(node)({ address: sender, nonce: 1n })
+ const deployment = await deployHandler(node)({
+ ...AdvancedContract.deploy(1n, true, 'tevm', sender),
+ addToBlockchain: true,
+ })
+ assert(deployment.createdAddress)
+ const advanced = AdvancedContract.withAddress(deployment.createdAddress)
+
+ await expect(
+ contractHandler(node)({
+ ...advanced.write.setNumber(42n),
+ from: sender,
+ addToBlockchain: true,
+ }),
+ )
+ .toCallContractFunction(node, advanced, 'setNumber')
+ .withFunctionNamedArgs({ newValue: 42n })
+ })
+ })
+
+ describe('reverts', () => {
+ let memoryClient: ReturnType
+ let client: ReturnType
+ let errorContract: ReturnType
+
+ beforeAll(async () => {
+ memoryClient = createMemoryClient()
+ await memoryClient.tevmReady()
+ client = createClient({
+ account: sender,
+ transport: custom({
+ request: (request) => memoryClient.request(request as never) as never,
+ }),
+ })
+ const deployment = await memoryClient.tevmDeploy({
+ ...ErrorContract.deploy(),
+ addToBlockchain: true,
+ })
+ assert(deployment.createdAddress)
+ errorContract = ErrorContract.withAddress(deployment.createdAddress)
+ })
+
+ test('toBeRevertedWithString', async () => {
+ await expect(
+ memoryClient.tevmContract({
+ ...errorContract.write.revertWithStringError(),
+ }),
+ ).toBeRevertedWithString(client, 'This is a string error message')
+ })
+
+ test('toBeRevertedWithError with named args', async () => {
+ await expect(
+ memoryClient.tevmContract({
+ ...errorContract.write.revertWithCustomErrorSingleParam(),
+ }),
+ )
+ .toBeRevertedWithError(client, errorContract, 'ErrorWithSingleParam')
+ .withErrorNamedArgs({ amount: 100n })
+ })
+ })
+
+ describe('balances', () => {
+ test('toChangeTokenBalance for an ERC-20 transfer', async () => {
+ const node = createTevmNode()
+ const deployment = await deployHandler(node)({
+ ...TestERC20.deploy('Tevm Test Token', 'TEVM'),
+ addToBlockchain: true,
+ })
+ assert(deployment.createdAddress)
+ const token = TestERC20.withAddress(deployment.createdAddress)
+
+ await dealHandler(node)({
+ account: sender,
+ amount: 1_000n,
+ erc20: token.address,
+ })
+ await dealHandler(node)({
+ account: recipient,
+ amount: 1n,
+ erc20: token.address,
+ })
+
+ const transfer = contractHandler(node)({
+ ...token.write.transfer(recipient, 125n),
+ from: sender,
+ addToBlockchain: true,
+ })
+
+ await expect(transfer).toChangeTokenBalance(node, token, recipient, 125n)
+ // The matcher also accepts a bare transaction hash and a raw address.
+ await expect(
+ transfer.then((result) => result.txHash),
+ ).toChangeTokenBalance(node, token.address, sender, -125n)
+ })
+
+ test('toChangeBalance for a native transfer', async () => {
+ const node = createTevmNode()
+ await expect(
+ callHandler(node)({
+ addToBlockchain: true,
+ from: sender,
+ to: recipient,
+ value: 10n,
+ }),
+ ).toChangeBalance(node, recipient, 10n)
+ })
+ })
+})
+
+function isCodeRequest(method: string) {
+ return method === 'eth_getCode'
+}
diff --git a/src/utils/abi/parseEventLogs.bench.ts b/src/utils/abi/parseEventLogs.bench.ts
index 7085eb0393..b3e7fa5849 100644
--- a/src/utils/abi/parseEventLogs.bench.ts
+++ b/src/utils/abi/parseEventLogs.bench.ts
@@ -1,6 +1,6 @@
import { bench } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getLogs } from '../../actions/public/getLogs.js'
import { mainnet } from '../../chains/index.js'
import { createClient } from '../../clients/createClient.js'
@@ -69,8 +69,8 @@ const abi = [
] as const
const logs = await getLogs(client, {
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
bench('parseEventLogs', async () => {
diff --git a/src/utils/abi/parseEventLogs.test.ts b/src/utils/abi/parseEventLogs.test.ts
index 176a7df268..d6a6853bf5 100644
--- a/src/utils/abi/parseEventLogs.test.ts
+++ b/src/utils/abi/parseEventLogs.test.ts
@@ -1,11 +1,11 @@
import { describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { getLogs } from '../../actions/public/getLogs.js'
import type { Log } from '../../types/log.js'
import { parseEventLogs } from './parseEventLogs.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
const abi = [
{
@@ -114,8 +114,8 @@ const abi_unnamed = [
test('default', async () => {
const logs = await getLogs(client, {
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
const parsedLogs = parseEventLogs({
@@ -856,8 +856,8 @@ describe('args: args', () => {
test('args: eventName', async () => {
const logs = await getLogs(client, {
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
const transferLogs = parseEventLogs({
@@ -1143,8 +1143,8 @@ describe('behavior: events with identical selectors', () => {
test('args: strict', async () => {
const logs = await getLogs(client, {
- fromBlock: anvilMainnet.forkBlockNumber - 5n,
- toBlock: anvilMainnet.forkBlockNumber,
+ fromBlock: tevmMainnet.forkBlockNumber - 5n,
+ toBlock: tevmMainnet.forkBlockNumber,
})
const parsedLogs = parseEventLogs({
diff --git a/src/utils/ccip.test.ts b/src/utils/ccip.test.ts
index ea36d38f58..2a1dcd2680 100644
--- a/src/utils/ccip.test.ts
+++ b/src/utils/ccip.test.ts
@@ -1,12 +1,12 @@
import { describe, expect, test } from 'vitest'
import { OffchainLookupExample } from '~contracts/generated.js'
-import { anvilMainnet } from '~test/anvil.js'
import { createCcipServer } from '~test/ccip.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createHttpServer, deployOffchainLookupExample } from '~test/utils.js'
-import { createClient } from '../clients/createClient.js'
-import { http } from '../clients/transports/http.js'
+import type { Address } from '../accounts/index.js'
+import type { BaseError } from '../errors/base.js'
import { getUrl } from '../errors/utils.js'
import type { Hex } from '../types/misc.js'
import { encodeErrorResult } from './abi/encodeErrorResult.js'
@@ -14,7 +14,52 @@ import { encodeFunctionData } from './abi/encodeFunctionData.js'
import { ccipRequest, offchainLookup, offchainLookupAbiItem } from './ccip.js'
import { trim } from './data/trim.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
+
+/**
+ * Recovers the revert payload from a node error.
+ *
+ * A spec-compliant node puts the revert bytes in the JSON-RPC error's `data`,
+ * which `BaseError.walk` finds at whatever depth it is nested. Tevm instead
+ * only renders them into the error message as
+ * `execution reverted: custom error : `, so fall back to
+ * parsing that. Drop the fallback once Tevm populates `error.data`.
+ */
+function extractRevertData(error: unknown): Hex | undefined {
+ const cause = (error as BaseError).walk?.(
+ (error) => typeof (error as { data?: unknown }).data === 'string',
+ ) as { data: Hex } | null
+ if (cause) return cause.data
+
+ const rendered = `${(error as BaseError).details ?? ''}\n${(error as Error).message ?? ''}`
+ const match = rendered.match(/custom error (0x[0-9a-f]{8}):\s*(0x[0-9a-f]*)/i)
+ if (match) return `${match[1]}${match[2]!.slice(2)}` as Hex
+ return undefined
+}
+
+/**
+ * Triggers the contract's `OffchainLookup` revert and returns its raw revert
+ * data.
+ */
+async function getOffchainLookupRevertData(to: Address, name: string) {
+ const data = encodeFunctionData({
+ abi: OffchainLookupExample.abi,
+ functionName: 'getAddress',
+ args: [name],
+ })
+ try {
+ // Raw `eth_call`, so nothing follows the lookup before the revert surfaces.
+ await client.request({
+ method: 'eth_call',
+ params: [{ data, to }, 'latest'],
+ })
+ } catch (error) {
+ const data = extractRevertData(error)
+ if (data) return data
+ throw error
+ }
+ throw new Error('expected an `OffchainLookup` revert.')
+}
describe('offchainLookup', () => {
test('default', async () => {
@@ -23,29 +68,17 @@ describe('offchainLookup', () => {
urls: [`${server.url}/{sender}/{data}`],
})
- // biome-ignore lint/suspicious/noAsyncPromiseExecutor: _
- const data = await new Promise(async (resolve) => {
- try {
- const data = encodeFunctionData({
- abi: OffchainLookupExample.abi,
- functionName: 'getAddress',
- args: ['jxom.viem'],
- })
- await client.request({
- method: 'eth_call',
- params: [{ data, to: contractAddress! }, 'latest'],
- })
- } catch (err) {
- resolve((err as any).cause.data)
- }
- })
+ const data = await getOffchainLookupRevertData(
+ contractAddress!,
+ 'jxom.viem',
+ )
const result = await offchainLookup(client, {
data,
to: contractAddress!,
})
- expect(trim(result)).toEqual(accounts[0].address)
+ expect(trim(result)).toEqualAddress(accounts[0].address)
})
test('ccipRequest (client)', async () => {
@@ -54,32 +87,19 @@ describe('offchainLookup', () => {
urls: [`${server.url}/{sender}/{data}`],
})
- // biome-ignore lint/suspicious/noAsyncPromiseExecutor: _
- const data = await new Promise(async (resolve) => {
- try {
- const data = encodeFunctionData({
- abi: OffchainLookupExample.abi,
- functionName: 'getAddress',
- args: ['jxom.viem'],
- })
- await client.request({
- method: 'eth_call',
- params: [{ data, to: contractAddress! }, 'latest'],
- })
- } catch (err) {
- resolve((err as any).cause.data)
- }
- })
+ const data = await getOffchainLookupRevertData(
+ contractAddress!,
+ 'jxom.viem',
+ )
let count = 0
- const client_2 = createClient({
+ const client_2 = tevmMainnet.getClient({
ccipRead: {
request: async ({ data, sender, urls }) => {
count++
return ccipRequest({ data, sender, urls })
},
},
- transport: http(anvilMainnet.rpcUrl.http),
})
const result = await offchainLookup(client_2, {
@@ -87,7 +107,7 @@ describe('offchainLookup', () => {
to: contractAddress!,
})
- expect(trim(result)).toEqual(accounts[0].address)
+ expect(trim(result)).toEqualAddress(accounts[0].address)
expect(count).toBe(1)
})
@@ -97,22 +117,10 @@ describe('offchainLookup', () => {
urls: [`${server.url}/{sender}/{data}`],
})
- // biome-ignore lint/suspicious/noAsyncPromiseExecutor: _
- const data = await new Promise(async (resolve) => {
- try {
- const data = encodeFunctionData({
- abi: OffchainLookupExample.abi,
- functionName: 'getAddress',
- args: ['fake.viem'],
- })
- await client.request({
- method: 'eth_call',
- params: [{ data, to: contractAddress! }, 'latest'],
- })
- } catch (err) {
- resolve((err as any).cause.data)
- }
- })
+ const data = await getOffchainLookupRevertData(
+ contractAddress!,
+ 'fake.viem',
+ )
await expect(() =>
offchainLookup(client, {
diff --git a/src/utils/ens/avatar/parseAvatarRecord.test.ts b/src/utils/ens/avatar/parseAvatarRecord.test.ts
index aa58c05c3f..697b5ccad2 100644
--- a/src/utils/ens/avatar/parseAvatarRecord.test.ts
+++ b/src/utils/ens/avatar/parseAvatarRecord.test.ts
@@ -1,16 +1,16 @@
import { beforeAll, describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { deployEnsAvatarTokenUri } from '~test/utils.js'
import { reset } from '../../../actions/index.js'
import { parseAvatarRecord } from './parseAvatarRecord.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
beforeAll(async () => {
await reset(client, {
blockNumber: 23_085_558n,
- jsonRpcUrl: anvilMainnet.forkUrl,
+ jsonRpcUrl: tevmMainnet.forkUrl,
})
})
diff --git a/src/utils/ens/avatar/utils.test.ts b/src/utils/ens/avatar/utils.test.ts
index ad524e5051..13aba9c743 100644
--- a/src/utils/ens/avatar/utils.test.ts
+++ b/src/utils/ens/avatar/utils.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createHttpServer } from '~test/utils.js'
import {
@@ -13,7 +13,7 @@ import {
resolveAvatarUri,
} from './utils.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
describe('isImageUri', () => {
test('is image', async () => {
diff --git a/src/utils/filters/createFilterRequestScope.test.ts b/src/utils/filters/createFilterRequestScope.test.ts
index 087f47f3e9..f447e148fd 100644
--- a/src/utils/filters/createFilterRequestScope.test.ts
+++ b/src/utils/filters/createFilterRequestScope.test.ts
@@ -1,5 +1,5 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import { createHttpServer } from '~test/utils.js'
import { createBlockFilter } from '../../actions/public/createBlockFilter.js'
import { createPublicClient } from '../../clients/createPublicClient.js'
@@ -8,7 +8,7 @@ import { http } from '../../clients/transports/http.js'
import { createFilterRequestScope } from './createFilterRequestScope.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
const getRequest = createFilterRequestScope(client, {
diff --git a/src/utils/getAction.test.ts b/src/utils/getAction.test.ts
index f1a43b959d..f8f4f8de9e 100644
--- a/src/utils/getAction.test.ts
+++ b/src/utils/getAction.test.ts
@@ -1,28 +1,23 @@
import { expect, test, vi } from 'vitest'
import { wagmiContractConfig } from '~test/abis.js'
-import { anvilMainnet } from '~test/anvil.js'
+import { tevmMainnet } from '~test/tevm.js'
import * as getChainId from '../actions/public/getChainId.js'
import { readContract } from '../actions/public/readContract.js'
-import { createClient } from '../clients/createClient.js'
-import { http } from '../clients/transports/http.js'
import { getAction } from './getAction.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('uses tree-shakable action', async () => {
- const client = createClient({ chain: anvilMainnet.chain, transport: http() })
+ const client = tevmMainnet.getClient()
const actionSpy = vi.spyOn(getChainId, 'getChainId')
await getAction(client, getChainId.getChainId, 'getChainId')({})
expect(actionSpy).toBeCalledWith(client, {})
})
test('uses client action', async () => {
- const client = createClient({
- chain: anvilMainnet.chain,
- transport: http(),
- }).extend(() => ({
+ const client = tevmMainnet.getClient().extend(() => ({
async getChainId() {
return 69
},
diff --git a/src/utils/nonceManager.test.ts b/src/utils/nonceManager.test.ts
index f97aebcb33..063fe94cb5 100644
--- a/src/utils/nonceManager.test.ts
+++ b/src/utils/nonceManager.test.ts
@@ -1,36 +1,71 @@
-import { beforeAll, expect, test } from 'vitest'
-import { anvilMainnet, anvilOptimism } from '~test/anvil.js'
+import { createMemoryClient } from 'tevm'
+import { optimism as tevmOptimism } from 'tevm/common'
+import { beforeEach, expect, test } from 'vitest'
+import { createMemoryTransport, tevmMainnet } from '~test/tevm.js'
import { generatePrivateKey } from '../accounts/generatePrivateKey.js'
import { privateKeyToAccount } from '../accounts/privateKeyToAccount.js'
import {
dropTransaction,
getTransaction,
+ mine,
sendTransaction,
setBalance,
} from '../actions/index.js'
+import { optimism } from '../chains/index.js'
+import { createClient } from '../clients/createClient.js'
import { createNonceManager, jsonRpc, nonceManager } from './nonceManager.js'
import { parseEther } from './unit/parseEther.js'
-const privateKey = generatePrivateKey()
-const account = privateKeyToAccount(privateKey)
-
-const mainnetClient = anvilMainnet.getClient({ account })
-const optimismClient = anvilOptimism.getClient({ account })
-
-const mainnetArgs = {
- address: account.address,
- chainId: mainnetClient.chain.id,
- client: mainnetClient,
-} as const
-const optimismArgs = {
- address: account.address,
- chainId: optimismClient.chain.id,
- client: optimismClient,
-} as const
-
-beforeAll(async () => {
- await anvilMainnet.restart()
- await anvilOptimism.restart()
+/**
+ * A second in-process node on a different chain id, so the per-chain scoping
+ * of the nonce manager is exercised for real rather than simulated.
+ */
+const optimismMemoryClient = createMemoryClient({
+ common: tevmOptimism,
+ miningConfig: { type: 'auto' },
+})
+
+const mainnetClient = tevmMainnet.getClient()
+const optimismClient = Object.assign(
+ createClient({
+ chain: optimism,
+ pollingInterval: 100,
+ transport: createMemoryTransport(optimismMemoryClient),
+ }),
+ // `setBalance` derives its RPC method from `client.mode`.
+ { mode: 'tevm' as const },
+)
+
+/**
+ * `test/setup.ts` reverts the harness to its baseline before each test, so
+ * every test owns a fresh account and starts from nonce `0`.
+ */
+let account: ReturnType
+let mainnetArgs: {
+ address: `0x${string}`
+ chainId: number
+ client: typeof mainnetClient
+}
+let optimismArgs: {
+ address: `0x${string}`
+ chainId: number
+ client: typeof optimismClient
+}
+
+beforeEach(async () => {
+ account = privateKeyToAccount(generatePrivateKey())
+ mainnetArgs = {
+ address: account.address,
+ chainId: mainnetClient.chain.id,
+ client: mainnetClient,
+ }
+ optimismArgs = {
+ address: account.address,
+ chainId: optimismClient.chain.id,
+ client: optimismClient,
+ }
+
+ await optimismMemoryClient.tevmReady()
await setBalance(mainnetClient, {
address: account.address,
value: parseEther('100'),
@@ -41,20 +76,34 @@ beforeAll(async () => {
})
})
+/**
+ * The harness mines manually, and Tevm's `pending` transaction count does not
+ * account for the txpool, so mine each transaction to make the nonce visible.
+ */
+async function send(nonce?: number) {
+ const hash = await sendTransaction(mainnetClient, {
+ account,
+ to: account.address,
+ nonce,
+ value: 0n,
+ })
+ await mine(mainnetClient, { blocks: 1 })
+ return hash
+}
+
test('get next', async () => {
const nonceManager = createNonceManager({
source: jsonRpc(),
})
expect(await nonceManager.get(mainnetArgs)).toBe(0)
- await sendTransaction(mainnetClient, {
- to: account.address,
- value: 0n,
- })
+ await send()
expect(await nonceManager.get(mainnetArgs)).toBe(1)
+ // Scoped per chain: Optimism is untouched by the Mainnet transaction.
expect(await nonceManager.get(optimismArgs)).toBe(0)
await sendTransaction(optimismClient, {
+ account,
to: account.address,
value: 0n,
})
@@ -67,53 +116,31 @@ test('consume (sequence)', async () => {
})
const nonce_1 = await nonceManager.consume(mainnetArgs)
- expect(nonce_1).toBe(1)
- const promise_1 = sendTransaction(mainnetClient, {
- to: account.address,
- nonce: nonce_1,
- value: 0n,
- })
- expect(await nonceManager.get(mainnetArgs)).toBe(2)
+ expect(nonce_1).toBe(0)
+ const hash_1 = await send(nonce_1)
+ expect(await nonceManager.get(mainnetArgs)).toBe(1)
const nonce_2 = await nonceManager.consume(mainnetArgs)
- expect(nonce_2).toBe(2)
- const promise_2 = sendTransaction(mainnetClient, {
- to: account.address,
- nonce: nonce_2,
- value: 0n,
- })
- expect(await nonceManager.get(mainnetArgs)).toBe(3)
+ expect(nonce_2).toBe(1)
+ const hash_2 = await send(nonce_2)
+ expect(await nonceManager.get(mainnetArgs)).toBe(2)
const nonce_3 = await nonceManager.consume(mainnetArgs)
- expect(nonce_3).toBe(3)
- const promise_3 = sendTransaction(mainnetClient, {
- to: account.address,
- nonce: nonce_3,
- value: 0n,
- })
- expect(await nonceManager.get(mainnetArgs)).toBe(4)
-
- const [hash_1, hash_2, hash_3] = await Promise.all([
- promise_1,
- promise_2,
- promise_3,
- ])
+ expect(nonce_3).toBe(2)
+ const hash_3 = await send(nonce_3)
+ expect(await nonceManager.get(mainnetArgs)).toBe(3)
- expect((await getTransaction(mainnetClient, { hash: hash_1 })).nonce).toBe(1)
- expect((await getTransaction(mainnetClient, { hash: hash_2 })).nonce).toBe(2)
- expect((await getTransaction(mainnetClient, { hash: hash_3 })).nonce).toBe(3)
- expect(await nonceManager.get(mainnetArgs)).toBe(4)
+ expect((await getTransaction(mainnetClient, { hash: hash_1 })).nonce).toBe(0)
+ expect((await getTransaction(mainnetClient, { hash: hash_2 })).nonce).toBe(1)
+ expect((await getTransaction(mainnetClient, { hash: hash_3 })).nonce).toBe(2)
+ expect(await nonceManager.get(mainnetArgs)).toBe(3)
const nonce_4 = await nonceManager.consume(mainnetArgs)
- expect(nonce_4).toBe(4)
- const hash_4 = await sendTransaction(mainnetClient, {
- to: account.address,
- nonce: nonce_4,
- value: 0n,
- })
- expect((await getTransaction(mainnetClient, { hash: hash_4 })).nonce).toBe(4)
+ expect(nonce_4).toBe(3)
+ const hash_4 = await send(nonce_4)
+ expect((await getTransaction(mainnetClient, { hash: hash_4 })).nonce).toBe(3)
- expect(await nonceManager.get(mainnetArgs)).toBe(5)
+ expect(await nonceManager.get(mainnetArgs)).toBe(4)
})
test('consume (parallel)', async () => {
@@ -131,52 +158,38 @@ test('consume (parallel)', async () => {
nonceManager.get(mainnetArgs),
])
- expect(n_1).toBe(5)
- expect(nonce_1).toBe(5)
- expect(n_2).toBe(6)
- expect(nonce_2).toBe(6)
- expect(n_3).toBe(7)
- expect(nonce_3).toBe(7)
- expect(n_4).toBe(8)
-
- const [hash_1, hash_2, hash_3] = await Promise.all([
- sendTransaction(mainnetClient, {
- to: account.address,
- nonce: nonce_1,
- value: 0n,
- }),
- sendTransaction(mainnetClient, {
- to: account.address,
- nonce: nonce_2,
- value: 0n,
- }),
- sendTransaction(mainnetClient, {
- to: account.address,
- nonce: nonce_3,
- value: 0n,
- }),
- ])
-
- expect((await getTransaction(mainnetClient, { hash: hash_1 })).nonce).toBe(5)
- expect((await getTransaction(mainnetClient, { hash: hash_2 })).nonce).toBe(6)
- expect((await getTransaction(mainnetClient, { hash: hash_3 })).nonce).toBe(7)
- expect(await nonceManager.get(mainnetArgs)).toBe(8)
+ expect(n_1).toBe(0)
+ expect(nonce_1).toBe(0)
+ expect(n_2).toBe(1)
+ expect(nonce_2).toBe(1)
+ expect(n_3).toBe(2)
+ expect(nonce_3).toBe(2)
+ expect(n_4).toBe(3)
+
+ const hash_1 = await send(nonce_1)
+ const hash_2 = await send(nonce_2)
+ const hash_3 = await send(nonce_3)
+
+ expect((await getTransaction(mainnetClient, { hash: hash_1 })).nonce).toBe(0)
+ expect((await getTransaction(mainnetClient, { hash: hash_2 })).nonce).toBe(1)
+ expect((await getTransaction(mainnetClient, { hash: hash_3 })).nonce).toBe(2)
+ expect(await nonceManager.get(mainnetArgs)).toBe(3)
const nonce_4 = await nonceManager.consume(mainnetArgs)
- expect(nonce_4).toBe(8)
- const hash_4 = await sendTransaction(mainnetClient, {
- to: account.address,
- nonce: nonce_4,
- value: 0n,
- })
- expect((await getTransaction(mainnetClient, { hash: hash_4 })).nonce).toBe(8)
- expect(await nonceManager.get(mainnetArgs)).toBe(9)
+ expect(nonce_4).toBe(3)
+ const hash_4 = await send(nonce_4)
+ expect((await getTransaction(mainnetClient, { hash: hash_4 })).nonce).toBe(3)
+ expect(await nonceManager.get(mainnetArgs)).toBe(4)
})
test('nonceManager export', async () => {
- expect(await nonceManager.get(mainnetArgs)).toBe(9)
- expect(await nonceManager.consume(mainnetArgs)).toBe(9)
- expect(await nonceManager.get(mainnetArgs)).toBe(10)
+ // `createNonceManager.get` only bumps past a cached nonce once the source has
+ // advanced beyond zero, so prime the account with one mined transaction.
+ await send()
+
+ expect(await nonceManager.get(mainnetArgs)).toBe(1)
+ expect(await nonceManager.consume(mainnetArgs)).toBe(1)
+ expect(await nonceManager.get(mainnetArgs)).toBe(2)
const nonces = await Promise.all([
nonceManager.consume(mainnetArgs),
@@ -188,12 +201,12 @@ test('nonceManager export', async () => {
])
expect(nonces).toMatchInlineSnapshot(`
[
- 10,
- 11,
- 11,
- 12,
- 12,
- 13,
+ 2,
+ 3,
+ 3,
+ 4,
+ 4,
+ 5,
]
`)
})
@@ -203,42 +216,36 @@ test('dropped tx', async () => {
source: jsonRpc(),
})
- const args = {
- address: account.address,
- chainId: mainnetClient.chain.id,
- client: mainnetClient,
- }
-
- const nonce_1 = await nonceManager.consume(args)
- expect(nonce_1).toBe(9)
+ const nonce_1 = await nonceManager.consume(mainnetArgs)
+ expect(nonce_1).toBe(0)
const hash_1 = await sendTransaction(mainnetClient, {
account,
to: account.address,
nonce: nonce_1,
value: 0n,
})
- expect(await nonceManager.get(args)).toBe(10)
+ expect(await nonceManager.get(mainnetArgs)).toBe(1)
- const nonce_2 = await nonceManager.consume(args)
- expect(nonce_2).toBe(10)
+ const nonce_2 = await nonceManager.consume(mainnetArgs)
+ expect(nonce_2).toBe(1)
const hash_2 = await sendTransaction(mainnetClient, {
account,
to: account.address,
nonce: nonce_2,
value: 0n,
})
- expect(await nonceManager.get(args)).toBe(11)
+ expect(await nonceManager.get(mainnetArgs)).toBe(2)
await dropTransaction(mainnetClient, { hash: hash_1 })
await dropTransaction(mainnetClient, { hash: hash_2 })
- const nonce_3 = await nonceManager.consume(args)
- expect(nonce_3).toBe(9)
+ const nonce_3 = await nonceManager.consume(mainnetArgs)
+ expect(nonce_3).toBe(0)
await sendTransaction(mainnetClient, {
account,
to: account.address,
nonce: nonce_3,
value: 0n,
})
- expect(await nonceManager.get(args)).toBe(10)
+ expect(await nonceManager.get(mainnetArgs)).toBe(1)
})
diff --git a/src/utils/rpc/http.test.ts b/src/utils/rpc/http.test.ts
index e965f28f9b..40f9183ef2 100644
--- a/src/utils/rpc/http.test.ts
+++ b/src/utils/rpc/http.test.ts
@@ -1,6 +1,8 @@
import type { IncomingHttpHeaders } from 'node:http'
-import { describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import type { AddressInfo } from 'node:net'
+import { createServer } from 'tevm/server'
+import { afterAll, beforeAll, describe, expect, test, vi } from 'vitest'
+import { tevmMainnet } from '~test/tevm.js'
import { createHttpServer } from '~test/utils.js'
import { getBlockNumber, mine } from '../../actions/index.js'
import { keccak256 } from '../../index.js'
@@ -9,11 +11,44 @@ import * as withTimeout from '../promise/withTimeout.js'
import { wait } from '../wait.js'
import { getHttpRpcClient } from './http.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
+
+/**
+ * `getHttpRpcClient` is the transport under test, so it needs a real HTTP
+ * endpoint. Serve the same in-process Tevm node the harness client uses, so
+ * both views observe identical state.
+ */
+let rpcUrl: string
+let closeServer: () => Promise
+
+beforeAll(async () => {
+ await tevmMainnet.ready()
+ const server = createServer(
+ tevmMainnet.memoryClient,
+ {},
+ { compatibility: true },
+ )
+ await new Promise((resolve, reject) => {
+ server.once('error', reject)
+ server.listen(0, '127.0.0.1', () => {
+ server.off('error', reject)
+ resolve()
+ })
+ })
+ rpcUrl = `http://127.0.0.1:${(server.address() as AddressInfo).port}`
+ closeServer = () =>
+ new Promise((resolve, reject) =>
+ server.close((error) => (error ? reject(error) : resolve())),
+ )
+})
+
+afterAll(async () => {
+ await closeServer?.()
+})
describe('request', () => {
test('valid request', async () => {
- const client = getHttpRpcClient(anvilMainnet.rpcUrl.http)
+ const client = getHttpRpcClient(rpcUrl)
expect(
await client.request({
body: { method: 'web3_clientVersion' },
@@ -22,13 +57,13 @@ describe('request', () => {
{
"id": 1,
"jsonrpc": "2.0",
- "result": "anvil/v1.5.0",
+ "result": "tevm/1.0.0",
}
`)
})
test('valid request w/ incremented id', async () => {
- const client = getHttpRpcClient(anvilMainnet.rpcUrl.http)
+ const client = getHttpRpcClient(rpcUrl)
expect(
await client.request({
body: { method: 'web3_clientVersion' },
@@ -37,13 +72,28 @@ describe('request', () => {
{
"id": 1,
"jsonrpc": "2.0",
- "result": "anvil/v1.5.0",
+ "result": "tevm/1.0.0",
}
`)
})
+ // `@tevm/server` answers JSON-RPC errors with HTTP 400 rather than the
+ // spec's 200, which makes `getHttpRpcClient` raise `HttpRequestError`
+ // instead of resolving with the error body. These two tests cover the
+ // resolve-with-error-body path, so they assert against a spec-compliant
+ // stub server until Tevm's server returns 200 for JSON-RPC errors.
+ const errorServer = (error: { code: number; message: string }) =>
+ createHttpServer((_req, res) => {
+ res.writeHead(200, { 'Content-Type': 'application/json' })
+ res.end(JSON.stringify({ error, id: 1, jsonrpc: '2.0' }))
+ })
+
test('invalid rpc params', async () => {
- const client = getHttpRpcClient(anvilMainnet.rpcUrl.http)
+ const server = await errorServer({
+ code: -32602,
+ message: 'odd number of digits',
+ })
+ const client = getHttpRpcClient(server.url)
await expect(
client.request({
body: { method: 'eth_getBlockByHash', params: ['0x0', false] },
@@ -63,7 +113,11 @@ describe('request', () => {
})
test('invalid request', async () => {
- const client = getHttpRpcClient(anvilMainnet.rpcUrl.http)
+ const server = await errorServer({
+ code: -32601,
+ message: 'Method not found',
+ })
+ const client = getHttpRpcClient(server.url)
await expect(
client.request({
body: { method: 'eth_wagmi' },
@@ -81,7 +135,7 @@ describe('request', () => {
})
test('serial requests', async () => {
- const client = getHttpRpcClient(anvilMainnet.rpcUrl.http)
+ const client = getHttpRpcClient(rpcUrl)
const response: any = []
for (const i in Array.from({ length: 10 })) {
response.push(
@@ -89,7 +143,7 @@ describe('request', () => {
body: {
method: 'eth_getBlockByNumber',
params: [
- numberToHex(anvilMainnet.forkBlockNumber - BigInt(i)),
+ numberToHex(tevmMainnet.forkBlockNumber - BigInt(i)),
false,
],
},
@@ -98,13 +152,13 @@ describe('request', () => {
}
expect(response.map((r: any) => r.result.number)).toEqual(
Array.from({ length: 10 }).map((_, i) =>
- numberToHex(anvilMainnet.forkBlockNumber - BigInt(i)),
+ numberToHex(tevmMainnet.forkBlockNumber - BigInt(i)),
),
)
})
test('parallel requests', async () => {
- const rpcClient = getHttpRpcClient(anvilMainnet.rpcUrl.http)
+ const rpcClient = getHttpRpcClient(rpcUrl)
await wait(500)
@@ -282,7 +336,7 @@ describe('request', () => {
client.request({
body: {
method: 'eth_getBlockByNumber',
- params: [numberToHex(anvilMainnet.forkBlockNumber), false],
+ params: [numberToHex(tevmMainnet.forkBlockNumber), false],
},
}),
).rejects.toThrowErrorMatchingInlineSnapshot(`
@@ -309,7 +363,7 @@ describe('request', () => {
client.request({
body: {
method: 'eth_getBlockByNumber',
- params: [numberToHex(anvilMainnet.forkBlockNumber), false],
+ params: [numberToHex(tevmMainnet.forkBlockNumber), false],
},
}),
).rejects.toThrowErrorMatchingInlineSnapshot(
@@ -331,13 +385,13 @@ describe('request', () => {
throw new Error('foo', { cause: new Error('bar') })
})
- const client = getHttpRpcClient(anvilMainnet.rpcUrl.http)
+ const client = getHttpRpcClient(rpcUrl)
try {
await client.request({
body: {
method: 'eth_getBlockByNumber',
- params: [numberToHex(anvilMainnet.forkBlockNumber), false],
+ params: [numberToHex(tevmMainnet.forkBlockNumber), false],
},
})
} catch (error) {
@@ -350,7 +404,7 @@ describe('request', () => {
test('fetch override', async () => {
const fetchOverride = vi.fn(fetch)
- const client = getHttpRpcClient(anvilMainnet.rpcUrl.http, {
+ const client = getHttpRpcClient(rpcUrl, {
fetchFn: fetchOverride,
})
@@ -363,13 +417,13 @@ describe('request', () => {
// TODO: This is flaky.
test.skip('timeout', async () => {
- const client = getHttpRpcClient(anvilMainnet.rpcUrl.http)
+ const client = getHttpRpcClient(rpcUrl)
await expect(() =>
client.request({
body: {
method: 'eth_getBlockByNumber',
- params: [numberToHex(anvilMainnet.forkBlockNumber), false],
+ params: [numberToHex(tevmMainnet.forkBlockNumber), false],
},
timeout: 1,
}),
@@ -397,7 +451,7 @@ describe('request', () => {
client.request({
body: {
method: 'eth_getBlockByNumber',
- params: [numberToHex(anvilMainnet.forkBlockNumber), false],
+ params: [numberToHex(tevmMainnet.forkBlockNumber), false],
},
timeout: 10000,
}),
@@ -417,7 +471,7 @@ describe('request', () => {
describe('http (batch)', () => {
test('valid request', async () => {
- const client = getHttpRpcClient(anvilMainnet.rpcUrl.http)
+ const client = getHttpRpcClient(rpcUrl)
expect(
await client.request({
@@ -431,19 +485,19 @@ describe('http (batch)', () => {
{
"id": 1,
"jsonrpc": "2.0",
- "result": "anvil/v1.5.0",
+ "result": "tevm/1.0.0",
},
{
"id": 2,
"jsonrpc": "2.0",
- "result": "anvil/v1.5.0",
+ "result": "tevm/1.0.0",
},
]
`)
})
test('invalid rpc params', async () => {
- const client = getHttpRpcClient(anvilMainnet.rpcUrl.http)
+ const client = getHttpRpcClient(rpcUrl)
expect(
await client.request({
@@ -457,7 +511,7 @@ describe('http (batch)', () => {
{
"id": 1,
"jsonrpc": "2.0",
- "result": "anvil/v1.5.0",
+ "result": "tevm/1.0.0",
},
{
"error": {
@@ -472,7 +526,7 @@ describe('http (batch)', () => {
})
test('invalid request', async () => {
- const client = getHttpRpcClient(anvilMainnet.rpcUrl.http)
+ const client = getHttpRpcClient(rpcUrl)
expect(
await client.request({
@@ -483,7 +537,7 @@ describe('http (batch)', () => {
{
"id": 1,
"jsonrpc": "2.0",
- "result": "anvil/v1.5.0",
+ "result": "tevm/1.0.0",
},
{
"error": {
@@ -513,7 +567,7 @@ describe('http (batch)', () => {
{ method: 'web3_clientVersion' },
{
method: 'eth_getBlockByNumber',
- params: [numberToHex(anvilMainnet.forkBlockNumber), false],
+ params: [numberToHex(tevmMainnet.forkBlockNumber), false],
},
],
}),
@@ -543,7 +597,7 @@ describe('http (batch)', () => {
{ method: 'web3_clientVersion' },
{
method: 'eth_getBlockByNumber',
- params: [numberToHex(anvilMainnet.forkBlockNumber), false],
+ params: [numberToHex(tevmMainnet.forkBlockNumber), false],
},
],
}),
@@ -574,7 +628,7 @@ describe('http (batch)', () => {
{ method: 'web3_clientVersion' },
{
method: 'eth_getBlockByNumber',
- params: [numberToHex(anvilMainnet.forkBlockNumber), false],
+ params: [numberToHex(tevmMainnet.forkBlockNumber), false],
},
],
timeout: 10000,
@@ -605,7 +659,7 @@ test('https://github.com/wevm/viem/issues/2775', async () => {
client.request({
body: {
method: 'eth_getBlockByNumber',
- params: [numberToHex(anvilMainnet.forkBlockNumber), false],
+ params: [numberToHex(tevmMainnet.forkBlockNumber), false],
},
}),
).rejects.toThrowErrorMatchingInlineSnapshot(
diff --git a/src/utils/rpc/ipc.test.ts b/src/utils/rpc/ipc.test.ts
index 3b91a7ac8b..b06a7f87f1 100644
--- a/src/utils/rpc/ipc.test.ts
+++ b/src/utils/rpc/ipc.test.ts
@@ -1,7 +1,7 @@
import { Instance } from 'prool'
import { afterAll, beforeAll, describe, expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { anvilMainnet } from '~test/anvil-transports.js'
import { getBlockNumber, mine } from '../../actions/index.js'
import { createClient, http } from '../../index.js'
import type { RpcResponse } from '../../types/rpc.js'
diff --git a/src/utils/rpc/socket.test.ts b/src/utils/rpc/socket.test.ts
index 4cf5d97d84..4883f4c1b6 100644
--- a/src/utils/rpc/socket.test.ts
+++ b/src/utils/rpc/socket.test.ts
@@ -1,8 +1,9 @@
import { expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { wait } from '../wait.js'
import { getSocketRpcClient } from './socket.js'
+const socketUrl = 'ws://127.0.0.1:8545'
+
test('default', async () => {
let active = false
const socketClient = await getSocketRpcClient({
@@ -15,7 +16,7 @@ test('default', async () => {
request() {},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
expect(socketClient.socket.active).toBeTruthy()
@@ -36,7 +37,7 @@ test('parallel invocations of same url returns identical client', async () => {
request() {},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
const [client1, client2, client3, client4] = await Promise.all([
@@ -75,7 +76,7 @@ test('sequential invocations of same url returns identical client', async () =>
request() {},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
const client1 = await socketClient()
@@ -109,7 +110,7 @@ test('request', async () => {
},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
const response = await new Promise((res) => {
@@ -173,7 +174,7 @@ test('reconnect', async () => {
delay: 100,
attempts: 5,
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
await wait(200)
@@ -268,7 +269,7 @@ test('reconnect on close', async () => {
reconnect: {
delay: 100,
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
socketClient.close()
@@ -290,7 +291,7 @@ test('keepAlive enabled', async () => {
}
},
keepAlive: { interval: 100 },
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
const spy = vi.spyOn(socketClient.socket, 'ping')
@@ -312,7 +313,7 @@ test('keepAlive disabled', async () => {
}
},
keepAlive: false,
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
const spy = vi.spyOn(socketClient.socket, 'ping')
@@ -332,7 +333,7 @@ test('request (eth_subscribe)', async () => {
},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
const response = await new Promise((res) => {
@@ -392,7 +393,7 @@ test('reconnect (eth_subscribe)', async () => {
delay: 100,
attempts: 5,
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
await wait(200)
@@ -470,7 +471,7 @@ test('request (eth_unsubscribe)', async () => {
},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
const response = await new Promise((res) => {
@@ -514,7 +515,7 @@ test('request (eth_subscription)', async () => {
},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
const response = await new Promise((res) => {
@@ -554,7 +555,7 @@ test('request (error)', async () => {
},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
const response = await new Promise((res) => {
@@ -586,7 +587,7 @@ test('request (error on close - subscription)', async () => {
},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
const error = await new Promise((res) => {
@@ -622,7 +623,7 @@ test('request (error on close)', async () => {
},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
const [error] = await Promise.all([
@@ -661,7 +662,7 @@ test('requestAsync', async () => {
},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
const response = await socketClient.requestAsync({
@@ -696,7 +697,7 @@ test('requestAsync (error on close)', async () => {
},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
await expect(() =>
@@ -729,7 +730,7 @@ test('behavior: eth_unsubscribe removes subscription immediately', async () => {
},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
// Subscribe first
@@ -773,7 +774,7 @@ test('behavior: eth_unsubscribe removes subscription even when socket throws', a
},
}
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
// Subscribe first
@@ -852,7 +853,7 @@ test('behavior: unsubscribed subscription is not re-subscribed on reconnect', as
delay: 50,
attempts: 5,
},
- url: anvilMainnet.rpcUrl.ws,
+ url: socketUrl,
})
// Subscribe
diff --git a/src/utils/rpc/webSocket.test.ts b/src/utils/rpc/webSocket.test.ts
index ac8425715f..6855a5581a 100644
--- a/src/utils/rpc/webSocket.test.ts
+++ b/src/utils/rpc/webSocket.test.ts
@@ -1,7 +1,7 @@
import { WebSocket } from 'isows'
import { describe, expect, test, vi } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
+import { anvilMainnet } from '~test/anvil-transports.js'
import { getBlockNumber } from '../../actions/public/getBlockNumber.js'
import { mine } from '../../actions/test/mine.js'
diff --git a/src/utils/signature/recoverTransactionAddress.test.ts b/src/utils/signature/recoverTransactionAddress.test.ts
index 6a1c68551d..93a362075f 100644
--- a/src/utils/signature/recoverTransactionAddress.test.ts
+++ b/src/utils/signature/recoverTransactionAddress.test.ts
@@ -1,7 +1,7 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
import { kzg } from '~test/kzg.js'
+import { tevmMainnet } from '~test/tevm.js'
import {
privateKeyToAccount,
serializeSignature,
@@ -18,7 +18,6 @@ import type {
import { sidecarsToVersionedHashes } from '../blob/sidecarsToVersionedHashes.js'
import { toBlobSidecars } from '../blob/toBlobSidecars.js'
import {
- getAddress,
hexToBytes,
keccak256,
serializeTransaction,
@@ -26,7 +25,7 @@ import {
} from '../index.js'
import { recoverTransactionAddress } from './recoverTransactionAddress.js'
-const client = anvilMainnet.getClient().extend(walletActions)
+const client = tevmMainnet.getClient().extend(walletActions)
const transaction = {
chainId: 1,
@@ -56,7 +55,7 @@ test('signature (hex)', async () => {
serializedTransaction,
signature: serializeSignature(signature),
})
- expect(address.toLowerCase()).toBe(accounts[0].address)
+ expect(address).toEqualAddress(accounts[0].address)
})
test('signature (bytes)', async () => {
@@ -69,7 +68,7 @@ test('signature (bytes)', async () => {
serializedTransaction,
signature: hexToBytes(serializeSignature(signature)),
})
- expect(address.toLowerCase()).toBe(accounts[0].address)
+ expect(address).toEqualAddress(accounts[0].address)
})
test('4844 tx', async () => {
@@ -95,7 +94,7 @@ test('4844 tx', async () => {
serializedTransaction,
signature,
})
- expect(address.toLowerCase()).toBe(accounts[0].address)
+ expect(address).toEqualAddress(accounts[0].address)
})
test('via `walletClient.signTransaction`', async () => {
@@ -108,7 +107,7 @@ test('via `walletClient.signTransaction`', async () => {
const address = await recoverTransactionAddress({
serializedTransaction,
})
- expect(address.toLowerCase()).toBe(accounts[0].address)
+ expect(address).toEqualAddress(accounts[0].address)
})
test('via account `signTransaction`', async () => {
@@ -119,12 +118,12 @@ test('via account `signTransaction`', async () => {
const address = await recoverTransactionAddress({
serializedTransaction,
})
- expect(address.toLowerCase()).toBe(accounts[0].address)
+ expect(address).toEqualAddress(accounts[0].address)
})
test('via `getTransaction`', async () => {
const transaction = await getTransaction(client, {
- blockNumber: anvilMainnet.forkBlockNumber - 15n,
+ blockNumber: tevmMainnet.forkBlockNumber - 15n,
index: 0,
})
const serializedTransaction = serializeTransaction({
@@ -134,7 +133,7 @@ test('via `getTransaction`', async () => {
const address = await recoverTransactionAddress({
serializedTransaction,
})
- expect(address).toBe(getAddress(transaction.from))
+ expect(address).toEqualAddress(transaction.from)
})
test('legacy', async () => {
diff --git a/src/utils/signature/verifyHash.test.ts b/src/utils/signature/verifyHash.test.ts
index 7fcae3b2e1..30399b7b2f 100644
--- a/src/utils/signature/verifyHash.test.ts
+++ b/src/utils/signature/verifyHash.test.ts
@@ -1,15 +1,21 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
+import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { signMessage } from '../../actions/wallet/signMessage.js'
import { hashMessage } from './hashMessage.js'
import { verifyHash } from './verifyHash.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
+
+// Tevm implements neither `personal_sign` nor `eth_signTypedData_v4`, so sign
+// with a local account. The signature is identical to the JSON-RPC one, which
+// is all these verification utilities consume.
+const account = privateKeyToAccount(accounts[0].privateKey)
test('default', async () => {
let signature = await signMessage(client!, {
- account: accounts[0].address,
+ account,
message: 'hello world',
})
expect(
@@ -21,7 +27,7 @@ test('default', async () => {
).toBeTruthy()
signature = await signMessage(client!, {
- account: accounts[0].address,
+ account,
message: 'wagmi 🥵',
})
expect(
diff --git a/src/utils/signature/verifyMessage.test.ts b/src/utils/signature/verifyMessage.test.ts
index 8f23cb6801..ea0b66c487 100644
--- a/src/utils/signature/verifyMessage.test.ts
+++ b/src/utils/signature/verifyMessage.test.ts
@@ -1,14 +1,20 @@
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
+import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { signMessage } from '../../actions/wallet/signMessage.js'
import { verifyMessage } from './verifyMessage.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
+
+// Tevm implements neither `personal_sign` nor `eth_signTypedData_v4`, so sign
+// with a local account. The signature is identical to the JSON-RPC one, which
+// is all these verification utilities consume.
+const account = privateKeyToAccount(accounts[0].privateKey)
test('default', async () => {
let signature = await signMessage(client!, {
- account: accounts[0].address,
+ account,
message: 'hello world',
})
expect(
@@ -20,7 +26,7 @@ test('default', async () => {
).toBeTruthy()
signature = await signMessage(client!, {
- account: accounts[0].address,
+ account,
message: 'wagmi 🥵',
})
expect(
diff --git a/src/utils/signature/verifyTypedData.test.ts b/src/utils/signature/verifyTypedData.test.ts
index 14a7415aac..ce95172fb6 100644
--- a/src/utils/signature/verifyTypedData.test.ts
+++ b/src/utils/signature/verifyTypedData.test.ts
@@ -1,11 +1,11 @@
import type { Address } from 'abitype'
import { expect, test } from 'vitest'
-import { anvilMainnet } from '~test/anvil.js'
import { accounts, typedData } from '~test/constants.js'
+import { tevmMainnet } from '~test/tevm.js'
import { signTypedData } from '../../actions/index.js'
import { verifyTypedData } from './verifyTypedData.js'
-const client = anvilMainnet.getClient()
+const client = tevmMainnet.getClient()
test('default', async () => {
expect(
@@ -29,7 +29,11 @@ test('default', async () => {
).toBeTruthy()
})
-test('https://github.com/wevm/viem/issues/2306', async () => {
+// TODO: unskip once Tevm implements `eth_signTypedData_v4`. This case asserts
+// that a raw *address* account is checksum-normalized before it reaches the
+// node, so it cannot be rewritten around a local account without losing the
+// behaviour under test.
+test.skip('https://github.com/wevm/viem/issues/2306', async () => {
const typedData = (address: Address) =>
({
types: {
diff --git a/src/zksync/actions/claimFailedDeposit.test.ts b/src/zksync/actions/claimFailedDeposit.test.ts
index a0fb70da99..b606bbbdd5 100644
--- a/src/zksync/actions/claimFailedDeposit.test.ts
+++ b/src/zksync/actions/claimFailedDeposit.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet, anvilZksync } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet, tevmZksync } from '~test/tevm.js'
import {
mockFailedDepositReceipt,
mockFailedDepositTransaction,
@@ -23,23 +23,23 @@ const request = (async ({ method, params }) => {
if (method === 'eth_call')
return '0x00000000000000000000000070a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
if (method === 'eth_getTransactionCount') return 1n
- if (method === 'eth_getBlockByNumber') return anvilMainnet.forkBlockNumber
- if (method === 'eth_chainId') return anvilMainnet.chain.id
- return anvilMainnet.getClient().request({ method, params } as any)
+ if (method === 'eth_getBlockByNumber') return tevmMainnet.forkBlockNumber
+ if (method === 'eth_chainId') return tevmMainnet.chain.id
+ return tevmMainnet.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
-const baseClient = anvilMainnet.getClient({ batch: { multicall: false } })
+const baseClient = tevmMainnet.getClient({ batch: { multicall: false } })
baseClient.request = request
const client = baseClient.extend(publicActions)
-const baseClientWithAccount = anvilMainnet.getClient({
+const baseClientWithAccount = tevmMainnet.getClient({
batch: { multicall: false },
account: true,
})
baseClientWithAccount.request = request
const clientWithAccount = baseClientWithAccount.extend(publicActions)
-const baseClientL2 = anvilZksync.getClient()
+const baseClientL2 = tevmZksync.getClient()
baseClientL2.request = (async ({ method, params }) => {
if (method === 'eth_getTransactionReceipt') return mockFailedDepositReceipt
if (method === 'eth_getTransactionByHash') return mockFailedDepositTransaction
@@ -49,7 +49,7 @@ baseClientL2.request = (async ({ method, params }) => {
if (method === 'eth_estimateGas') return 158774n
return (
(await mockRequestReturnData(method)) ??
- (await anvilZksync.getClient().request({ method, params } as any))
+ (await tevmZksync.getClient().request({ method, params } as any))
)
}) as EIP1193RequestFn
const clientL2 = baseClientL2.extend(publicActionsL2())
diff --git a/src/zksync/actions/deployContract.test.ts b/src/zksync/actions/deployContract.test.ts
index 72c3c18e95..dfd1eccd29 100644
--- a/src/zksync/actions/deployContract.test.ts
+++ b/src/zksync/actions/deployContract.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilZksync } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmZksync } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import type { EIP1193RequestFn } from '../../index.js'
import type { DeployContractParameters } from './deployContract.js'
@@ -8,13 +8,13 @@ import { deployContract } from './deployContract.js'
const sourceAccount = accounts[0]
-const client = anvilZksync.getClient()
+const client = tevmZksync.getClient()
client.request = (async ({ method, params }) => {
if (method === 'eth_sendRawTransaction')
return '0x9afe47f3d95eccfc9210851ba5f877f76d372514a26b48bad848a07f77c33b87'
if (method === 'eth_estimateGas') return 158774n
- return anvilZksync.getClient().request({ method, params } as any)
+ return tevmZksync.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
const base: DeployContractParameters = {
diff --git a/src/zksync/actions/deposit.test.ts b/src/zksync/actions/deposit.test.ts
index cc67460249..fdacf24b8b 100644
--- a/src/zksync/actions/deposit.test.ts
+++ b/src/zksync/actions/deposit.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet, anvilZksync } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet, tevmZksync } from '~test/tevm.js'
import { mockRequestReturnData } from '~test/zksync.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { publicActions } from '../../clients/decorators/public.js'
@@ -20,30 +20,30 @@ const request = (async ({ method, params }) => {
if (method === 'eth_call')
return '0x00000000000000000000000070a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
if (method === 'eth_getTransactionCount') return 1n
- if (method === 'eth_getBlockByNumber') return anvilMainnet.forkBlockNumber
- if (method === 'eth_chainId') return anvilMainnet.chain.id
- return anvilMainnet.getClient().request({ method, params } as any)
+ if (method === 'eth_getBlockByNumber') return tevmMainnet.forkBlockNumber
+ if (method === 'eth_chainId') return tevmMainnet.chain.id
+ return tevmMainnet.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
-const baseClient = anvilMainnet.getClient({ batch: { multicall: false } })
+const baseClient = tevmMainnet.getClient({ batch: { multicall: false } })
baseClient.request = request
const client = baseClient.extend(publicActions)
-const baseClientWithAccount = anvilMainnet.getClient({
+const baseClientWithAccount = tevmMainnet.getClient({
batch: { multicall: false },
account: true,
})
baseClientWithAccount.request = request
const clientWithAccount = baseClientWithAccount.extend(publicActions)
-const baseClientL2 = anvilZksync.getClient()
+const baseClientL2 = tevmZksync.getClient()
baseClientL2.request = (async ({ method, params }) => {
if (method === 'eth_call')
return '0x00000000000000000000000070a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
if (method === 'eth_estimateGas') return 158774n
return (
(await mockRequestReturnData(method)) ??
- (await anvilZksync.getClient().request({ method, params } as any))
+ (await tevmZksync.getClient().request({ method, params } as any))
)
}) as EIP1193RequestFn
const clientL2 = baseClientL2.extend(publicActionsL2())
diff --git a/src/zksync/actions/finalizeWithdrawal.test.ts b/src/zksync/actions/finalizeWithdrawal.test.ts
index 0ded77da9a..ecdc668c7f 100644
--- a/src/zksync/actions/finalizeWithdrawal.test.ts
+++ b/src/zksync/actions/finalizeWithdrawal.test.ts
@@ -1,7 +1,6 @@
import { expect, test } from 'vitest'
-
-import { anvilMainnet, anvilZksync } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet, tevmZksync } from '~test/tevm.js'
import { mockRequestReturnData } from '~test/zksync.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { type EIP1193RequestFn, publicActions } from '../../index.js'
@@ -18,30 +17,30 @@ const request = (async ({ method, params }) => {
return '0x00000000000000000000000070a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
if (method === 'eth_getTransactionCount') return 1n
if (method === 'eth_gasPrice') return 150_000_000n
- if (method === 'eth_getBlockByNumber') return anvilMainnet.forkBlockNumber
- if (method === 'eth_chainId') return anvilMainnet.chain.id
- return anvilMainnet.getClient().request({ method, params } as any)
+ if (method === 'eth_getBlockByNumber') return tevmMainnet.forkBlockNumber
+ if (method === 'eth_chainId') return tevmMainnet.chain.id
+ return tevmMainnet.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
-const baseClient = anvilMainnet.getClient({ batch: { multicall: false } })
+const baseClient = tevmMainnet.getClient({ batch: { multicall: false } })
baseClient.request = request
const client = baseClient.extend(publicActions)
-const baseClientWithAccount = anvilMainnet.getClient({
+const baseClientWithAccount = tevmMainnet.getClient({
batch: { multicall: false },
account: true,
})
baseClientWithAccount.request = request
const clientWithAccount = baseClientWithAccount.extend(publicActions)
-const baseClientL2 = anvilZksync.getClient()
+const baseClientL2 = tevmZksync.getClient()
baseClientL2.request = (async ({ method, params }) => {
if (method === 'eth_call')
return '0x00000000000000000000000070a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
if (method === 'eth_estimateGas') return 158774n
return (
(await mockRequestReturnData(method)) ??
- (await anvilZksync.getClient().request({ method, params } as any))
+ (await tevmZksync.getClient().request({ method, params } as any))
)
}) as EIP1193RequestFn
const clientL2 = baseClientL2.extend(publicActionsL2())
diff --git a/src/zksync/actions/isWithdrawalFinalized.test.ts b/src/zksync/actions/isWithdrawalFinalized.test.ts
index 430fbdced4..b5d237ed84 100644
--- a/src/zksync/actions/isWithdrawalFinalized.test.ts
+++ b/src/zksync/actions/isWithdrawalFinalized.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet, anvilZksync } from '~test/anvil.js'
+import { tevmMainnet, tevmZksync } from '~test/tevm.js'
import { mockRequestReturnData } from '~test/zksync.js'
import { type EIP1193RequestFn, publicActions } from '../../index.js'
import { publicActionsL2 } from '../index.js'
@@ -17,30 +17,30 @@ const request = (async ({ method, params }) => {
return '0x0000000000000000000000000000000000000000000000000000000000000000'
if (method === 'eth_getTransactionCount') return 1n
if (method === 'eth_gasPrice') return 150_000_000n
- if (method === 'eth_getBlockByNumber') return anvilMainnet.forkBlockNumber
- if (method === 'eth_chainId') return anvilMainnet.chain.id
- return anvilMainnet.getClient().request({ method, params } as any)
+ if (method === 'eth_getBlockByNumber') return tevmMainnet.forkBlockNumber
+ if (method === 'eth_chainId') return tevmMainnet.chain.id
+ return tevmMainnet.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
-const baseClient = anvilMainnet.getClient({ batch: { multicall: false } })
+const baseClient = tevmMainnet.getClient({ batch: { multicall: false } })
baseClient.request = request
const client = baseClient.extend(publicActions)
-const baseClientWithAccount = anvilMainnet.getClient({
+const baseClientWithAccount = tevmMainnet.getClient({
batch: { multicall: false },
account: true,
})
baseClientWithAccount.request = request
const clientWithAccount = baseClientWithAccount.extend(publicActions)
-const baseClientL2 = anvilZksync.getClient()
+const baseClientL2 = tevmZksync.getClient()
baseClientL2.request = (async ({ method, params }) => {
if (method === 'eth_call')
return '0x00000000000000000000000070a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
if (method === 'eth_estimateGas') return 158774n
return (
(await mockRequestReturnData(method)) ??
- (await anvilZksync.getClient().request({ method, params } as any))
+ (await tevmZksync.getClient().request({ method, params } as any))
)
}) as EIP1193RequestFn
const clientL2 = baseClientL2.extend(publicActionsL2())
diff --git a/src/zksync/actions/requestExecute.test.ts b/src/zksync/actions/requestExecute.test.ts
index de691a4b0e..78284a3aff 100644
--- a/src/zksync/actions/requestExecute.test.ts
+++ b/src/zksync/actions/requestExecute.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilMainnet, anvilZksync } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet, tevmZksync } from '~test/tevm.js'
import { mockRequestReturnData } from '~test/zksync.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { type EIP1193RequestFn, publicActions } from '../../index.js'
@@ -16,30 +16,30 @@ const request = (async ({ method, params }) => {
if (method === 'eth_call')
return '0x00000000000000000000000070a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
if (method === 'eth_getTransactionCount') return 1n
- if (method === 'eth_getBlockByNumber') return anvilMainnet.forkBlockNumber
- if (method === 'eth_chainId') return anvilMainnet.chain.id
- return anvilMainnet.getClient().request({ method, params } as any)
+ if (method === 'eth_getBlockByNumber') return tevmMainnet.forkBlockNumber
+ if (method === 'eth_chainId') return tevmMainnet.chain.id
+ return tevmMainnet.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
-const baseClient = anvilMainnet.getClient({ batch: { multicall: false } })
+const baseClient = tevmMainnet.getClient({ batch: { multicall: false } })
baseClient.request = request
const client = baseClient.extend(publicActions)
-const baseClientWithAccount = anvilMainnet.getClient({
+const baseClientWithAccount = tevmMainnet.getClient({
batch: { multicall: false },
account: true,
})
baseClientWithAccount.request = request
const clientWithAccount = baseClientWithAccount.extend(publicActions)
-const baseClientL2 = anvilZksync.getClient()
+const baseClientL2 = tevmZksync.getClient()
baseClientL2.request = (async ({ method, params }) => {
if (method === 'eth_call')
return '0x00000000000000000000000070a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
if (method === 'eth_estimateGas') return 158774n
return (
(await mockRequestReturnData(method)) ??
- (await anvilZksync.getClient().request({ method, params } as any))
+ (await tevmZksync.getClient().request({ method, params } as any))
)
}) as EIP1193RequestFn
const clientL2 = baseClientL2.extend(publicActionsL2())
diff --git a/src/zksync/actions/sendEip712Transaction.test.ts b/src/zksync/actions/sendEip712Transaction.test.ts
index 3bd6b2677d..8ce1c92645 100644
--- a/src/zksync/actions/sendEip712Transaction.test.ts
+++ b/src/zksync/actions/sendEip712Transaction.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilZksync } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmZksync } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import type { EIP1193RequestFn } from '../../index.js'
import type { ZksyncTransactionRequestEIP712 } from '../../zksync/index.js'
@@ -8,13 +8,13 @@ import { sendEip712Transaction } from './sendEip712Transaction.js'
const sourceAccount = accounts[0]
-const client = anvilZksync.getClient()
+const client = tevmZksync.getClient()
client.request = (async ({ method, params }) => {
if (method === 'eth_sendRawTransaction')
return '0x9afe47f3d95eccfc9210851ba5f877f76d372514a26b48bad848a07f77c33b87'
if (method === 'eth_estimateGas') return 158774n
- return anvilZksync.getClient().request({ method, params } as any)
+ return tevmZksync.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
const base: ZksyncTransactionRequestEIP712 = {
diff --git a/src/zksync/actions/sendTransaction.test.ts b/src/zksync/actions/sendTransaction.test.ts
index 4f3c28f793..30b505f903 100644
--- a/src/zksync/actions/sendTransaction.test.ts
+++ b/src/zksync/actions/sendTransaction.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilZksync } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmZksync } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import type { EIP1193RequestFn, TransactionRequest } from '../../index.js'
import type { ZksyncTransactionRequestEIP712 } from '../index.js'
@@ -8,13 +8,13 @@ import { sendTransaction } from './sendTransaction.js'
const sourceAccount = accounts[0]
-const client = anvilZksync.getClient()
+const client = tevmZksync.getClient()
client.request = (async ({ method, params }) => {
if (method === 'eth_sendRawTransaction')
return '0x9afe47f3d95eccfc9210851ba5f877f76d372514a26b48bad848a07f77c33b87'
if (method === 'eth_estimateGas') return 158774n
- return anvilZksync.getClient().request({ method, params } as any)
+ return tevmZksync.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
const base: TransactionRequest = {
diff --git a/src/zksync/actions/signEip712Transaction.test.ts b/src/zksync/actions/signEip712Transaction.test.ts
index 494eac5d02..98e97f3309 100644
--- a/src/zksync/actions/signEip712Transaction.test.ts
+++ b/src/zksync/actions/signEip712Transaction.test.ts
@@ -1,13 +1,13 @@
import { expect, test } from 'vitest'
-import { anvilZksync } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmZksync } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import type { ZksyncTransactionRequestEIP712 } from '../../zksync/index.js'
import { signTransaction } from './signTransaction.js'
const sourceAccount = accounts[0]
-const client = anvilZksync.getClient()
+const client = tevmZksync.getClient()
const base: ZksyncTransactionRequestEIP712 = {
from: '0x0000000000000000000000000000000000000000',
diff --git a/src/zksync/actions/signTransaction.test.ts b/src/zksync/actions/signTransaction.test.ts
index e197e3bfed..74ff500a55 100644
--- a/src/zksync/actions/signTransaction.test.ts
+++ b/src/zksync/actions/signTransaction.test.ts
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest'
-import { anvilZksync } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmZksync } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import type { TransactionRequest } from '../../index.js'
import type { ZksyncTransactionRequestEIP712 } from '../../zksync/index.js'
@@ -8,7 +8,7 @@ import { signTransaction } from './signTransaction.js'
const sourceAccount = accounts[0]
-const client = anvilZksync.getClient()
+const client = tevmZksync.getClient()
const base: TransactionRequest = {
from: '0x0000000000000000000000000000000000000000',
diff --git a/src/zksync/actions/withdraw.test.ts b/src/zksync/actions/withdraw.test.ts
index 89579ea5d7..51fdd2559a 100644
--- a/src/zksync/actions/withdraw.test.ts
+++ b/src/zksync/actions/withdraw.test.ts
@@ -1,7 +1,6 @@
import { expect, test } from 'vitest'
-
-import { anvilZksync } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmZksync } from '~test/tevm.js'
import { mockRequestReturnData } from '~test/zksync.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import type { EIP1193RequestFn } from '../../index.js'
@@ -17,20 +16,20 @@ const request = (async ({ method, params }) => {
return '0x00000000000000000000000070a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
if (method === 'eth_estimateGas') return 158774n
if (method === 'eth_getTransactionCount') return 1n
- if (method === 'eth_getBlockByNumber') return anvilZksync.forkBlockNumber
+ if (method === 'eth_getBlockByNumber') return tevmZksync.forkBlockNumber
if (method === 'eth_gasPrice') return 200_000_000_000n
- if (method === 'eth_chainId') return anvilZksync.chain.id
+ if (method === 'eth_chainId') return tevmZksync.chain.id
return (
(await mockRequestReturnData(method)) ??
- (await anvilZksync.getClient().request({ method, params } as any))
+ (await tevmZksync.getClient().request({ method, params } as any))
)
}) as EIP1193RequestFn
-const baseClient = anvilZksync.getClient({ batch: { multicall: false } })
+const baseClient = tevmZksync.getClient({ batch: { multicall: false } })
baseClient.request = request
const client = baseClient.extend(publicActionsL2())
-const baseClientWithAccount = anvilZksync.getClient({
+const baseClientWithAccount = tevmZksync.getClient({
account: true,
batch: { multicall: false },
})
diff --git a/src/zksync/decorators/eip712.test.ts b/src/zksync/decorators/eip712.test.ts
index 0b41bd8f35..48cddf8e48 100644
--- a/src/zksync/decorators/eip712.test.ts
+++ b/src/zksync/decorators/eip712.test.ts
@@ -1,17 +1,17 @@
import { expect, test } from 'vitest'
import { greeterContract } from '~test/abis.js'
-import { anvilZksync } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmZksync } from '~test/tevm.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import { simulateContract } from '../../actions/index.js'
import type { EIP1193RequestFn } from '../../types/eip1193.js'
import { eip712WalletActions } from './eip712.js'
-const client = anvilZksync.getClient()
+const client = tevmZksync.getClient()
const zksyncClient = client.extend(eip712WalletActions())
-const clientWithAccount = anvilZksync.getClient({ account: true })
+const clientWithAccount = tevmZksync.getClient({ account: true })
const zksyncClientWithAccount = clientWithAccount.extend(eip712WalletActions())
test('default', async () => {
@@ -29,7 +29,7 @@ test('sendTransaction', async () => {
zksyncClient.request = (async ({ method, params }) => {
if (method === 'eth_sendRawTransaction')
return '0x9afe47f3d95eccfc9210851ba5f877f76d372514a26b48bad848a07f77c33b87'
- return anvilZksync.getClient().request({ method, params } as any)
+ return tevmZksync.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
const client = zksyncClient.extend(eip712WalletActions())
@@ -56,7 +56,7 @@ test('sendTransaction with account hoisting', async () => {
return '0x9afe47f3d95eccfc9210851ba5f877f76d372514a26b48bad848a07f77c33b87'
if (method === 'eth_signTypedData_v4')
return '0x71f8da808502540be4008502540be40083026c369470997970c51812dc3a010c7d01b50e0d17dc79c88502540be4000082014480808201448082c350c0b841cee039b6d00ff61277ac416a0c98d23d9bfc64e024cd3d3f946ab33cdfe4576b5e4d3bed2c0a2383a1a13f0777b46ca2c19edefb67d8d8584af7d963f5284ca81bf85b94fd9ae5ebb0f6656f4b77a0e99dcbc5138d54b0bab8448c5a344500000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000'
- return anvilZksync.getClient().request({ method, params } as any)
+ return tevmZksync.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
const client = zksyncClientWithAccount.extend(eip712WalletActions())
@@ -98,7 +98,7 @@ test('signTransaction with account hoisting', async () => {
zksyncClientWithAccount.request = (async ({ method, params }) => {
if (method === 'eth_signTypedData_v4')
return '0x71f8da808502540be4008502540be40083026c369470997970c51812dc3a010c7d01b50e0d17dc79c88502540be4000082014480808201448082c350c0b841cee039b6d00ff61277ac416a0c98d23d9bfc64e024cd3d3f946ab33cdfe4576b5e4d3bed2c0a2383a1a13f0777b46ca2c19edefb67d8d8584af7d963f5284ca81bf85b94fd9ae5ebb0f6656f4b77a0e99dcbc5138d54b0bab8448c5a344500000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000'
- return anvilZksync
+ return tevmZksync
.getClient({ account: true })
.request({ method, params } as any)
}) as EIP1193RequestFn
@@ -125,7 +125,7 @@ test('writeContract', async () => {
if (method === 'eth_sendRawTransaction')
return '0x9afe47f3d95eccfc9210851ba5f877f76d372514a26b48bad848a07f77c33b87'
if (method === 'eth_call') return undefined
- return anvilZksync.getClient().request({ method, params } as any)
+ return tevmZksync.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
const client = zksyncClient.extend(eip712WalletActions())
diff --git a/src/zksync/decorators/publicL1.test.ts b/src/zksync/decorators/publicL1.test.ts
index a8458c8ed8..15620fc905 100644
--- a/src/zksync/decorators/publicL1.test.ts
+++ b/src/zksync/decorators/publicL1.test.ts
@@ -1,7 +1,6 @@
import { beforeEach, expect, test, vi } from 'vitest'
-
-import { anvilMainnet, anvilZksync } from '~test/anvil.js'
import { accounts } from '~test/constants.js'
+import { tevmMainnet, tevmZksync } from '~test/tevm.js'
import { mockRequestReturnData } from '~test/zksync.js'
import { privateKeyToAccount } from '../../accounts/privateKeyToAccount.js'
import * as readContract from '../../actions/public/readContract.js'
@@ -26,7 +25,7 @@ const clientWithAccount = createWalletClient({
beforeEach(() => vi.spyOn(readContract, 'readContract').mockResolvedValue(170n))
-const baseClient = anvilMainnet.getClient({
+const baseClient = tevmMainnet.getClient({
batch: { multicall: false },
account: true,
})
@@ -38,20 +37,20 @@ baseClient.request = (async ({ method, params }) => {
return '0x00000000000000000000000070a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
if (method === 'eth_getTransactionCount') return 1n
if (method === 'eth_gasPrice') return 150_000_000n
- if (method === 'eth_getBlockByNumber') return anvilMainnet.forkBlockNumber
- if (method === 'eth_chainId') return anvilMainnet.chain.id
- return anvilMainnet.getClient().request({ method, params } as any)
+ if (method === 'eth_getBlockByNumber') return tevmMainnet.forkBlockNumber
+ if (method === 'eth_chainId') return tevmMainnet.chain.id
+ return tevmMainnet.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
const clientL1 = baseClient.extend(publicActionsL1())
-const baseZksyncClient = anvilZksync.getClient()
+const baseZksyncClient = tevmZksync.getClient()
baseZksyncClient.request = (async ({ method, params }) => {
if (method === 'eth_call')
return '0x00000000000000000000000070a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
if (method === 'eth_estimateGas') return 158774n
return (
(await mockRequestReturnData(method)) ??
- (await anvilZksync.getClient().request({ method, params } as any))
+ (await tevmZksync.getClient().request({ method, params } as any))
)
}) as EIP1193RequestFn
const zksyncClient = baseZksyncClient.extend(publicActionsL2())
diff --git a/src/zksync/decorators/publicL2.test.ts b/src/zksync/decorators/publicL2.test.ts
index 5800c1e3cf..9e1591bcbc 100644
--- a/src/zksync/decorators/publicL2.test.ts
+++ b/src/zksync/decorators/publicL2.test.ts
@@ -1,6 +1,6 @@
import type { Address } from 'abitype'
import { expect, test } from 'vitest'
-import { anvilZksync } from '~test/anvil.js'
+import { tevmZksync } from '~test/tevm.js'
import {
getZksyncMockProvider,
mockAccountBalances,
@@ -217,14 +217,14 @@ test('getLogProof', async () => {
test.skip('getL2TokenAddress', async () => {
const daiL1 = '0x70a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
const daiL2 = '0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF'
- const client = anvilZksync.getClient()
+ const client = tevmZksync.getClient()
client.request = (async ({ method, params }) => {
if (method === 'eth_call') return padHex(daiL2)
if (method === 'eth_estimateGas') return 158774n
if (method === 'zks_getBridgeContracts') return mockAddresses
if (method === 'zks_getBaseTokenL1Address') return mockBaseTokenL1Address
- return anvilZksync.getClient().request({ method, params } as any)
+ return tevmZksync.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
const zksyncClient = client.extend(publicActionsL2())
@@ -239,13 +239,13 @@ test.skip('getL2TokenAddress', async () => {
test.skip('getL1TokenAddress', async () => {
const daiL1 = '0x70a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
const daiL2 = '0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF'
- const client = anvilZksync.getClient()
+ const client = tevmZksync.getClient()
client.request = (async ({ method, params }) => {
if (method === 'eth_call') return padHex(daiL1)
if (method === 'eth_estimateGas') return 158774n
if (method === 'zks_getBridgeContracts') return mockAddresses
- return anvilZksync.getClient().request({ method, params } as any)
+ return tevmZksync.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
const zksyncClient = client.extend(publicActionsL2())
diff --git a/src/zksync/decorators/walletL1.test.ts b/src/zksync/decorators/walletL1.test.ts
index 8f92fe83ae..bfbdfb96be 100644
--- a/src/zksync/decorators/walletL1.test.ts
+++ b/src/zksync/decorators/walletL1.test.ts
@@ -1,5 +1,5 @@
import { expect, test } from 'vitest'
-import { anvilMainnet, anvilZksync } from '~test/anvil.js'
+import { tevmMainnet, tevmZksync } from '~test/tevm.js'
import {
accounts,
mockFailedDepositReceipt,
@@ -15,7 +15,7 @@ import {
walletActionsL1,
} from '../../zksync/index.js'
-const baseClient = anvilMainnet.getClient({
+const baseClient = tevmMainnet.getClient({
batch: { multicall: false },
account: true,
})
@@ -28,13 +28,13 @@ baseClient.request = (async ({ method, params }) => {
if (method === 'eth_getTransactionCount') return 1n
if (method === 'eth_gasPrice') return 150_000_000n
if (method === 'eth_maxPriorityFeePerGas') return 100_000_000n
- if (method === 'eth_getBlockByNumber') return anvilMainnet.forkBlockNumber
- if (method === 'eth_chainId') return anvilMainnet.chain.id
- return anvilMainnet.getClient().request({ method, params } as any)
+ if (method === 'eth_getBlockByNumber') return tevmMainnet.forkBlockNumber
+ if (method === 'eth_chainId') return tevmMainnet.chain.id
+ return tevmMainnet.getClient().request({ method, params } as any)
}) as EIP1193RequestFn
const client = baseClient.extend(walletActionsL1())
-const baseZksyncClient = anvilZksync.getClient()
+const baseZksyncClient = tevmZksync.getClient()
baseZksyncClient.request = (async ({ method, params }) => {
if (
method === 'eth_getTransactionReceipt' &&
@@ -49,7 +49,7 @@ baseZksyncClient.request = (async ({ method, params }) => {
if (method === 'eth_estimateGas') return 158774n
return (
(await mockRequestReturnData(method)) ??
- (await anvilZksync.getClient().request({ method, params } as any))
+ (await tevmZksync.getClient().request({ method, params } as any))
)
}) as EIP1193RequestFn
const zksyncClient = baseZksyncClient.extend(publicActionsL2())
diff --git a/src/zksync/decorators/walletL2.test.ts b/src/zksync/decorators/walletL2.test.ts
index 5854d6216d..ef8d2c6d7e 100644
--- a/src/zksync/decorators/walletL2.test.ts
+++ b/src/zksync/decorators/walletL2.test.ts
@@ -1,12 +1,12 @@
import { expect, test } from 'vitest'
-import { anvilZksync } from '~test/anvil.js'
+import { tevmZksync } from '~test/tevm.js'
import { mockRequestReturnData } from '~test/zksync.js'
import type { EIP1193RequestFn } from '../../index.js'
import { legacyEthAddress } from '../../zksync/index.js'
import { walletActionsL2 } from './walletL2.js'
-const baseClient = anvilZksync.getClient({
+const baseClient = tevmZksync.getClient({
account: true,
batch: { multicall: false },
})
@@ -19,12 +19,12 @@ baseClient.request = (async ({ method, params }) => {
return '0x00000000000000000000000070a0F165d6f8054d0d0CF8dFd4DD2005f0AF6B55'
if (method === 'eth_estimateGas') return 158774n
if (method === 'eth_getTransactionCount') return 1n
- if (method === 'eth_getBlockByNumber') return anvilZksync.forkBlockNumber
+ if (method === 'eth_getBlockByNumber') return tevmZksync.forkBlockNumber
if (method === 'eth_gasPrice') return 200_000_000_000n
- if (method === 'eth_chainId') return anvilZksync.chain.id
+ if (method === 'eth_chainId') return tevmZksync.chain.id
return (
(await mockRequestReturnData(method)) ??
- (await anvilZksync.getClient().request({ method, params } as any))
+ (await tevmZksync.getClient().request({ method, params } as any))
)
}) as EIP1193RequestFn
const client = baseClient.extend(walletActionsL2())
diff --git a/src/zksync/utils/bridge/getWithdrawalL2ToL1Log.test.ts b/src/zksync/utils/bridge/getWithdrawalL2ToL1Log.test.ts
index 97a9d482e8..4ace879d0e 100644
--- a/src/zksync/utils/bridge/getWithdrawalL2ToL1Log.test.ts
+++ b/src/zksync/utils/bridge/getWithdrawalL2ToL1Log.test.ts
@@ -1,14 +1,14 @@
import { expect, test } from 'vitest'
-import { anvilZksync } from '~test/anvil.js'
+import { tevmZksync } from '~test/tevm.js'
import { mockRequestReturnData } from '~test/zksync.js'
import type { EIP1193RequestFn } from '../../../types/eip1193.js'
import { getWithdrawalL2ToL1Log } from './getWithdrawalL2ToL1Log.js'
-const client = anvilZksync.getClient({ batch: { multicall: false } })
+const client = tevmZksync.getClient({ batch: { multicall: false } })
client.request = (async ({ method, params }) => {
return (
(await mockRequestReturnData(method)) ??
- (await anvilZksync.getClient().request({ method, params } as any))
+ (await tevmZksync.getClient().request({ method, params } as any))
)
}) as EIP1193RequestFn
diff --git a/src/zksync/utils/bridge/getWithdrawalLog.test.ts b/src/zksync/utils/bridge/getWithdrawalLog.test.ts
index 7fa21ae790..b0145ff263 100644
--- a/src/zksync/utils/bridge/getWithdrawalLog.test.ts
+++ b/src/zksync/utils/bridge/getWithdrawalLog.test.ts
@@ -1,14 +1,14 @@
import { expect, test } from 'vitest'
-import { anvilZksync } from '~test/anvil.js'
+import { tevmZksync } from '~test/tevm.js'
import { mockRequestReturnData } from '~test/zksync.js'
import type { EIP1193RequestFn } from '../../../types/eip1193.js'
import { getWithdrawalLog } from './getWithdrawalLog.js'
-const client = anvilZksync.getClient({ batch: { multicall: false } })
+const client = tevmZksync.getClient({ batch: { multicall: false } })
client.request = (async ({ method, params }) => {
return (
(await mockRequestReturnData(method)) ??
- (await anvilZksync.getClient().request({ method, params } as any))
+ (await tevmZksync.getClient().request({ method, params } as any))
)
}) as EIP1193RequestFn
diff --git a/test/README.md b/test/README.md
new file mode 100644
index 0000000000..0582105f25
--- /dev/null
+++ b/test/README.md
@@ -0,0 +1,95 @@
+# Test infrastructure
+
+Core tests that use chain state run against one in-process Tevm `MemoryClient`
+per Vitest file. There are no ports, child processes, startup polling, or
+cross-worker proxies. [`setup.ts`](./setup.ts) registers the Tevm matchers,
+initializes the fork only for files that access the harness, and restores that
+file's baseline snapshot before each test.
+
+Set `VITE_TEVM_FORK_URL` to an archive-capable mainnet endpoint. The fixture is
+pinned to block `22263621`, the nearest blob-free block to the old fixture
+anchor; Tevm rc.151 cannot copy the KZG configuration while deserializing a
+fork anchor containing EIP-4844 transactions.
+
+The lazy Optimism, Sepolia, and ZKsync fixtures use
+`VITE_TEVM_FORK_URL_OPTIMISM`, `VITE_TEVM_FORK_URL_SEPOLIA`, and
+`VITE_TEVM_FORK_URL_ZKSYNC`. Each endpoint must retain historical state at the
+fixture's pinned block. The fixture prints its public fallback when a variable
+is absent; those public endpoints are convenient, but they are not guaranteed
+to be archive-capable or rate-limit-free.
+
+```bash
+VITE_TEVM_FORK_URL=https://your-mainnet-archive-rpc.example \
+ pnpm exec vitest run -c test/vitest.config.ts --project core
+```
+
+## Harness API
+
+Import the harness from `~test/tevm.js`.
+
+- `fundedAccounts`: the ten deterministic test accounts (address, balance, and
+ private key).
+- `createTevmTestHarness(parameters?: { fork?: false; forkBlockNumber?:
+ bigint; forkUrl?: string; chain?: Chain; common?: Common }):
+ TevmTestHarness`: creates an isolated harness. `fork: false` is for tests
+ that use only local state.
+- `tevmMainnet`: the per-file default harness.
+- `tevmOptimism`, `tevmSepolia`, and `tevmZksync`: lazy, chain-specific
+ harnesses.
+- `tevmMainnet.getClient(config?)`: creates a Viem client over the in-process
+ EIP-1193 transport. `account: true` selects `fundedAccounts[0]`;
+ `chain: false` creates a chainless client.
+- `tevmMainnet.ready(): Promise`: initializes the fork and installs the
+ funded accounts.
+- `tevmMainnet.isUsed(): boolean`: lets the shared setup avoid initializing a
+ fork for files that never access the harness.
+- `tevmMainnet.reset(): Promise`: reverts to the baseline and immediately
+ takes its replacement.
+- `tevmMainnet.deployContract(parameters)`: typed `tevmDeploy` passthrough.
+- `tevmMainnet.memoryClient` and `tevmMainnet.node`: direct Tevm APIs for
+ Tevm-specific assertions and handlers.
+
+Use `tevmMainnet.getClient()` for Viem action tests. Use `memoryClient`,
+`node`, and `deployContract` only when the test needs direct fixture control.
+Call Tevm methods such as `memoryClient.tevmSetAccount` directly instead of
+adding fixture wrappers.
+
+## Matchers
+
+`@tevm/test-matchers` is registered globally. The available matcher families
+are:
+
+- values: `toBeAddress`, `toEqualAddress`, `toBeHex`, `toEqualHex`;
+- balances: `toChangeBalance`, `toChangeBalances`,
+ `toChangeTokenBalance`, `toChangeTokenBalances`;
+- events: `toEmit`, `withEventArgs`, `withEventNamedArgs`;
+- reverts: `toBeReverted`, `toBeRevertedWithString`,
+ `toBeRevertedWithError`, `withErrorArgs`, `withErrorNamedArgs`;
+- calls: `toCallContractFunction`, `withFunctionArgs`,
+ `withFunctionNamedArgs`;
+- state: `toBeInitializedAccount`, `toHaveState`, `toHaveStorageAt`.
+
+Prefer these semantic assertions over raw string equality or
+`toBeDefined()`. Event and call matchers can consume Tevm execution results;
+receipt hashes need a client where the matcher signature requests one.
+
+## WebSocket and IPC blocker
+
+`tevm/server` currently exposes HTTP only. The following tests remain unchanged
+and are excluded from the default project and CI:
+
+- `src/clients/transports/webSocket.test.ts`
+- `src/clients/transports/ipc.test.ts`
+- `src/utils/rpc/webSocket.test.ts`
+- `src/utils/rpc/ipc.test.ts`
+
+They can still be run locally, with Foundry installed, via:
+
+```bash
+TEST_ANVIL_TRANSPORTS=true \
+ pnpm exec vitest run -c test/vitest.config.ts --project anvil-transports
+```
+
+[`src/anvil-transports.ts`](./src/anvil-transports.ts) is a small compatibility
+fixture for only those four files. Delete it, its optional global setup, and
+the optional Vitest project as soon as Tevm supplies WebSocket and IPC servers.
diff --git a/test/setup.anvil-transports.global.ts b/test/setup.anvil-transports.global.ts
new file mode 100644
index 0000000000..6654162f6e
--- /dev/null
+++ b/test/setup.anvil-transports.global.ts
@@ -0,0 +1,6 @@
+import { anvilMainnet } from './src/anvil-transports.js'
+
+export default async function () {
+ const stop = await anvilMainnet.start()
+ return stop
+}
diff --git a/test/setup.global.ts b/test/setup.global.ts
deleted file mode 100644
index 4f08249b66..0000000000
--- a/test/setup.global.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import * as executionInstances from './src/anvil.js'
-import * as bundlerInstances from './src/bundler.js'
-
-export default async function () {
- if (process.env.SKIP_GLOBAL_SETUP) return
-
- // Using this proxy, we can parallelize our test suite by spawning multiple "on demand" anvil
- // instances and proxying requests to them. Especially for local development, this is much faster
- // than running the tests serially.
- //
- // In vitest, each thread is assigned a unique, numerical id (`process.env.VITEST_POOL_ID`). We
- // append this id to the local rpc url (e.g. `http://127.0.0.1:8545/`).
- //
- // Whenever a request hits the proxy server at this url, it spawns (or reuses) an anvil instance
- // at a randomly assigned port and proxies the request to it. The anvil instance is added to a
- // [id:port] mapping for future request and is kept alive until the test suite finishes.
- //
- // Since each thread processes one test file after the other, we don't have to worry about
- // non-deterministic behavior caused by multiple tests hitting the same anvil instance concurrently
- // as long as we avoid `test.concurrent()`.
- //
- // We still need to remember to reset the anvil instance between test files. This is generally
- // handled in `setup.ts` but may require additional resetting (e.g. via `afterAll`), in case of
- // any custom per-test adjustments that persist beyond `anvil_reset`.
- const shutdown = await Promise.all([
- ...Object.values(executionInstances).map((instance) => instance.start()),
- ...Object.values(bundlerInstances).map((instance) => instance.start()),
- ])
- return () => Promise.all(shutdown.map((fn) => fn()))
-}
diff --git a/test/setup.ts b/test/setup.ts
index aedbc24784..c91910ddd3 100644
--- a/test/setup.ts
+++ b/test/setup.ts
@@ -1,16 +1,23 @@
+import '@tevm/test-matchers'
import { afterEach, beforeAll, beforeEach, vi } from 'vitest'
-import { setIntervalMining } from '../src/actions/test/setIntervalMining.js'
import { setErrorConfig } from '../src/errors/base.js'
import { cleanupCache, listenersCache } from '../src/utils/observe.js'
import { promiseCache, responseCache } from '../src/utils/promise/withCache.js'
import { idCache } from '../src/utils/rpc/id.js'
import { socketClientCache } from '../src/utils/rpc/socket.js'
-import * as instances from './src/anvil.js'
+import { tevmMainnet } from './src/tevm.js'
-const client = instances.anvilMainnet.getClient()
+const usesTevm = process.env.TEST_ANVIL_TRANSPORTS !== 'true'
-beforeAll(() => {
+vi.mock('../src/errors/utils.ts', () => ({
+ getContractAddress: vi
+ .fn()
+ .mockReturnValue('0x0000000000000000000000000000000000000000'),
+ getUrl: vi.fn().mockReturnValue('http://localhost'),
+}))
+
+beforeAll(async () => {
setErrorConfig({
getDocsUrl({ docsBaseUrl, docsPath }) {
return docsPath
@@ -19,13 +26,8 @@ beforeAll(() => {
},
version: 'viem@x.y.z',
})
- vi.mock('../src/errors/utils.ts', () => ({
- getContractAddress: vi
- .fn()
- .mockReturnValue('0x0000000000000000000000000000000000000000'),
- getUrl: vi.fn().mockReturnValue('http://localhost'),
- }))
-})
+ if (usesTevm && tevmMainnet.isUsed()) await tevmMainnet.ready()
+}, 60_000)
beforeEach(async () => {
idCache.reset()
@@ -34,10 +36,10 @@ beforeEach(async () => {
listenersCache.clear()
cleanupCache.clear()
socketClientCache.clear()
-
- if (process.env.SKIP_GLOBAL_SETUP) return
- await setIntervalMining(client, { interval: 0 })
-}, 20_000)
+ if (process.env.SKIP_GLOBAL_SETUP || !usesTevm || !tevmMainnet.isUsed())
+ return
+ await tevmMainnet.reset()
+}, 30_000)
afterEach(() => {
vi.restoreAllMocks()
diff --git a/test/src/account-abstraction.ts b/test/src/account-abstraction.ts
index 77992d76ba..ba643054ac 100644
--- a/test/src/account-abstraction.ts
+++ b/test/src/account-abstraction.ts
@@ -34,7 +34,7 @@ import {
} from '../../src/index.js'
// biome-ignore lint/correctness/noUnusedImports: required for inference.
import type * as _ from '../../src/node_modules/abitype/dist/types/abi.js'
-import { anvilMainnet } from './anvil.js'
+import { tevmMainnet } from './tevm.js'
import { accounts } from './constants.js'
import {
createHttpServer,
@@ -44,7 +44,7 @@ import {
deploySoladyAccount_07,
} from './utils.js'
-const client = anvilMainnet.getClient({ account: true })
+const client = tevmMainnet.getClient({ account: true })
export async function getSmartAccounts_08() {
const { implementationAddress } = await deploySimple7702Account_08()
diff --git a/test/src/anvil-transports.ts b/test/src/anvil-transports.ts
new file mode 100644
index 0000000000..500eb334dc
--- /dev/null
+++ b/test/src/anvil-transports.ts
@@ -0,0 +1,45 @@
+import { Instance } from 'prool'
+
+import { mainnet } from '../../src/chains/index.js'
+import { createClient, http } from '../../src/index.js'
+
+/**
+ * Temporary compatibility fixture for the WebSocket and IPC transport suites.
+ *
+ * `tevm/server` is HTTP-only. Keep this fixture out of the default Vitest
+ * projects and CI; run it explicitly with `TEST_ANVIL_TRANSPORTS=true` until
+ * Tevm exposes WebSocket and IPC servers.
+ */
+export const anvilMainnet = {
+ chain: {
+ ...mainnet,
+ name: 'Mainnet (Anvil transport blocker)',
+ },
+ forkBlockNumber: 22263623n,
+ forkUrl: process.env.VITE_TEVM_FORK_URL ?? 'https://cloudflare-eth.com',
+ port: 8545,
+ rpcUrl: {
+ http: 'http://127.0.0.1:8545',
+ ipc: '/tmp/viem-anvil-transports.ipc',
+ ws: 'ws://127.0.0.1:8545',
+ },
+ getClient() {
+ return Object.assign(
+ createClient({
+ chain: this.chain,
+ pollingInterval: 100,
+ transport: http(this.rpcUrl.http),
+ }),
+ { mode: 'anvil' as const },
+ )
+ },
+ async start() {
+ const instance = Instance.anvil({
+ chainId: mainnet.id,
+ forkBlockNumber: this.forkBlockNumber,
+ forkUrl: this.forkUrl,
+ })
+ await instance.start()
+ return () => instance.stop()
+ },
+} as const
diff --git a/test/src/anvil.ts b/test/src/anvil.ts
deleted file mode 100644
index 0980bc007a..0000000000
--- a/test/src/anvil.ts
+++ /dev/null
@@ -1,298 +0,0 @@
-import { Instance, Server } from 'prool'
-
-import { mainnet, optimism, sepolia, zksync } from '../../src/chains/index.js'
-import { ipc } from '../../src/clients/transports/ipc.js'
-import {
- type Account,
- type Address,
- type Chain,
- type Client,
- type ClientConfig,
- createClient,
- type ExactPartial,
- http,
- type ParseAccount,
- type Transport,
- webSocket,
-} from '../../src/index.js'
-import { createSiweMessage } from '../../src/siwe/index.js'
-import { ProviderRpcError } from '../../src/types/eip1193.js'
-import { accounts, poolId } from './constants.js'
-
-export const anvilMainnet = defineAnvil({
- chain: mainnet,
- forkUrl: getEnv('VITE_ANVIL_FORK_URL', 'https://cloudflare-eth.com'),
- forkBlockNumber: 22263623n,
- noMining: true,
- port: 8545,
-})
-
-export const anvilSepolia = defineAnvil({
- chain: sepolia,
- forkUrl: getEnv('VITE_ANVIL_FORK_URL_SEPOLIA', 'https://rpc.sepolia.org'),
- forkBlockNumber: 5858117n,
- noMining: true,
- port: 8845,
-})
-
-export const anvilOptimism = defineAnvil({
- chain: optimism,
- forkUrl: getEnv(
- 'VITE_ANVIL_FORK_URL_OPTIMISM',
- 'https://mainnet.optimism.io',
- ),
- forkBlockNumber: 113624777n,
- port: 8645,
-})
-
-export const anvilZksync = defineAnvil({
- chain: zksync,
- forkUrl: getEnv(
- 'VITE_ANVIL_FORK_URL_ZKSYNC',
- 'https://mainnet.era.zksync.io',
- ),
- forkBlockNumber: 25734n,
- port: 8745,
-})
-
-////////////////////////////////////////////////////////////
-// Utilities
-
-function getEnv(key: string, fallback: string): string {
- if (typeof process.env[key] === 'string') return process.env[key] as string
- // biome-ignore lint/suspicious/noConsole: _
- console.warn(
- `\`process.env.${key}\` not found. Falling back to \`${fallback}\`.`,
- )
- return fallback
-}
-
-type DefineAnvilParameters = Omit<
- Instance.anvil.Parameters,
- 'forkBlockNumber' | 'forkUrl'
-> & {
- chain: chain
- forkBlockNumber: bigint
- forkUrl: string
- port: number
-}
-
-type DefineAnvilReturnType = {
- chain: chain
- clientConfig: ClientConfig
- forkBlockNumber: bigint
- forkUrl: string
- getClient<
- config extends ExactPartial<
- Omit & {
- account?: true | Address | Account | undefined
- chain?: false | undefined
- }
- >,
- >(
- config?: config | undefined,
- ): Client<
- config['transport'] extends Transport ? config['transport'] : Transport,
- config['chain'] extends false ? undefined : chain,
- config['account'] extends Address
- ? ParseAccount
- : config['account'] extends Account
- ? config['account']
- : config['account'] extends true
- ? ParseAccount<(typeof accounts)[0]['address']>
- : undefined,
- undefined,
- { mode: 'anvil' }
- >
- port: number
- rpcUrl: {
- http: string
- ipc: string
- ws: string
- }
- restart(): Promise
- start(): Promise<() => Promise>
-}
-
-function defineAnvil(
- parameters: DefineAnvilParameters,
-): DefineAnvilReturnType {
- const {
- chain: chain_,
- forkUrl,
- forkBlockNumber,
- port,
- ...options
- } = parameters
- const rpcUrl = {
- http: `http://127.0.0.1:${port}/${poolId}`,
- ipc: `/tmp/anvil-${poolId}.ipc`,
- ws: `ws://127.0.0.1:${port}/${poolId}`,
- } as const
-
- const chain = {
- ...chain_,
- name: `${chain_.name} (Local)`,
- rpcUrls: {
- default: {
- http: [rpcUrl.http],
- webSocket: [rpcUrl.ws],
- },
- },
- } as const satisfies Chain
-
- const clientConfig = {
- batch: {
- multicall: process.env.VITE_BATCH_MULTICALL === 'true',
- },
- chain,
- pollingInterval: 100,
- transport(args) {
- const { config, request, value } = (() => {
- if (process.env.VITE_NETWORK_TRANSPORT_MODE === 'webSocket')
- return webSocket(rpcUrl.ws)(args)
- if (process.env.VITE_NETWORK_TRANSPORT_MODE === 'ipc')
- return ipc(rpcUrl.ipc)(args)
- return http(rpcUrl.http)(args)
- })()
-
- return {
- config,
- async request({ method, params }: any, opts: any = {}) {
- if (method === 'eth_requestAccounts') {
- return [accounts[0].address] as any
- }
- if (method === 'personal_sign') {
- method = 'eth_sign'
- params = [params[1], params[0]]
- }
- if (method === 'wallet_watchAsset') {
- if (params.type === 'ERC721') {
- throw new ProviderRpcError(
- -32602,
- 'Token type ERC721 not supported.',
- )
- }
- return true
- }
- if (method === 'wallet_addEthereumChain') return null
- if (method === 'wallet_switchEthereumChain') {
- if (params[0].chainId === '0xfa') {
- throw new ProviderRpcError(-4902, 'Unrecognized chain.')
- }
- return null
- }
- if (
- method === 'wallet_getPermissions' ||
- method === 'wallet_requestPermissions'
- )
- return [
- {
- invoker: 'https://example.com',
- parentCapability: 'eth_accounts',
- caveats: [
- {
- type: 'filterResponse',
- value: ['0x0c54fccd2e384b4bb6f2e405bf5cbc15a017aafb'],
- },
- ],
- },
- ]
- if (method === 'wallet_sendTransaction') {
- method = 'eth_sendTransaction'
- }
- if (method === 'wallet_connect') {
- const capabilities = params[0].capabilities
- ? {
- ...(params[0].capabilities?.signInWithEthereum
- ? {
- signInWithEthereum: {
- message: createSiweMessage({
- ...params[0].capabilities?.signInWithEthereum,
- address: accounts[0].address,
- chainId: Number(chain.id),
- domain: 'example.com',
- issuedAt: new Date('2024-01-01T00:00:00.000Z'),
- expirationTime: new Date(
- '2024-01-01T00:00:00.000Z',
- ),
- notBefore: new Date('2024-01-01T00:00:00.000Z'),
- uri: 'https://example.com',
- version: '1',
- }),
- signature:
- '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
- },
- }
- : {}),
- ...(params[0].capabilities?.addSubAccount
- ? {
- subAccounts: [
- {
- address: accounts[1].address,
- },
- ],
- }
- : {}),
- }
- : {}
- return {
- accounts: [
- {
- address: accounts[0].address,
- capabilities,
- },
- ],
- } as any
- }
- if (method === 'wallet_disconnect') {
- return null
- }
- if (method === 'wallet_addSubAccount')
- return {
- address: accounts[1].address,
- } as any
-
- return request({ method, params }, opts)
- },
- value,
- }
- },
- } as const satisfies ClientConfig
-
- return {
- chain,
- clientConfig,
- forkBlockNumber,
- forkUrl,
- getClient(config) {
- return (
- createClient({
- ...clientConfig,
- ...config,
- account:
- config?.account === true ? accounts[0].address : config?.account,
- chain: config?.chain === false ? undefined : chain,
- transport: clientConfig.transport,
- }) as any
- ).extend(() => ({ mode: 'anvil' })) as never
- },
- rpcUrl,
- port,
- async restart() {
- await fetch(`${rpcUrl.http}/restart`)
- },
- async start() {
- return await Server.create({
- instance: Instance.anvil({
- chainId: chain.id,
- forkUrl,
- forkBlockNumber,
- hardfork: 'Prague',
- ...options,
- }),
- port,
- }).start()
- },
- } as const
-}
diff --git a/test/src/bench.ts b/test/src/bench.ts
index 7c1a1c2429..ca0d6d33e6 100644
--- a/test/src/bench.ts
+++ b/test/src/bench.ts
@@ -1,4 +1,4 @@
import { JsonRpcProvider } from 'ethers'
-import { anvilMainnet } from './anvil.js'
+import { tevmMainnet } from './tevm.js'
-export const ethersProvider = new JsonRpcProvider(anvilMainnet.rpcUrl.http)
+export const ethersProvider = new JsonRpcProvider(tevmMainnet.forkUrl)
diff --git a/test/src/bundler.ts b/test/src/bundler.ts
index e305df26ab..c5fb54d44c 100644
--- a/test/src/bundler.ts
+++ b/test/src/bundler.ts
@@ -1,4 +1,7 @@
+import type { AddressInfo } from 'node:net'
import { Instance, Server } from 'prool'
+import { createServer } from 'tevm/server'
+import { afterAll, beforeAll } from 'vitest'
import {
type BundlerClient,
type BundlerClientConfig,
@@ -14,13 +17,16 @@ import {
type Transport,
} from '../../src/index.js'
import type { DebugBundlerRpcSchema } from '../../src/types/eip1193.js'
-import { anvilMainnet } from './anvil.js'
import { accounts, poolId } from './constants.js'
+import { tevmMainnet } from './tevm.js'
+
+const poolOffset = Number(process.env.VITEST_POOL_ID ?? 0)
+const tevmPort = 18_545 + poolOffset
export const bundlerMainnet = defineBundler({
chain: mainnet,
- rpcUrl: (key) => `http://localhost:${anvilMainnet.port}/${key}`,
- port: 4337,
+ rpcUrl: () => `http://127.0.0.1:${tevmPort}`,
+ port: 14_337 + poolOffset,
})
////////////////////////////////////////////////////////////
@@ -32,6 +38,31 @@ type DefineBundlerParameters = {
port: number
}
+let stopBundler: (() => Promise) | undefined
+const tevmServer = createServer(tevmMainnet.memoryClient)
+
+beforeAll(async () => {
+ await tevmMainnet.ready()
+ await new Promise((resolve, reject) => {
+ tevmServer.once('error', reject)
+ tevmServer.listen(tevmPort, '127.0.0.1', () => {
+ tevmServer.off('error', reject)
+ resolve()
+ })
+ })
+ const address = tevmServer.address() as AddressInfo
+ if (address.port !== tevmPort)
+ throw new Error(`Tevm HTTP server bound unexpected port ${address.port}.`)
+ stopBundler = await bundlerMainnet.start()
+}, 60_000)
+
+afterAll(async () => {
+ await stopBundler?.()
+ await new Promise((resolve, reject) => {
+ tevmServer.close((error) => (error ? reject(error) : resolve()))
+ })
+})
+
type DefineBundlerReturnType = {
chain: chain
clientConfig: BundlerClientConfig
diff --git a/test/src/http-server.ts b/test/src/http-server.ts
new file mode 100644
index 0000000000..fbc5d4dc60
--- /dev/null
+++ b/test/src/http-server.ts
@@ -0,0 +1,20 @@
+import { createServer, type RequestListener } from 'node:http'
+import type { AddressInfo } from 'node:net'
+
+export function createHttpServer(
+ handler: RequestListener,
+): Promise<{ close: () => Promise; url: string }> {
+ const server = createServer(handler)
+ return new Promise((resolve) => {
+ server.listen(0, '127.0.0.1', () => {
+ const { port } = server.address() as AddressInfo
+ resolve({
+ close: () =>
+ new Promise((resolveClose, reject) => {
+ server.close((error) => (error ? reject(error) : resolveClose()))
+ }),
+ url: `http://127.0.0.1:${port}`,
+ })
+ })
+ })
+}
diff --git a/test/src/tevm-server.ts b/test/src/tevm-server.ts
new file mode 100644
index 0000000000..c54b720872
--- /dev/null
+++ b/test/src/tevm-server.ts
@@ -0,0 +1,28 @@
+import type { AddressInfo } from 'node:net'
+import { createMemoryClient } from 'tevm'
+import { createServer } from 'tevm/server'
+
+export async function createTevmServer() {
+ const memoryClient = createMemoryClient()
+ await memoryClient.tevmReady()
+
+ const server = createServer(memoryClient, {}, { compatibility: true })
+ await new Promise((resolve, reject) => {
+ server.once('error', reject)
+ server.listen(0, '127.0.0.1', () => {
+ server.off('error', reject)
+ resolve()
+ })
+ })
+
+ const address = server.address() as AddressInfo
+ return {
+ memoryClient,
+ server,
+ url: `http://127.0.0.1:${address.port}`,
+ close: () =>
+ new Promise((resolve, reject) => {
+ server.close((error) => (error ? reject(error) : resolve()))
+ }),
+ }
+}
diff --git a/test/src/tevm.ts b/test/src/tevm.ts
new file mode 100644
index 0000000000..138c81a44d
--- /dev/null
+++ b/test/src/tevm.ts
@@ -0,0 +1,244 @@
+import { createMemoryClient, http } from 'tevm'
+import {
+ createCommon,
+ createMockKzg,
+ mainnet as tevmMainnetCommon,
+ optimism as tevmOptimismCommon,
+ sepolia as tevmSepoliaCommon,
+ zksync as tevmZksyncCommon,
+} from 'tevm/common'
+
+import { mainnet, optimism, sepolia, zksync } from '../../src/chains/index.js'
+import { custom } from '../../src/clients/transports/custom.js'
+import {
+ type Account,
+ type Address,
+ type Chain,
+ type Client,
+ type ClientConfig,
+ createClient,
+ type ExactPartial,
+ type ParseAccount,
+ type Transport,
+} from '../../src/index.js'
+import { accounts } from './constants.js'
+
+export const fundedAccounts = accounts
+
+type HarnessParameters = {
+ chain?: chain
+ common?: Parameters[0]
+ fork?: false
+ forkBlockNumber?: bigint
+ forkUrl?: string
+}
+
+type Config = ExactPartial<
+ Omit & {
+ account?: true | Address | Account
+ chain?: false
+ }
+>
+
+type TevmClient = Client<
+ config['transport'] extends Transport ? config['transport'] : Transport,
+ config['chain'] extends false ? undefined : chain,
+ config['account'] extends Address
+ ? ParseAccount
+ : config['account'] extends Account
+ ? config['account']
+ : config['account'] extends true
+ ? ParseAccount<(typeof accounts)[0]['address']>
+ : undefined,
+ undefined,
+ { mode: 'anvil' }
+>
+
+/**
+ * Creates an isolated in-process Tevm node with a Viem transport.
+ *
+ * Vitest creates one module instance per test file. `test/setup.ts` restores
+ * the node's baseline snapshot before every test.
+ */
+export function createTevmTestHarness<
+ const chain extends Chain = typeof mainnet,
+>(parameters: HarnessParameters = {}) {
+ const chain_ = (parameters.chain ?? mainnet) as chain
+ const chain = { ...chain_, name: `${chain_.name} (Tevm)` } as chain
+ const forkBlockNumber = parameters.forkBlockNumber ?? 22_263_621n
+ const forkUrl =
+ parameters.forkUrl ??
+ (parameters.fork === false
+ ? ''
+ : getEnv('VITE_TEVM_FORK_URL', 'https://cloudflare-eth.com'))
+
+ const memoryClient = createMemoryClient({
+ common: createCommon({
+ ...(parameters.common ?? tevmMainnetCommon),
+ customCrypto: { kzg: createMockKzg() },
+ }),
+ ...(parameters.fork === false
+ ? {}
+ : {
+ fork: {
+ blockTag: forkBlockNumber,
+ transport: createTevmForkTransport(forkUrl),
+ },
+ }),
+ miningConfig: { type: 'manual' },
+ } as never)
+
+ const transport = custom({
+ async request({ method, params }) {
+ if (method === 'eth_requestAccounts') return [accounts[0].address]
+ // Tevm and this checkout use distinct Viem releases. EIP-1193 is the
+ // stable boundary, so keep the nominal schema cast inside this adapter.
+ return memoryClient.request({ method, params } as never) as never
+ },
+ })
+ const clientConfig = {
+ batch: { multicall: process.env.VITE_BATCH_MULTICALL === 'true' },
+ chain,
+ pollingInterval: 100,
+ transport,
+ } as const satisfies ClientConfig
+
+ let baselineSnapshot: `0x${string}`
+ const takeSnapshot = () =>
+ memoryClient.request({
+ method: 'evm_snapshot',
+ params: [],
+ } as never) as Promise<`0x${string}`>
+ let readyPromise: Promise | undefined
+ const initialize = () =>
+ (readyPromise ??= memoryClient.tevmReady().then(async () => {
+ for (const account of accounts)
+ await memoryClient.tevmSetAccount({
+ address: account.address,
+ balance: account.balance,
+ })
+ baselineSnapshot = await takeSnapshot()
+ }))
+
+ let used = false
+ const harness = {
+ chain,
+ clientConfig,
+ forkBlockNumber,
+ forkUrl,
+ isUsed() {
+ return used
+ },
+ memoryClient,
+ node: memoryClient.transport.tevm,
+ getClient(config?: config) {
+ return Object.assign(
+ createClient({
+ ...clientConfig,
+ ...config,
+ account:
+ config?.account === true ? accounts[0].address : config?.account,
+ chain: config?.chain === false ? undefined : chain,
+ transport,
+ }),
+ // "anvil" is Viem's test-action RPC dialect. Tevm implements those
+ // method spellings; this property does not represent an Anvil node.
+ { mode: 'anvil' as const },
+ ) as TevmClient
+ },
+ async ready() {
+ await initialize()
+ },
+ async reset() {
+ await initialize()
+ const reverted = await memoryClient.request({
+ method: 'evm_revert',
+ params: [baselineSnapshot],
+ } as never)
+ if (!reverted)
+ throw new Error(`Failed to revert Tevm snapshot ${baselineSnapshot}.`)
+ baselineSnapshot = await takeSnapshot()
+ },
+ async deployContract(
+ parameters: Parameters[0],
+ ) {
+ await initialize()
+ return memoryClient.tevmDeploy(parameters)
+ },
+ }
+ return new Proxy(harness, {
+ get(target, property, receiver) {
+ if (property !== 'isUsed') used = true
+ return Reflect.get(target, property, receiver)
+ },
+ })
+}
+
+export type TevmTestHarness = ReturnType
+
+export const tevmMainnet = createTevmTestHarness(
+ process.env.VITE_TEVM_NO_FORK === 'true' ? { fork: false } : {},
+)
+
+export const tevmSepolia = lazy(() =>
+ createTevmTestHarness({
+ chain: sepolia,
+ common: tevmSepoliaCommon,
+ forkBlockNumber: 5_858_117n,
+ forkUrl: getEnv('VITE_TEVM_FORK_URL_SEPOLIA', 'https://rpc.sepolia.org'),
+ }),
+)
+
+export const tevmOptimism = lazy(() =>
+ createTevmTestHarness({
+ chain: optimism,
+ common: tevmOptimismCommon,
+ forkBlockNumber: 113_624_777n,
+ forkUrl: getEnv(
+ 'VITE_TEVM_FORK_URL_OPTIMISM',
+ 'https://mainnet.optimism.io',
+ ),
+ }),
+)
+
+export const tevmZksync = lazy(() =>
+ createTevmTestHarness({
+ chain: zksync,
+ common: tevmZksyncCommon,
+ forkBlockNumber: 25_734n,
+ forkUrl: getEnv(
+ 'VITE_TEVM_FORK_URL_ZKSYNC',
+ 'https://mainnet.era.zksync.io',
+ ),
+ }),
+)
+
+function lazy(create: () => harness): harness {
+ let harness: harness | undefined
+ return new Proxy({} as harness, {
+ get(_target, property, receiver) {
+ harness ??= create()
+ return Reflect.get(harness, property, receiver)
+ },
+ })
+}
+
+export function createTevmForkTransport(
+ url: string,
+ onRequest?: (request: { method: string; params?: unknown }) => void,
+) {
+ const upstream = http(url)({})
+ const request = (async (request: { method: string; params?: unknown }) => {
+ onRequest?.(request)
+ return upstream.request(request as never)
+ }) as typeof upstream.request
+ return { ...upstream, request }
+}
+
+function getEnv(key: string, fallback: string) {
+ const value = process.env[key]
+ if (value) return value
+ // biome-ignore lint/suspicious/noConsole: fixture fallback is intentional
+ console.warn(`\`process.env.${key}\` not found. Using \`${fallback}\`.`)
+ return fallback
+}
diff --git a/test/src/utils.ts b/test/src/utils.ts
index d68585fc5e..9939732060 100644
--- a/test/src/utils.ts
+++ b/test/src/utils.ts
@@ -1,7 +1,5 @@
/* c8 ignore start */
-import { createServer, type RequestListener } from 'node:http'
-import type { AddressInfo } from 'node:net'
import {
EnsAvatarTokenUri,
ERC20InvalidTransferEvent,
@@ -44,14 +42,17 @@ import {
ensRegistryConfig,
ensReverseRegistrarConfig,
} from './abis.js'
-import { anvilMainnet } from './anvil.js'
import { accounts, address } from './constants.js'
+import { createHttpServer as createHttpServer_ } from './http-server.js'
+import { tevmMainnet } from './tevm.js'
-const client = anvilMainnet.getClient({ account: true })
+export const createHttpServer = createHttpServer_
+
+const client = tevmMainnet.getClient({ account: true })
export const mainnetClient = createClient({
chain: mainnet,
- transport: http(anvilMainnet.forkUrl),
+ transport: http(tevmMainnet.forkUrl),
}).extend(publicActions)
export const holeskyClient = createClient({
@@ -59,24 +60,6 @@ export const holeskyClient = createClient({
transport: http(),
}).extend(publicActions)
-export function createHttpServer(
- handler: RequestListener,
-): Promise<{ close: () => Promise; url: string }> {
- const server = createServer(handler)
-
- const closeAsync = () =>
- new Promise((resolve, reject) =>
- server.close((err) => (err ? reject(err) : resolve(undefined))),
- )
-
- return new Promise((resolve) => {
- server.listen(() => {
- const { port } = server.address() as AddressInfo
- resolve({ close: closeAsync, url: `http://localhost:${port}` })
- })
- })
-}
-
export async function deploy(
client: TestClient<
TestClientMode,
diff --git a/test/tsconfig.json b/test/tsconfig.json
index f178b23743..6ce7b7f7a7 100644
--- a/test/tsconfig.json
+++ b/test/tsconfig.json
@@ -5,7 +5,7 @@
"compilerOptions": {
"composite": true,
"noEmit": true,
- "types": ["@types/bun"],
+ "types": ["@types/bun", "@tevm/test-matchers"],
"baseUrl": ".",
"paths": {
"~contracts/*": ["../contracts/*"],
diff --git a/test/vitest.config.ts b/test/vitest.config.ts
index 89b188664f..5edd388e1f 100644
--- a/test/vitest.config.ts
+++ b/test/vitest.config.ts
@@ -1,6 +1,13 @@
import { join } from 'node:path'
import { defineConfig, type TestProjectConfiguration } from 'vitest/config'
+const anvilTransportTests = [
+ 'src/clients/transports/ipc.test.ts',
+ 'src/clients/transports/webSocket.test.ts',
+ 'src/utils/rpc/ipc.test.ts',
+ 'src/utils/rpc/webSocket.test.ts',
+]
+
export default defineConfig({
test: {
alias: [
@@ -53,15 +60,34 @@ export default defineConfig({
? '**/utils/encoding/toRlp.test.ts'
: '',
'src/tempo/**',
+ ...anvilTransportTests,
],
include: ['src/**/*.test.ts'],
setupFiles: [join(__dirname, './setup.ts')],
- globalSetup: [join(__dirname, './setup.global.ts')],
hookTimeout: 60_000,
testTimeout: 60_000,
sequence: { groupOrder: 0 },
},
},
+ ...((process.env.TEST_ANVIL_TRANSPORTS === 'true'
+ ? [
+ {
+ extends: true,
+ test: {
+ name: 'anvil-transports',
+ include: anvilTransportTests,
+ setupFiles: [join(__dirname, './setup.ts')],
+ globalSetup: [
+ join(__dirname, './setup.anvil-transports.global.ts'),
+ ],
+ fileParallelism: false,
+ hookTimeout: 60_000,
+ testTimeout: 60_000,
+ sequence: { groupOrder: 1 },
+ },
+ },
+ ]
+ : []) satisfies TestProjectConfiguration[]),
{
extends: true,
test: {
@@ -69,7 +95,7 @@ export default defineConfig({
include: ['src/tempo/**/*.test.ts'],
setupFiles: [join(__dirname, './src/tempo/setup.ts')],
globalSetup: [join(__dirname, './src/tempo/setup.global.ts')],
- sequence: { groupOrder: 1 },
+ sequence: { groupOrder: 2 },
testTimeout: 10_000,
},
},