The xOneRS statetest runner has run the state tests of a pinned release of the Ethereum execution spec tests (EEST v5.4.0). It ran 1,645 cases: 1,639 passed and 6 failed. The 6 failures are now confirmed against geth-XDC as XDC rule differences and recorded as documented skips; see the section below. 42,386 entries were skipped because they target forks the runner does not run yet. The run is recorded in conformance/statetest/RUNS.md and came with PR #1017 (merged 2026-11-15).
For what the runner is and how it handles one fixture, see running EVM state tests with xone evm statetest.
What was run?
| Item | Value |
|---|---|
| Release | ethereum/execution-spec-tests tag v5.4.0, asset fixtures_stable.tar.gz |
| Asset size and sha256 | 257,344,946 bytes; 92cf1b47ad12fb27163261fc3c1cea5df72439cab507983d06b56c94f8741909 |
| Command | xone evm statetest <dir>/fixtures/state_tests (a debug build) |
| Run time | 2 min 20 s |
| Files | 2,681 |
The asset was fetched read-only and unpacked in its own directory. Since PR #1017 the runner takes a directory (every *.json under it, listing only failures) and uses the exact signed txbytes of each EEST post entry, so nothing is re-signed. It runs each transaction on the t8n executor path and compares the state root and the logs hash.
What were the results?
| Result | Count |
|---|---|
| Cases run | 1,645 |
| Passed | 1,639 |
| Failed: documented XDC skips, confirmed | 6 |
| Skipped: expect a transaction exception | 8 |
| Skipped: fork the build cannot run yet | 42,386 |
The skipped entries by fork: Berlin 1,249, Istanbul 608, London 1,504, Paris 1,564, Shanghai 1,745, Cancun 16,847, Prague 18,869. They sum to 42,386. The runner counts every skip by reason and never counts a skip as a pass.
What are the 6 failures?
All 6 come from one test, tests/frontier/precompiles/test_precompile_absence.py, for the Byzantium and ConstantinopleFix forks, each with the variants empty_calldata, 31_bytes and 32_bytes. The test checks that addresses above a fork's precompiles hold no precompile.
The xOneRS executor runs the XDC precompile set from the fork table of the pinned geth-XDC, and that set differs from Ethereum's at those forks. RUNS.md therefore says these are expected to be XDC rule differences, but that each address was not yet confirmed against geth-XDC. That check is now done; see the next section.
Are the 6 failures confirmed?
Yes. PR #1020 (merged 2026-11-15) records them in RUNS.md as documented XDC skips, confirmed against the pinned geth-XDC (6fc8e8c2):
- The fixture calls every address from 0x09 to 0xff (249 calls) and requires that none runs a precompile.
- On an XDC chain before
TIPXDCXMinerDisable, geth-XDC uses the Byzantium precompile set plus four XDCx precompiles at 0x1e, 0x28, 0x29 and 0x2a, for Byzantium and every later fork below Istanbul (core/vm/contracts.go:277-280; addresses atcore/vm/contracts_xdc.go:133-136). - xOneRS has the same set (precompiles.rs), and its precompile-set vectors equal geth-XDC at every fork row.
So four of the 249 addresses hold a precompile under XDC rules and none does under Ethereum rules. RUNS.md concludes that xOne follows the XDC rule, that the Ethereum fixture does not apply here, and that geth-XDC under XDC rules would fail the same six cases.
What is not covered yet?
- Forks from Istanbul on: they need an Ethereum-rules mode or
--state.xdc. - Typed transactions (EIP-2930, 1559, 4844, 7702).
- A block-test runner and a nightly differential job.
These are tracked in issue #26 and issue #230. The v0.1.0 release has neither the runner nor the directory mode.
How do other projects describe this?
| Project | What its article states | xOne |
|---|---|---|
| ethrex | EF spec tests and Hive run in CI, as stated in ethrex completes its first external security audit, 2026-06-18 | One pinned EEST v5.4.0 run is recorded, for the forks the runner supports; it is not yet in CI |
XDC changes some Ethereum rules, for example the precompile set, so an Ethereum suite needs a documented XDC skip list before its result reads as pass or fail. The replay gate compares recorded XDC blocks instead.
Frequently asked questions
Did xOne pass the Ethereum execution spec tests?
It passed 1,639 of the 1,645 cases it ran from EEST v5.4.0. The other 6 are confirmed XDC rule differences (the XDCx precompiles), recorded as documented skips. 42,386 entries for later forks were skipped, not passed.
What are the 6 failing cases?
Six variants of test_precompile_absence for Byzantium and ConstantinopleFix. They are confirmed XDC precompile-set differences: geth-XDC has four XDCx precompiles at 0x1e, 0x28, 0x29 and 0x2a at those forks, and xOneRS has the same set.
Why were so many entries skipped?
The runner supports Frontier to ConstantinopleFix. Entries for Berlin, Istanbul, London, Paris, Shanghai, Cancun and Prague need an Ethereum-rules mode or --state.xdc first.
Can I repeat the run?
Yes, with a build from main: download the pinned asset, check its sha256 against the value above, unpack it, and run xone evm statetest <dir>/fixtures/state_tests.
Sources
This article describes the source and evidence at its review date. Check the linked repository for current implementation and qualification status.
Explore the engineering evidenceEdit this page on GitHub opens the Markdown source (content/blog/eest-run-xone/index.md). GitHub may ask you to sign in. Report a correction opens a prefilled GitHub issue for this page.