Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
10b18a6
feat(execute): Deferred EOA funding
marioevz Nov 28, 2025
9d704bc
fix(execute): remove _refresh_sender_nonce calls
marioevz Nov 28, 2025
398a32f
fix(execute): workaround for priority fee
marioevz Nov 28, 2025
4a573f4
feat(execute): Support blob transactions
marioevz Nov 28, 2025
5d413cf
refactor(execute): Re-nonce worker key
marioevz Dec 1, 2025
381bb91
refactor(execute): Fixture renames
marioevz Dec 1, 2025
930d0b2
refactor(execute): unused param
marioevz Dec 1, 2025
ad07efe
refactor(execute): nit
marioevz Dec 1, 2025
13a89bf
refactor(execute): Add a ton of logging
marioevz Dec 1, 2025
62f0627
fix(plugins): Change `execute remote` from loadscope to load
marioevz Dec 1, 2025
00871d5
fix(execute): Try on refund txs
marioevz Dec 1, 2025
28aa1d0
refactor(execute): More logging
marioevz Dec 1, 2025
35d675a
fix(execute): Collect only
marioevz Dec 1, 2025
8fae31a
fix(execute): mypy
marioevz Dec 1, 2025
9f9f390
fix(plugins): Change `execute hive` from loadscope to load
marioevz Dec 1, 2025
e9a86f3
refactor: Rename flag
marioevz Dec 2, 2025
b54ba2f
docs: Add new features
marioevz Dec 2, 2025
6c58088
feat(execute): Use seed directly if not running xdist
marioevz Dec 2, 2025
c20aaff
fix: docs lint
marioevz Dec 2, 2025
10ca826
docs: Changelog
marioevz Dec 2, 2025
683f1d6
Update docs/running_tests/execute/hive.md
marioevz Dec 3, 2025
9b95401
Update docs/running_tests/execute/hive.md
marioevz Dec 3, 2025
b730747
Update docs/running_tests/execute/hive.md
marioevz Dec 3, 2025
d229acc
Apply suggestions from code review
marioevz Dec 3, 2025
8feb20d
Apply suggestions from code review
marioevz Dec 3, 2025
ec2d575
fix: Logging mode
marioevz Dec 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,16 @@ Test fixtures for use by clients are available for each release on the [Github r

- 🐞 Fix a bug with `consume sync` tests where some clients don't have JSON-RPC immediately available after syncing and can't yet serve the synced block ([#1670](https://github.com/ethereum/execution-specs/pull/1670)).

#### `execute`

- ✨ `execute hive` and `execute remote` now defer funding of accounts until the minimum amount required to send the test transactions is calculated, in order to optimize the amount of Eth used to execute the tests ([#1822](https://github.com/ethereum/execution-specs/pull/1822)).
- ✨ Dynamically fetch gas prices from the network and update all transactions to use 1.5x the current values ([#1822](https://github.com/ethereum/execution-specs/pull/1822)).
- ✨ New `--dry-run` flag to calculate the amount of Eth that will be spent executing a test given the current network gas prices ([#1822](https://github.com/ethereum/execution-specs/pull/1822)).
- 🔀 Load balancing mode of `execute` for xdist was updated from `loadscope` to `load` ([#1822](https://github.com/ethereum/execution-specs/pull/1822)).
- 💥 `--eoa-fund-amount-default` has been deprecated since the command now automatically calculates the funding amount ([#1822](https://github.com/ethereum/execution-specs/pull/1822)).
- 💥 `--sender-key-initial-balance` flag of `execute hive` has been renamed to `--seed-key-initial-balance` ([#1822](https://github.com/ethereum/execution-specs/pull/1822)).
- 🔀 Flags --default-gas-price, --default-max-fee-per-gas and --default-max-priority-fee-per-gas now default to None and ideally should be omitted because, when unset, the command now defaults to fetch the value from the network, which is a more reliable behavior ([#1822](https://github.com/ethereum/execution-specs/pull/1822)).

### 📋 Misc

- 🐞 WELDed the EEST tox environments relevant to producing documentation into EELS, and added a tool to cleanly add codespell whitelist entries. ([#1695](https://github.com/ethereum/execution-specs/pull/1659)).
Expand Down
12 changes: 10 additions & 2 deletions docs/running_tests/execute/hive.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,20 @@ Tests can be executed on a local hive-controlled single-client network by runnin

## The `eest/execute-blobs` Simulator

The `blob_transaction_test` execute test spec sends blob transactions to a running client in order to verify its `engine_getBlobsVX` endpoint behavior. These tests can be run using:
The `blob_transaction_test` execute test spec sends blob transactions to a running client. Blob transactions are fully supported in execute mode:

- Blob transactions can be sent via `eth_sendRawTransaction`
- Blob validation via `engine_getBlobsVX` endpoints (when Engine RPC available)
- Automatic gas pricing is used for the blob gas fees

Tests can be run using:

```bash
./hive --client besu --client-file ./configs/osaka.yaml --sim ethereum/eest/execute-blobs
./hive --client besu --client-file ./configs/osaka.yaml --sim ethereum/eels/execute-blobs
```

**Note**: If the Engine RPC is unavailable, blob transactions will be sent and `getBlobsV*` validation is skipped.

See [Hive](../hive/index.md) for help installing and configuring Hive.

## Running `execute` tests with Hive in Dev Mode
Expand Down
10 changes: 9 additions & 1 deletion docs/running_tests/execute/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,12 @@ Reasoning behind the random generation of the sender keys is that one can execut

The `fill` plugin will use a fixed and minimum gas price for all the transactions it uses for testing, but this is not possible with the `execute` plugin, as the gas price is determined by the current state of the network.

At the moment, the `execute` plugin does not query the client for the current gas price, but instead uses a fixed increment to the gas price in order to avoid the transactions to be stuck in the mempool.
The `execute` plugin queries the network for current gas prices and defaults to 1.5x the network price to ensure transaction inclusion. Gas prices can be overridden via command-line flags (`--default-gas-price`, `--default-max-fee-per-gas`, `--default-max-priority-fee-per-gas`).

### Deferred EOA Funding

EOAs are funded after gas prices are determined, enabling accurate balance calculations based on actual network conditions. This ensures sufficient funds are allocated for all test transactions.

### Blob Transaction Support

Blob transactions are fully supported in execute mode, including automatic gas pricing for blob gas fees and validation via `engine_getBlobsVX` endpoints when the Engine RPC is available.
36 changes: 36 additions & 0 deletions docs/running_tests/execute/remote.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,42 @@ One last requirement is that the `--chain-id` flag is set to the chain id of the
uv run execute remote --fork=Prague --rpc-endpoint=https://rpc.endpoint.io --rpc-seed-key 0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f --chain-id 12345
```

## Test Accounts and Contracts

Since `execute remote` does not control the blockchain where it runs the tests, and therefore cannot modify the genesis pre-allocation like `fill` does, all accounts and contracts need to be deployed via transactions sent to the network.

These transactions are created from the seed or worker accounts provided via the command flags.

When the test is executed, all `pre.fund_eoa` and `pre.deploy_contract` calls generate transactions that create the accounts on chain, instead of placing them directly in the `pre` object like `fill` does.

The transactions are collected and only sent after the test function finishes execution. This is done in order to perform optimizations based on the transactions that the test requires to perform its verifications.

One optimization is the deferred calculation of the funding amount for the EOA, which is calculated on the fly depending the test transactions that use the account as sender, and this amount is the minimum balance that the account would need in order for the transactions to be included given the current network gas prices.

### Dry Run Mode

Dry run mode calculates the minimum balance required without executing any transactions on chain:

```bash
uv run execute remote --fork=Prague --rpc-endpoint=https://rpc.endpoint.io --dry-run ./tests/prague/eip7702_set_code_tx/
```

This outputs the minimum balance needed and total gas consumption per test, useful for:

- Estimating gas costs before execution
- Verifying the seed account has sufficient funds
- Planning parallel execution funding requirements

### Limit Gas Used By Tests

A limit of the total gas consumption per test can be specified with the `--max-gas-per-test` flag:

```bash
uv run execute remote --fork=Prague --rpc-endpoint=https://rpc.endpoint.io --max-gas-per-test 30000000 --rpc-seed-key 0x... --chain-id 12345
```

Tests exceeding this limit will fail with an assertion error and will not send any transactions to the chain.

## Engine RPC Endpoint (Optional)

By default, the `execute remote` command assumes that the execution client is connected to a beacon node and the chain progresses automatically. However, you can optionally specify an Engine RPC endpoint to drive the chain manually when new transactions are submitted.
Expand Down
Loading
Loading