Steps to reproduce EmulationNoCompleted error in ZisK.
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.
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=Xif 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.
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
--includeflag 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
EmulationNoCompletedprogram.