---
# System prepended metadata

title: grandine-zkvm-study-250725
tags: [grandine, epf-6]

---

# Grandine zkVM Integration Study (2025-07-25)

Running grandine risc0 test state

1. `pectra-devnet-6 without epoch transition`
   - **RISC0_DEV_MODE=1** (dev mode)
     - cmd: 
       ```
       RISC0_DEV_MODE=1 RUST_LOG=info ./target/release/zkvm_host --test "pectra-devnet-6 without epoch transition" execute
       ```
     - result:
       ```
       INFO risc0_zkvm::host::server::exec::executor: execution time: 233.025777s
       read input:        443847879
       state transition: 3878333922
       write output:         196300
       elapsed:             204.54s
       cycles:           4919394304
       ```
       Take about **3m20s**.

   - **RISC0_DEV_MODE=0** (generating a real proof)
     - cmd:
       ```
       RISC0_DEV_MODE=0 RUST_LOG=info ./target/release/zkvm_host --test "pectra-devnet-6 without epoch transition" execute
       ```
     - result:
       *cancelled after running for more than 4 hours*

2. `pectra-devnet-6 with epoch transition`
   - **RISC0_DEV_MODE=1** (dev mode)
     - cmd: 
       ```
       RISC0_DEV_MODE=1 RUST_LOG=info ./target/release/zkvm_host --test "pectra-devnet-6 wit epoch transition" execute
       ```
     - result:
       ```
       INFO risc0_zkvm::host::server::exec::executor: execution time: 1565.041949055s
       read input:         443289185
       state transition: 35890144311
       write output:          177150
       elapsed:             1565.34s
       cycles:           39242432512
       ```
       
       Take about **26m** to run!

3. `mainnet without epoch transition`
   - **RISC0_DEV_MODE=1** (dev mode)
     - cmd: 
       ```
       RISC0_DEV_MODE=1 RUST_LOG=info ./target/release/zkvm_host --test "mainnet without epoch transition" execute
       ```
     - result:
       *cancelled after running for more than 4 hours*
       
## About SimpleSerialize

- doc & specification: https://www.ssz.dev/
- for serialize and deserialize: https://simpleserialize.com/
- block stf format: https://github.com/ethereum/consensus-specs/blob/master/tests/formats/operations/README.md

This is how you decompress a ssz_snappy file:

```python
import snappy
import sys

with open(sys.argv[1], "rb") as in_stream:
  compressed_data = in_stream.read()

decompressed_data = snappy.decompress(compressed_data)

with open(sys.argv[2], 'wb') as out_stream:
  out_stream.write(decompressed_data)
```

This is the bash script to call the above python wrapper

```sh
#!/bin/bash
set -x

python ~/.local/bin/d-ssz-snappy.py "$@"
```

## Notes

- Running `prove` and `execute` subcommands take about the same time, but just returning different values. For `prove`, returning a tuple including the execution proof, for `execute`, a tuple including the execution stats report.

- I am running the above benchmark locally on a Macbook Air 2020 with M1 chip.