1
Execute the program on the VM
Run fetch-decode-execute loop
2
Record the execution trace
A table of machine states, one row per cycle
3
Encode each column as a polynomial
Lagrange interpolation over trace domain
4
Express VM rules as polynomial constraints
Equations that must equal zero at every row
5
Prove all constraints hold
Commit, quotient, FRI → succinct STARK proof
6
Verifier checks a handful of spot-checks
Never re-executes the program
Steps 1–4: built in full detail
ZKVM-specific engineering
Steps 5–6: generic STARK infra
Shared across all systems