Osaka Mainnet Testing
As part of the hard-fork verification process, the STEEL Team executes a subset of consensus tests from ethereum/execution-specs directly on Ethereum mainnet - we're happy to report that all the tests selected for the Osaka hard fork passed!
In this post you can find details about which tests were executed and the corresponding transaction hashes. The corresponding semi-manual testing effort for Prague can be found in this report.

Summary¶
- Test transactions were sent to mainnet for each EIP using EELS's
executesubcommands. - All tests passed successfully with approximately ~0.0001 ETH gas used.
- The tests focused on ModExp changes, the transaction gas limit cap, CLZ opcode, and P256Verify.
Schedule¶
- Fork Epoch: 411392 (
Dec-03-2025 09:49:11 PM UTC). - Fork Expected Finalization Epoch: 411394 (
Dec-03-2025 10:01:59 PM UTC). - Testing commenced at the fork finalization epoch after the chain finalized successfully.
Test Specification¶
- Tests were run via
execute remotefrom ethereum/execution-specs@2b7dc12.
Included EIPs¶
- EIP-7823: Set upper bounds for MODEXP.
- EIP-7825: Transaction Gas Limit Cap.
- EIP-7883: ModExp Gas Cost Increase.
- EIP-7910: eth_config JSON-RPC Method.
- EIP-7939: Count leading zeros (CLZ) opcode.
- EIP-7951: Precompile for secp256r1 Curve Support.
Excluded EIPs¶
The following EIPs were not testable via EL transactions:
- EIP-7594: PeerDAS (Networking related, not testable via EL transactions).
- EIP-7642: eth/69 (Networking related, not testable via EL transactions).
- EIP-7892: Blob Parameter Only ('BPO') Hardforks (Requires many blob transactions included in the same block, not easily achievable via
executecommand). - EIP-7917: Deterministic proposer lookahead (CL only change).
- EIP-7918: Blob base fee bounded by execution cost (Environment dependent, not testable via
executecommand). - EIP-7934: RLP Execution Block Size Limit (Environment dependent, not testable via
executecommand). - EIP-7935: Set default gas limit to 60M (Environment dependent, not testable via
executecommand).
EIP-7823 (ModEXP Upper Bound)¶
Description¶
- Executed the pre-compile at the exact boundary and above the boundary.
Command¶
uv run execute remote --fork=Osaka -m mainnet \
tests/osaka/eip7823_modexp_upper_bounds/test_eip_mainnet.py \
--rpc-seed-key $MAINNET_RPC_SEED_KEY \
--rpc-endpoint $MAINNET_RPC_ENDPOINT \
--chain-id $MAINNET_CHAIN_ID
Transaction Hashes¶
| Test ID | Transaction Hash |
|---|---|
test_modexp_boundary[fork_Osaka-state_test-base-boundary-1024-bytes] |
0x5be8356a... |
test_modexp_over_boundary[fork_Osaka-state_test-base-over-boundary-1025-bytes] |
0x1eaf26a2... |
Outcome¶
PASS - 2/2 tests passed.
EIP-7825 (Transaction Gas Limit Cap)¶
Description¶
- Sent a transaction with the gas limit cap and above.
Command¶
uv run execute remote --fork=Osaka -m mainnet \
tests/osaka/eip7825_transaction_gas_limit_cap/test_eip_mainnet.py \
--rpc-seed-key $MAINNET_RPC_SEED_KEY \
--rpc-endpoint $MAINNET_RPC_ENDPOINT \
--chain-id $MAINNET_CHAIN_ID
Transaction Hashes¶
| Test ID | Transaction Hash |
|---|---|
test_tx_gas_limit_cap_at_maximum[fork_Osaka-state_test] |
0x95275083... |
test_tx_gas_limit_cap_exceeded[fork_Osaka-state_test] (funding) |
0xc5ac1131... |
test_tx_gas_limit_cap_exceeded[fork_Osaka-state_test] (refund) |
0x46d32a99... |
Note: test_tx_gas_limit_cap_exceeded had no direct test transaction as expected (tx was rejected).
Outcome¶
PASS - 2/2 tests passed.
EIP-7883 (ModEXP Gas Repricing)¶
Description¶
- Triggered the gas cost changes in the ModExp precompile with five test cases.
Command¶
uv run execute remote --fork=Osaka -m mainnet \
tests/osaka/eip7883_modexp_gas_increase/test_eip_mainnet.py \
--rpc-seed-key $MAINNET_RPC_SEED_KEY \
--rpc-endpoint $MAINNET_RPC_ENDPOINT \
--chain-id $MAINNET_CHAIN_ID
Transaction Hashes¶
| Test ID | Transaction Hash |
|---|---|
test_modexp_different_base_lengths[fork_Osaka-state_test-32-bytes-long-base] |
0x26d0f8b5... |
test_modexp_different_base_lengths[fork_Osaka-state_test-33-bytes-long-base] |
0x71470510... |
test_modexp_different_base_lengths[fork_Osaka-state_test-1024-bytes-long-exp] |
0xca67e591... |
test_modexp_different_base_lengths[fork_Osaka-state_test-nagydani-1-pow0x10001] |
0x10d904c6... |
test_modexp_different_base_lengths[fork_Osaka-state_test-zero-exponent-64bytes] |
0xf2ae6f73... |
Outcome¶
PASS - 5/5 tests passed.
EIP-7910 (eth_config JSON-RPC Method)¶
Description¶
- Ran
execute eth-configafter the fork to validate remaining BPO forks.
Command¶
Transaction Hashes¶
This was a regular call to a node's JSON RPC to request information; it did not require sending a transaction.
Outcome¶
PASS - 6/6 tests passed against 5 mainnet RPC endpoints (Geth, Reth, Nethermind, Erigon, and Besu). All returned consistent results confirming correct
eth_config implementation.
EIP-7939 (CLZ)¶
Description¶
- Executed the CLZ opcode with different inputs.
Command¶
uv run execute remote --fork=Osaka -m mainnet \
tests/osaka/eip7939_count_leading_zeros/test_eip_mainnet.py \
--rpc-seed-key $MAINNET_RPC_SEED_KEY \
--rpc-endpoint $MAINNET_RPC_ENDPOINT \
--chain-id $MAINNET_CHAIN_ID
Transaction Hashes¶
| Test ID | Transaction Hash |
|---|---|
test_clz_mainnet[fork_Osaka-state_test-clz-8-leading-zeros] |
0x9ec7c2d9... |
test_clz_mainnet[fork_Osaka-state_test-clz-all-zeros] |
0x7f9ea62c... |
Outcome¶
PASS - 2/2 tests passed.
EIP-7951 (P256Verify)¶
Description¶
- Executed the precompile with different inputs, including a negative test that used a signature valid only on secp256k1.
Command¶
uv run execute remote --fork=Osaka -m mainnet \
tests/osaka/eip7951_p256verify_precompiles/test_eip_mainnet.py \
--rpc-seed-key $MAINNET_RPC_SEED_KEY \
--rpc-endpoint $MAINNET_RPC_ENDPOINT \
--chain-id $MAINNET_CHAIN_ID
Transaction Hashes¶
| Test ID | Transaction Hash |
|---|---|
test_valid[fork_Osaka-state_test--valid_r1_sig-] |
0x6911ce58... |
test_invalid[fork_Osaka-state_test--invalid_r1_sig_but_valid_k1_sig-] |
0x63e3c33f... |
Outcome¶
PASS - 2/2 tests passed.