Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
42e5753
split execution into epochs
nicole-graus Jun 5, 2026
af01024
Add an initial-memory image
nicole-graus Jun 5, 2026
83c4a45
build a single epoch's traces
nicole-graus Jun 5, 2026
e6f93b4
Add an is_final flag for halt
nicole-graus Jun 5, 2026
5b3fb3b
Make the HALT table optional
nicole-graus Jun 5, 2026
9125571
Add a register_init parameter to VmAirs::new for the REGISTER preproc…
nicole-graus Jun 5, 2026
e298a7b
reject a non-final epoch that contains the program-terminating instru…
nicole-graus Jun 8, 2026
9884ac4
Add local-to-global boundary and process epochs to emit the boundary set
nicole-graus Jun 8, 2026
cc9499c
Add local-to-global air table
nicole-graus Jun 8, 2026
8048eb4
Add cross-epoch local-to-global memory linkage
nicole-graus Jun 8, 2026
49b1112
Add memory_bus_interactions to emit epoch init/fini tokens
nicole-graus Jun 9, 2026
ba58258
Wire the local-to-global table as the epoch-local Memory-bus bookend
nicole-graus Jun 9, 2026
aa5a023
Add prove_and_verify_continuation
nicole-graus Jun 9, 2026
14b2450
stream epochs one at a time and drop traces after proving
nicole-graus Jun 10, 2026
f007bdc
add bench_continuation
nicole-graus Jun 10, 2026
d0fa022
Add multi-pass array asm program (1 MiB footprint, ~20M steps) as a w…
nicole-graus Jun 10, 2026
45b8205
Add a count mode to bench_continuation that reports a program's cycle…
nicole-graus Jun 10, 2026
bd63d56
Merge remote-tracking branch 'origin/main' into continuations-local-t…
nicole-graus Jun 11, 2026
d5e7aa5
l2g val to a single byte column
nicole-graus Jun 11, 2026
677c537
Merge remote-tracking branch 'origin/main' into continuations-local-t…
nicole-graus Jun 11, 2026
e498057
Thread private inputs so we can bench ethrex program
nicole-graus Jun 11, 2026
7ee7ff2
Use the static preprocessed bitwise commitment
nicole-graus Jun 11, 2026
0423466
Avoid redundant per-epoch work (skip page and carry the memory)
nicole-graus Jun 11, 2026
360c88f
add global_memory for init-elf binding
nicole-graus Jun 12, 2026
ddfd5b8
add clasification into stack vs data/heap in bench_continuation
nicole-graus Jun 12, 2026
6a318b9
store memory in dense per-page arrays instead of per-cell HashMaps
nicole-graus Jun 16, 2026
301cc99
update doc
nicole-graus Jun 17, 2026
3ca8d22
Range-check the local-to-global continuation table columns
nicole-graus Jun 17, 2026
9740f48
slim range-check since memw already does it
nicole-graus Jun 18, 2026
ddd6c01
make fini_epoch constant, add MU selector for padding rows, add epoch…
nicole-graus Jun 18, 2026
7a86d5e
Gate the local-to-global MU selector on the GlobalMemory bus only and…
nicole-graus Jun 18, 2026
6e7aaa7
Revert the local-to-global MU wiring to Design X (MU gates every L2G …
nicole-graus Jun 19, 2026
c34cebe
Bind cross-epoch register
nicole-graus Jun 22, 2026
c903f4e
Bind continuation epoch and global proofs to their statement in Fiat-…
nicole-graus Jun 22, 2026
3ff5516
update md
nicole-graus Jun 22, 2026
5ac0d91
carry the x254 commit index across epochs
nicole-graus Jun 23, 2026
c130939
Merge origin/main into continuations-local-to-global.
nicole-graus Jun 23, 2026
28ea2fa
Force continuation epoch size to a power of two
nicole-graus Jun 24, 2026
ff11f07
Use a power-of-two epoch size in tests
nicole-graus Jun 24, 2026
d6ecb84
Add a test with a non-power-of-two epoch size
nicole-graus Jun 24, 2026
c112739
Split the integrated continuation prove+verify
nicole-graus Jun 24, 2026
6f49b67
CLI continuation flag
nicole-graus Jun 24, 2026
d7c4357
Merge branch 'main' into continuations-local-to-global
nicole-graus Jun 24, 2026
9a7afca
Merge branch 'main' into continuations-local-to-global
MauroToscano Jun 24, 2026
b93ee93
Remove dead-code allow and update doc
nicole-graus Jun 25, 2026
6a3789d
Thread ProofOptions through prove_continuation/verify_continuation
nicole-graus Jun 25, 2026
b48b6c8
Seed the per-epoch touched-cell prediction from the carried register …
nicole-graus Jun 25, 2026
e846c00
Validate each epoch's reg_fini length
nicole-graus Jun 25, 2026
550cbdd
Assert test_commit_across_epochs_verifies actually produces more than…
nicole-graus Jun 25, 2026
1d08374
Continuations cleanup: docs, comments, and regression tests (#714)
MauroToscano Jun 25, 2026
1cae184
Use log2 epoch size for continuation CLI (#717)
MauroToscano Jun 25, 2026
4beaca8
Delete init_ts column and drop ts from GlobalMemory bus
nicole-graus Jun 26, 2026
52d1070
Replace the always-zero global_memory init_epoch column with a verifi…
nicole-graus Jun 26, 2026
c17108e
Represent init state with dense representation instead of intermediat…
nicole-graus Jun 26, 2026
8526af7
Merge remote-tracking branch 'origin/main' into continuations-local-t…
nicole-graus Jun 26, 2026
abaedc6
Avoid duplicate L2G trace work in continuations (#719)
MauroToscano Jun 26, 2026
84798b8
Reuse genesis page data for continuation global proof (#720)
MauroToscano Jun 26, 2026
bace1a3
Merge branch 'main' into continuations-local-to-global
MauroToscano Jun 26, 2026
6c0616b
Polish continuation verification and CLI (#728)
MauroToscano Jun 26, 2026
e252322
Make continuation API take epoch size log2 (#730)
MauroToscano Jun 26, 2026
ee19328
Return continuation invariant errors instead of panicking (#731)
MauroToscano Jun 26, 2026
1410059
Merge branch 'main' into continuations-local-to-global
MauroToscano Jun 26, 2026
9c3cb93
Simplify continuation L2G trace construction (#732)
MauroToscano Jun 26, 2026
5529dbd
Clean up continuation AIR setup (#733)
MauroToscano Jun 26, 2026
2a38a69
Reject continuations exceeding the IsB20 cross-epoch ordering range (…
MauroToscano Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 27 additions & 2 deletions .github/workflows/pr_main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -102,28 +102,53 @@ jobs:
cargo test --release -p executor test_ethrex -- --ignored
cargo test --release -p executor test_ckzg -- --ignored
test-cli:
name: CLI tests
runs-on: ubuntu-latest
if: github.event_name != 'push' || github.actor != 'github-merge-queue[bot]'
steps:
- name: Checkout sources
uses: actions/checkout@v4

- name: Setup Rust Environment
uses: ./.github/actions/setup-rust

- name: Cache cargo build artifacts
uses: Swatinem/rust-cache@v2
with:
shared-key: "lambda-vm-cli-test"
cache-all-crates: "true"

- name: Run CLI tests
run: cargo test -p cli

# "Test" is a required check — keep this name to avoid branch protection changes.
# This gate job passes only when executor tests AND all prover shards succeed.
# This gate job passes only when CLI, executor, disk-spill, and prover tests succeed.
test:
name: Test
if: always()
needs: [test-executor, test-prover, test-disk-spill]
needs: [test-executor, test-cli, test-prover, test-disk-spill]
runs-on: ubuntu-latest
steps:
- name: Check results
run: |
executor="${{ needs.test-executor.result }}"
cli="${{ needs.test-cli.result }}"
prover="${{ needs.test-prover.result }}"
disk_spill="${{ needs.test-disk-spill.result }}"
echo "test-executor: $executor"
echo "test-cli: $cli"
echo "test-prover: $prover"
echo "test-disk-spill: $disk_spill"
# Allow "success" or "skipped" (skipped on merge queue pushes)
if [[ "$executor" != "success" && "$executor" != "skipped" ]]; then
exit 1
fi
if [[ "$cli" != "success" && "$cli" != "skipped" ]]; then
exit 1
fi
if [[ "$prover" != "success" && "$prover" != "skipped" ]]; then
exit 1
fi
Expand Down
29 changes: 26 additions & 3 deletions bin/cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,10 @@ cargo run -p cli --release -- prove <PROGRAM.elf> -o proof.bin [flags]
| `--private-input <FILE>` | Pass private input bytes to the guest. |
| `--blowup <N>` | FRI blowup factor (power of 2). Higher = fewer queries, smaller proof, slower proving. [default: 2] |
| `--time` | Print total proving time. |
| `--cycles` | Run one extra pre-pass outside the timer and print the dynamic instruction count. |
| `--elements` | Build traces and print main-trace and aux-trace field element counts. |
| `--cycles` | Run one extra execution outside the timer and print the dynamic instruction count. Also supported with `--continuations`. |
| `--elements` | Build traces and print main-trace and aux-trace field element counts. Monolithic proving only; conflicts with `--continuations`. |
| `--continuations` | Prove as a continuation bundle split into fixed-size epochs. |
| `--epoch-size-log2 <N>` | Continuation epoch size as `2^N` cycles. Requires `--continuations`. Defaults to `20`; values below `18` are rejected. |

### Verify

Expand All @@ -72,8 +74,10 @@ cargo run -p cli --release -- verify <PROOF> <PROGRAM.elf> [flags]
|---|---|
| `--blowup <N>` | FRI blowup factor used during proving. Must match. [default: 2] |
| `--time` | Print verification time. |
| `--continuations` | Verify a continuation proof bundle produced by `prove --continuations`. |

Returns exit code `0` on successful verification, `1` on failure.
Returns exit code `0` on successful verification, `1` on failure. `--blowup` must
match the value used during proving.

### Count Elements

Expand All @@ -96,10 +100,29 @@ cargo run -p cli --release -- execute executor/program_artifacts/asm/add.elf
cargo run -p cli --release -- prove executor/program_artifacts/asm/add.elf -o /tmp/proof.bin
cargo run -p cli --release -- verify /tmp/proof.bin executor/program_artifacts/asm/add.elf

# Generate and verify a continuation proof
cargo run -p cli --release -- prove program.elf -o /tmp/cont.bin --continuations --epoch-size-log2 20
cargo run -p cli --release -- verify /tmp/cont.bin program.elf --continuations

# Generate a continuation proof and print total dynamic instruction count
cargo run -p cli --release -- prove program.elf -o /tmp/cont.bin --continuations --cycles

# Prove with private input and print metrics
cargo run -p cli --release -- prove program.elf -o /tmp/proof.bin --private-input input.bin --time --cycles
```

For continuation proofs, `--epoch-size-log2` is the power in `2^N` cycles. Larger
values reduce epoch count and fixed per-epoch overhead, but increase peak memory.
As rough ethrex 10-transfer distinct-account reference points from a local sweep:
`19` used about 6.9 GB peak heap, `20` about 9.5 GB, `21` about 15.8 GB, and `22`
about 26.8 GB. For a new workload, use the highest value the machine can run
without swapping.

Continuation proof bundles are self-contained for standalone verification. When
`--private-input` is used, the serialized continuation proof includes the raw
private input bytes so the verifier can rebuild the genesis memory commitment.
Do not treat continuation proof files as confidential-input hiding artifacts.

## Guest Program Flamegraphs

Generate flamegraphs showing where the guest RISC-V program spends its execution time (by instruction count).
Expand Down
Loading
Loading