Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
154 commits
Select commit Hold shift + click to select a range
b5345fd
pcs: jagged assist — delegate the verifier's f̂_t evaluation (paper §5)
rothblum Jul 8, 2026
71b8036
pcs: assist optimization — Lemma 4.6 streaming prover (27x)
rothblum Jul 8, 2026
976a143
pcs: assist prover engineering pass (2.2x -> 2.5ms)
rothblum Jul 8, 2026
f872f53
pcs: add runtime_bits30 bench (2^30-bit packed witness, 2^12 columns)
rothblum Jul 8, 2026
7380a84
pcs: jagged prover — kill the q copy and the separate round-1 message…
rothblum Jul 8, 2026
aac8895
chore: restore spartan2 competitor-bench patch files after rebase
rothblum Jul 20, 2026
cff0269
chore: cargo fmt (rustfmt 1.97 stable)
rothblum Jul 21, 2026
fc755f2
docs: add multi-table proving design doc
rothblum Jul 22, 2026
a8fb9a4
docs: adopt the implemented chunked BatchMajor layout; drop the row-b…
rothblum Jul 22, 2026
14b79c6
docs: place ring-switching before the jagged transport
rothblum Jul 22, 2026
de15a85
docs: ring-switch folds obey the declared-work discipline; claim-batc…
rothblum Jul 22, 2026
d36c3e2
docs: uniform capacity; lincheck as one union-column sumcheck; two-cl…
rothblum Jul 22, 2026
eb19607
Merge jagged-assist: jagged kernel + verifier-assist (f̂_t delegation)
rothblum Jul 22, 2026
d42e47c
docs: drop the historical 'One mode' paragraph
rothblum Jul 22, 2026
cd2250b
zerocheck: generalize PaddingSpec to a run-list (single-run byte-iden…
rothblum Jul 22, 2026
0676af3
core: add multi-table registry and slot-schedule types (schedule.rs)
rothblum Jul 22, 2026
0839eaa
docs: spell out the BatchMajor run-list mapping in §5.2
rothblum Jul 22, 2026
93bb006
core: add registry digest (flock-registry-v1)
rothblum Jul 22, 2026
02b2f8c
docs: restructure §7 as three polynomials and two reductions
rothblum Jul 22, 2026
1c7aa2b
pcs: add the jagged opening path (virtual-open sumcheck + transport)
rothblum Jul 22, 2026
499cd44
prover: wire the jagged opening path end to end
rothblum Jul 22, 2026
0c4fff9
prover: add m=30 direct-vs-jagged throughput test
rothblum Jul 22, 2026
203ea2c
docs: identify the virtual-opening sumcheck as ring-switching's own s…
rothblum Jul 23, 2026
7059f44
pcs: fuse the jagged transport into the Ligerito opening
rothblum Jul 23, 2026
693f5da
docs: record the fused transport and the send-and-spot-check reduction
rothblum Jul 23, 2026
3966723
prover: throughput test times witness gen + prove, matching canonical…
rothblum Jul 23, 2026
8faae37
prover: warm the scratch pool with a full untimed prove in the throug…
rothblum Jul 23, 2026
a53dece
core: add the union-instance layer (single-type M1 plumbing)
rothblum Jul 23, 2026
c4ccbeb
prover: union prove entry + M1 byte-identity differential oracle
rothblum Jul 23, 2026
2064d95
core: union-column lincheck (M2) with closed-form comb verification
rothblum Jul 23, 2026
f753433
prover: drive the union entry pair through the union-column lincheck
rothblum Jul 23, 2026
57ffc2c
core: flock-mixed-v1 statement binding on the union entries (M3)
rothblum Jul 23, 2026
95287b6
prover: first end-to-end mixed BLAKE3+SHA-256 proofs (M3 milestone te…
rothblum Jul 23, 2026
b09cd07
core+prover: true dense-stack commit for the union transport (M4)
rothblum Jul 23, 2026
bd913ed
prover: partial-utilization witness generation (M4 dynamic counts)
rothblum Jul 23, 2026
9373e62
prover: wire format v5 with a Mixed flavor + CLI --mix (M4)
rothblum Jul 23, 2026
439abb1
docs: update the multi-table design doc to the implemented Phases 0-2
rothblum Jul 23, 2026
e406c24
core: height-n_t stacking — count-proportional committed size (M5)
rothblum Jul 23, 2026
ad754b6
prover: per-proof PCS params + M5 area gates for height-n_t stacking
rothblum Jul 23, 2026
677d385
docs: height-n_t stacking (M5) — count-proportional committed size
rothblum Jul 23, 2026
f7b4e17
tests: M6 byte-identity fixtures — proof bytes pinned at the pre-M6 p…
rothblum Jul 23, 2026
2be53c3
core: support-proportional zerocheck tail + count-proportional linche…
rothblum Jul 23, 2026
fc4543c
core: support-proportional opening passes — virtual-open f-side, roun…
rothblum Jul 23, 2026
3d60337
tests+docs: M6 low-utilization gate assertion; refresh run-list comments
rothblum Jul 23, 2026
4614230
prover: add m=30-scale mixed throughput measurement
rothblum Jul 23, 2026
1f61e7a
prover: add ntt_layout_probe for zero-lane-skip layout comparison
rothblum Jul 24, 2026
75a81d3
ntt+pcs: integer-lane commit (Piece 1 — encode + Merkle)
rothblum Jul 24, 2026
b5159da
prover: two-blake3-table control benchmark (multitable machinery over…
rothblum Jul 24, 2026
81151aa
prover: per-phase breakdown for single vs two-table blake3
rothblum Jul 24, 2026
dc72394
core+prover: parallel union witness scatter/compaction + scatter-vs-c…
rothblum Jul 24, 2026
c8462a0
core+prover: generate the union witness in place (kill the assembly s…
rothblum Jul 24, 2026
2012181
pcs: integer-lane commit via high-bit lanes (stop committing the zero…
rothblum Jul 24, 2026
66d90e9
pcs: fold L0 lane variables at block granularity (drop the lane-grid …
rothblum Jul 24, 2026
1eec039
prover: integer lanes apply to identity compaction too (fix a false a…
rothblum Jul 24, 2026
bd0f222
zerocheck: share the round-2 SIMD kernels with the run-list padding path
rothblum Jul 24, 2026
4b2db19
jagged: fuse the blocked round-0 prime into the weight-table build
rothblum Jul 24, 2026
0140131
core: take the union witness buffers from the scratch pool, not vec![…
rothblum Jul 24, 2026
09036b5
ligerito+jagged: skip the known-zero lanes in the L0 fold
rothblum Jul 24, 2026
44ff9be
lincheck: use the count-proportional row fold for ANY partial count
rothblum Jul 24, 2026
9b8a63d
tests: pin the factored-basis property for skipping W_rho materializa…
rothblum Jul 25, 2026
d06ff6f
tests: measure the JIT jagged-weight fold — 2.3 ms and 134 MB, any he…
rothblum Jul 25, 2026
23c0811
jagged: JIT factored weight + round-0 claim (step 1 of dropping W_rho)
rothblum Jul 25, 2026
82aca3e
pcs: source L0's basis just-in-time — drop the 134 MB W_rho array
rothblum Jul 25, 2026
6bfad5f
scratch: pool the lincheck stripe (mechanism sound, gain below the no…
rothblum Jul 25, 2026
383c6cd
tests: capacity sweep — fix the workload, grow the capacity
rothblum Jul 27, 2026
f827aa3
pcs: stream the γ-combined basis — b_combined is never materialized
rothblum Jul 27, 2026
cc112b3
docs: v0.5 — integer-lane commit, JIT basis, declared-work passes, st…
rothblum Jul 27, 2026
c8d9f60
ring_switch: record the rejected merged Φ-table scan
rothblum Jul 27, 2026
b3b8c6d
zerocheck: parallelize the sparse tail (dense-kernel structure)
rothblum Jul 27, 2026
0054f88
tests: sweep on the in-place path; serialize the timing tests
rothblum Jul 27, 2026
ad7094d
zerocheck: skip wholly-dead chunks in the sparse round 2
rothblum Jul 27, 2026
68abbb7
zerocheck: engage the sparse tail at quarter utilization (gate 16 -> 4)
rothblum Jul 27, 2026
649877a
tests: capacity sweep at the real m30 load
rothblum Jul 27, 2026
3f51cfb
zerocheck: engage the sparse tail at half utilization (gate 4 -> 2)
rothblum Jul 27, 2026
f8bbe6e
docs: v0.6 — the merged jagged/ring-switch reduction (design sketch)
rothblum Jul 27, 2026
c31b2af
docs: the fat verifier is registry-column-bounded (Ron's catch)
rothblum Jul 27, 2026
674884a
jagged+docs: the Frobenius decomposition resolves the twisted assist
rothblum Jul 27, 2026
c2ae82e
docs: the batched Frobenius assist, in detail
rothblum Jul 27, 2026
b6cfecf
docs: merged reduction — define W's zero tail; scope and wire notes
rothblum Jul 27, 2026
e1fbcd9
pcs+jagged: the merged jagged/ring-switch transport (prototype)
rothblum Jul 27, 2026
1a89b6d
docs: the merged transport is a measured prototype, not a sketch
rothblum Jul 27, 2026
f034fe0
pcs+jagged: merged-transport optimization pass (-18 ms)
rothblum Jul 27, 2026
22201c7
pcs+ligerito: merged transport — integer lanes, fused prime, assist t…
rothblum Jul 27, 2026
9d3337b
docs: capacity-free ring switching as a standalone paper draft
rothblum Jul 27, 2026
2b0f795
docs: tighten the paper to a research note
rothblum Jul 27, 2026
f964909
docs: note — spell out the z_r/z_c positional split in the lemma
rothblum Jul 27, 2026
f22eb16
docs: note — assume Σ h_y = 2^m (padding column), drop the tail cases
rothblum Jul 27, 2026
268b13c
docs: note — make the claim index explicit
rothblum Jul 27, 2026
95167a7
docs: note — single-claim presentation, multi-claim as a closing remark
rothblum Jul 27, 2026
de403d4
docs: note — f_jag's index-point argument is rho, not z_i
rothblum Jul 27, 2026
cacf91f
docs: note — Lemma 1 takes z_r, z_c directly
rothblum Jul 27, 2026
5b6772a
docs: note — rewrite Lemma 1's proof as an explicit equality chain
rothblum Jul 27, 2026
d0095e7
tests: merged transport — tamper the commitment params
rothblum Jul 27, 2026
a6a757f
mixed: ship the merged transport — wire v6
rothblum Jul 28, 2026
4245770
tests: m30 probe — three tiers, both arms on the shipped lane config
rothblum Jul 28, 2026
f0388d0
jagged: quadrant-product challenge fold in the Frobenius assist rounds
rothblum Jul 28, 2026
627df4b
note: the dual form of the Frobenius decomposition (Remark 5)
rothblum Jul 28, 2026
7c2393a
jagged: multipoint twisted evaluation — the column-scalable assist
rothblum Jul 28, 2026
0777c28
jagged: optimize the multipoint prove — 162 -> 95 ms at 32K columns
rothblum Jul 28, 2026
111d164
jagged: strided low tables for the multipoint values — 95 -> 35 ms at…
rothblum Jul 28, 2026
93ce0da
jagged: column-parallel assist dispatch for small statement counts
rothblum Jul 28, 2026
7b21319
jagged: raise the column-parallel gate to 2^14 columns
rothblum Jul 28, 2026
0606fe3
jagged: fused multipoint prover — shared merged-open context
rothblum Jul 28, 2026
afe1c11
prover: phase timers on the merged prove + capacity-attribution probe
rothblum Jul 28, 2026
59dd098
union: padding-aware witness buffer sourcing — nu18 prove 872 -> 265 ms
rothblum Jul 28, 2026
22bca4e
union: PooledDirty witness mode — padding is unread, stop zeroing it
rothblum Jul 28, 2026
912066e
tests: merged capacity probe — five tiers, 1x to 16x over-capacity
rothblum Jul 28, 2026
8a2237a
tests: poison-pool coverage at full utilization
rothblum Jul 28, 2026
4dcd471
scratch: window-preferring pool takes, class-aware eviction, take trace
rothblum Jul 28, 2026
c6393d9
zerocheck: sparse-always (SPARSE_TAIL_GATE 2 -> 1) + gate env knob;
rothblum Jul 28, 2026
b6c8d9a
zerocheck: interval-derived sparse tasks — round 2 stops scanning the…
rothblum Jul 28, 2026
2e63bb5
scratch: union prewarm sized by buffer class, not by the padded m
rothblum Jul 29, 2026
9f74dc7
zerocheck: live-span fold storage — the tail stops scattering over th…
rothblum Jul 29, 2026
3120f5b
permutation: one shared eq(ρ) for the five v-openings, not five dense…
rothblum Jul 29, 2026
81d0552
product_gkr: port the GKR grand product, then fuse its fold with the …
rothblum Jul 29, 2026
ccafc90
product_gkr: s_id is the index, so stop building a table for it
rothblum Jul 29, 2026
2e82e8b
product_gkr: point the fold probe at the kernel that actually runs
rothblum Jul 29, 2026
e8b865e
product_gkr: verifier review — pin the s_σ trust boundary, stop panic…
rothblum Jul 29, 2026
9a4c7bf
Merge main into multitable: selectable Merkle/FS hashes
rothblum Jul 29, 2026
5339bee
element_r1cs: the large-field table type and its two PIOP phases
rothblum Jul 29, 2026
bc6bab0
element_r1cs: wire the phases into a single-table proof, tamper matrix
rothblum Jul 29, 2026
5974bd6
element_r1cs: pin the dummy-row scope boundary instead of implying it
rothblum Jul 29, 2026
f95dfbb
blake3: word-align every I/O region, move the const pin to the end
rothblum Jul 29, 2026
c87a067
element_r1cs: collapse the lincheck's row half, dropping n_log rounds
rothblum Jul 29, 2026
f980da5
schedule: class-tag the table types, keep the boolean digest byte-ide…
rothblum Jul 29, 2026
c3d89f0
union: element slots through the layout, boolean PIOP on its prefix s…
rothblum Jul 29, 2026
dc0a6ca
element_r1cs: the element-region PIOP, one zerocheck and one collapse…
rothblum Jul 29, 2026
21c0901
union: mixed boolean+element proofs through one jagged opening
rothblum Jul 29, 2026
09918ed
union: fix the M_bool = 0 underflow, make both build profiles meaningful
rothblum Jul 29, 2026
c6a00bb
union_element: cost probe for the element class, arms interleaved
rothblum Jul 30, 2026
b289f39
pcs: skip the combine's dead blocks, exploiting the classes' disjoint…
rothblum Jul 30, 2026
c1e7e10
prove_union: PCS_TRACE phase breakdown, and a fair witness path in th…
rothblum Jul 30, 2026
137a5db
element_r1cs: count-proportional row rounds, bit-identical to the den…
rothblum Jul 30, 2026
6eb7b69
docs: circuit-wiring design v0.2 — circuits, large-field gates, recur…
rothblum Jul 30, 2026
eb8bbbb
docs: spell out the copy-constraint mechanism in the wiring section
rothblum Jul 30, 2026
74cf2de
docs: disambiguate "copy constraints" from R1CS constraints
rothblum Jul 30, 2026
2823aa8
docs: the capacity-tax masking puts 1's in the leaf vector, not the t…
rothblum Jul 30, 2026
20200de
docs: dead-address audit and mitigation plan for the two-subcube layout
rothblum Jul 30, 2026
292a30d
docs: worked example for the wiring cell space
rothblum Jul 30, 2026
2689b84
docs: the IO schema is a per-type choice — chaining vs IV-pinned sha2
rothblum Jul 30, 2026
47cb140
docs: taxonomy-of-emptiness remark — dead addresses vs padded rows
rothblum Jul 30, 2026
7040cf5
product_gkr: the two sanctioned hardening items
rothblum Jul 30, 2026
7fd4500
docs: the boundary run tree — assist cost and measurements
rothblum Jul 30, 2026
11c1973
pcs: packed-direct intake for the merged transport
rothblum Jul 31, 2026
ed7ab89
prover/verifier: mixed-class proofs over the merged transport
rothblum Jul 31, 2026
0a0b0b4
prover/pcs: defer the element eq tensors — merged never reads them
rothblum Aug 2, 2026
c113c12
pcs/prover: element-only and identity-compaction fixes on the merged …
rothblum Aug 2, 2026
fa84ab0
tests: merged-transport byte pins, tamper walk, and the final A/B record
rothblum Aug 2, 2026
3bb2539
tests: retarget the union suites jagged -> merged
rothblum Aug 2, 2026
76f1e86
prover/verifier/pcs: delete the jagged transport
rothblum Aug 2, 2026
b0cfc1a
prover/verifier: unify the shipped merged entries with the shared body
rothblum Aug 2, 2026
600f75e
prover/verifier/pcs: drop the jagged/merged name fossils
rothblum Aug 2, 2026
8e8c1a3
pcs/jagged: collapse shared-row scalar claims in the merged open
rothblum Aug 2, 2026
ab2aa08
pcs/jagged: one-hot fast paths for Boolean column points
rothblum Aug 2, 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
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ benchmarks/bench-hash-in-snark/*
!benchmarks/bench-hash-in-snark/setup.sh
benchmarks/spartan2/*
!benchmarks/spartan2/setup.sh
!benchmarks/spartan2/neutronnova_nn_bytes.patch
!benchmarks/spartan2/spartan_sp_bytes.patch

# bench_keccak.sh / bench_sha256.sh / bench_blake3.sh result caches (machine-specific timings)
benchmarks/bench-keccak-cache/
Expand Down Expand Up @@ -55,3 +57,10 @@ autoresearch/

# Local working notes (review docs, scratch write-ups) — not part of the project
docs/local/

# Built design-doc PDFs (source .tex files are tracked; PDFs are build output)
docs/*.pdf
docs/*.aux
docs/*.log
docs/*.out
docs/*.toc
38 changes: 38 additions & 0 deletions benchmarks/spartan2/neutronnova_nn_bytes.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
--- a/benches/sha256_neutronnova.rs
+++ b/benches/sha256_neutronnova.rs
@@ -34,8 +34,15 @@

type E = T256HyraxEngine;

-/// Sizes in bytes to benchmark: 1 KB (16 steps) and 2 KB (32 steps).
-const SIZES: &[usize] = &[1024, 2048];
+/// Sizes in bytes to benchmark (num_steps = size/64 compressions). Override with
+/// NN_BYTES (comma-separated bytes), e.g. NN_BYTES="32768" for 512 compressions.
+/// Default: 1 KB (16 steps) and 2 KB (32 steps).
+fn sizes() -> Vec<usize> {
+ match std::env::var("NN_BYTES") {
+ Ok(v) => v.split(',').filter_map(|s| s.trim().parse().ok()).collect(),
+ Err(_) => vec![1024, 2048],
+ }
+}

/// SHA-256 block size in bytes.
const BLOCK_BYTES: usize = 64;
@@ -226,7 +233,7 @@
let thread_counts = thread_counts();

// Report proof sizes once per size (outside measurements).
- for &size in SIZES {
+ for &size in &sizes() {
let num_steps = num_steps_for_size(size);
let step_proto = Sha256StepCircuit::<E>::new([0u8; BLOCK_BYTES]);
let core_proto = CoreCircuit::<E>::new();
@@ -252,7 +259,7 @@
g.warm_up_time(Duration::from_millis(100));
g.measurement_time(Duration::from_secs(10));

- for &size in SIZES {
+ for &size in &sizes() {
let num_steps = num_steps_for_size(size);
g.throughput(Throughput::Bytes(size as u64));

16 changes: 16 additions & 0 deletions benchmarks/spartan2/spartan_sp_bytes.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
--- a/benches/sha256_spartan.rs
+++ b/benches/sha256_spartan.rs
@@ -164,7 +164,12 @@
}

fn spartan_benches(c: &mut Criterion) {
- let sizes = [1024usize, 2048];
+ // Preimage byte-sizes (compressions ~= bytes/64). Override with SP_BYTES
+ // (comma-separated bytes), e.g. SP_BYTES="4096,8192,16384,32768" to sweep.
+ let sizes: Vec<usize> = match std::env::var("SP_BYTES") {
+ Ok(v) => v.split(',').filter_map(|s| s.trim().parse().ok()).collect(),
+ Err(_) => vec![1024, 2048],
+ };
let thread_counts = thread_counts();

// Report proof sizes once (outside measurements)
Loading
Loading