Skip to content

Lean mirrors of the Ethereum execution specifications

Everything we state about a contract rests on a precise meaning for the machine it runs on. Ours is a set of Lean 4 mirrors of Ethereum's Python execution specifications, written function for function from a pinned commit. Each mirror records the hash of every Python file it follows, and a mechanical check lists every place the Lean departs from the Python.

A mirror is validated by that correspondence check and by the official tests. The mirrors themselves contain no theorems and no axioms.

Status by fork(as of 15 November 2026)

ForkTestsState testsBlockchain testsLast run
Amsterdamofficial release tests@v21.0.216,908 pass, 0 fail26,349 pass, 0 fail2–6 Nov 2026
Osakaofficial release tests@v21.0.214,665 pass, 0 fail17,441 pass, 0 fail6 Nov 2026
Pragueofficial release tests@v21.0.213,919 pass, 0 fail16,538 pass, 0 fail6 Nov 2026
Cancunlegacy state tests3,764 pass, 0 fail, 24 not run for named reasons, of 3,788not in the gate4 Nov 2026

Across Prague, Osaka and Amsterdam: 45,492 state entries and 60,328 blockchain tests, with no failures.

Read these numbers with care

The specification language itself

The execution specifications are written in a subset of Python. We also have a Lean semantics of that subset. With it we execute all 148 Cancun opcode handlers from the specification's own source and prove what each one computes. The call and create family still rests on named hypotheses.

Why a second implementation is useful

An independently written implementation cannot decide what is correct. It can find disagreements. If you maintain a specification, a client or a prover and would find disagreement reports useful, write to us.

sam@veric.dev

Back to home