Skip to content

Instantly share code, notes, and snippets.

@jsign
Last active September 23, 2025 16:49
Show Gist options
  • Select an option

  • Save jsign/4b6ee4b3d4f44f22dde732126134cf7d to your computer and use it in GitHub Desktop.

Select an option

Save jsign/4b6ee4b3d4f44f22dde732126134cf7d to your computer and use it in GitHub Desktop.

Steps to reproduce EmulationNoCompleted error in ZisK.

Context

The workload repo allows running benchmarks not only in mainnet blocks, but in EEST benchmarks cases that we worked on some time ago to create the worst possible scenarios for different gas limits for different opcodes/precompiles/protocol-weaknesses.

The way we created this is to create worst-case blocks under different gas limits to:

  • For 45M gas limit, know which are today’s worst cases.
  • For lower gas limits (e.g., 10M) to have downsized attacks that we can benchmark faster, or might be relevant like for tx gas capping.
  • Higher gas limits than 45M to project how mainnet bumping the gas limit can affect provers.

Today, I was starting to explore all this for different zkVMs and started with ZisK and 10M gas limit worst case blocks.

Reproduce

To reproduce the ones that EmulationNoCompleted:

# Clone the workload repo specific branch -- I already baked the cases that fail to simplify a bit.
$ git clone --branch zisk-eest-10M-emulation-no-completed-cases https://github.com/eth-applied-research-group/zkevm-benchmark-workload

# Only execute the cases (no proving)
$ RUST_LOG=info cargo run --release -p ere-hosts -- --zkvms zisk stateless-validator --execution-client reth

Notes:

  • During the last command you should see many Error during emulation: EmulationNoCompleted. All the cases have the same failure.
  • Cases run in parallel by default. You can use RAYON_NUM_THREADS=X if you want to limit for any reason.
  • This will run in Docker since it is the way we're using today to have easily reproducible runs with multiple zkVMs without having to deal with too many features since many SDKs have incompatible dependencies to put in the same crate. The emulation problem is independent from Docker, but if you think it helps to dig further I can also create a separate branch to use ZisK without docker as a temporary branch.

Bonus

If you’re curious and want to run all 10M EEST cases:

# 1. Clone default branch
$ git clone https://github.com/eth-applied-research-group/zkevm-benchmark-workload

# 2. Generate all 10M benchmark cases for Prague.
$ RUST_LOG=info cargo run --release -p witness-generator-cli -- tests --include 10M- --include Prague

# 3. Run as usual
$ RUST_LOG=info cargo run --release -p ere-hosts -- --zkvms zisk stateless-validator --execution-client reth

Note:

  • In step 2. you can change the --include flag to switch from the 10M case to other gas limits available: 1M, 10M (the one tested here), 30M, 45M, 60M, 100M, 150M — rest of steps are the same.
  • There’s a reasonable chance that for gas limits higher than 10M, more EEST cases have the EmulationNoCompleted program.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment