Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1874 commits
Select commit Hold shift + click to select a range
e476382
test(prover): a wrong records table reaches the verifier, which refus…
MauroToscano Oct 24, 2026
5c7bf52
prover: BLOCK CARD FILL counts the whole prove's fills, phase A's too
MauroToscano Oct 24, 2026
fe8e604
prover: the card fills KECCAK_RND by default in a build with the card…
MauroToscano Oct 24, 2026
52e1707
prover: with LAMBDA_VM_BLOCK_DROP=partial live regeneration drops a t…
MauroToscano Oct 24, 2026
73150b6
prover: live regeneration drops a table only while the policy wants i…
MauroToscano Oct 24, 2026
ca1b489
prover: the recursion's leaves can double above a leaf-count threshold
MauroToscano Oct 24, 2026
2d29bd7
prover: the leaf scale is the verifier's, both ways, on proved trees
MauroToscano Oct 24, 2026
70b1f99
prover: the recursion's leaves double from 10 leaves by default
MauroToscano Oct 24, 2026
d89f5f0
test(lfm): the node pipe's toy tree finishes level 0 out of order on …
MauroToscano Oct 24, 2026
18e7c3e
zf_format: the WHIR base code's default blowup is 2
MauroToscano Oct 24, 2026
df14619
lfm tests: pin the WHIR costs at the default's blowup 2, and the opt-…
MauroToscano Oct 25, 2026
ef62184
lfm tests: size the leaf-scale test at blowup 4; count the lean test'…
MauroToscano Oct 25, 2026
6b78bc9
lfm: build the recursion proofs' domains and twiddles before their ca…
MauroToscano Oct 25, 2026
4912cd8
prover: the walked windows' boundaries must add up to the bytes they …
MauroToscano Oct 25, 2026
5d939bc
prover: a block's windows are walked on four threads by default
MauroToscano Oct 25, 2026
aa5c1a4
math-cuda: stream classes and a reservation that never evicts
MauroToscano Oct 23, 2026
dfebbaf
stark: a thread's device cap, and the table drivers keep their stream…
MauroToscano Oct 23, 2026
d9d24dc
block: a measurement knob that puts named groups first in phase B, an…
MauroToscano Oct 23, 2026
d2ddfe2
multilinear: a thread's background streams, stream draws and the card…
MauroToscano Oct 24, 2026
49f7ee8
stark: phase B can open each group beside the next group's argument
MauroToscano Oct 24, 2026
c0bb18d
stark: tests for phase B's overlap on a small block
MauroToscano Oct 24, 2026
4d558c3
prover: LAMBDA_VM_PHASE_B_OVERLAP and phase B's overlap readout
MauroToscano Oct 24, 2026
f6e59bc
phase B's overlap: latch on refusals only, no -0.000
MauroToscano Oct 24, 2026
cfbce3a
test(prover): the overlap's faults meet its opening thread
MauroToscano Oct 24, 2026
6f9ca98
math-cuda: read-backs through pinned staging for background-class thr…
MauroToscano Oct 24, 2026
6468f4a
phase B's overlap: LAMBDA_VM_PHASE_B_OVERLAP=pinned
MauroToscano Oct 24, 2026
b5c719d
phase B: LAMBDA_VM_BLOCK_SCHEDSTAT stamps the driver thread's run-que…
MauroToscano Oct 24, 2026
8f679ae
phase B's overlap with pinned read-backs is the default on a card build
MauroToscano Oct 25, 2026
a6d16b8
tests: the epoch harvest, the census instruments and a transcript pin…
MauroToscano Oct 25, 2026
61499fb
lfm tests: build five small-block recursion tests' blocks at blowup 4
MauroToscano Oct 25, 2026
6d133c5
test(stark): a partial drop-back asked for exactly one table's bytes …
MauroToscano Oct 24, 2026
3f51e26
prover: with LAMBDA_VM_BLOCK_P4_ROWS=pool the finish counts the dedup…
MauroToscano Oct 25, 2026
cd0542f
prover: the pool's row count reserves each map for its distinct ops a…
MauroToscano Oct 25, 2026
ec7655f
prover: the finish counts the per-row lookups on the pool by default
MauroToscano Oct 25, 2026
57805fa
stark, prover: partial drops can keep a budget of committed cells at …
MauroToscano Oct 25, 2026
6d903ba
stark, prover: partial drops can keep a budget relative to the arming…
MauroToscano Oct 25, 2026
48e8d7a
prover: partial drops keep a budget 1.3 G cells below the arming poin…
MauroToscano Oct 25, 2026
8f550fb
prover: the streamed layout runs eight chunks ahead by default
MauroToscano Oct 25, 2026
576207f
prover: the sliding finish can cap the bytes it builds at once apart …
MauroToscano Oct 25, 2026
143b06c
prover: the rest layout line says waves only where the rest builds in…
MauroToscano Oct 25, 2026
67ab213
prover: the sliding finish holds up to 4 GiB of the rest with at most…
MauroToscano Oct 25, 2026
430b544
test(block): the block's trace alone, its groups drained instead of c…
MauroToscano Oct 23, 2026
431a79f
executor, prover: the executor's log and the MEMW_R register row get …
MauroToscano Oct 24, 2026
4077d5f
multilinear, math-cuda: CPU and MEMW_R tables held as records go up a…
MauroToscano Oct 24, 2026
7b92644
prover: full CPU and MEMW_R chunks handed out as the records their ro…
MauroToscano Oct 24, 2026
62a4c68
prover: LAMBDA_VM_BLOCK_CARD_FILL takes families; streamed chunks as …
MauroToscano Oct 24, 2026
bd0e454
prover: a CPU chunk held as its logs declares its preprocessed TIMESTAMP
MauroToscano Oct 25, 2026
635c4c4
stark: a regeneration slot for a table dropped as its records
MauroToscano Oct 24, 2026
7df0616
multilinear: a table held as its records gives them up to a spill and…
MauroToscano Oct 24, 2026
3832218
stark: a block's records tables park and drop like its packed ones
MauroToscano Oct 24, 2026
7231f11
prover: streamed chunks held as records drop and come back like any c…
MauroToscano Oct 24, 2026
876ae02
prover: streamed chunks are held as records only where live regenerat…
MauroToscano Oct 24, 2026
c81458c
math-cuda: fill MEMW_A and LOAD tables on the card from their rows
MauroToscano Oct 24, 2026
e2a224d
multilinear: MEMW_A and LOAD records
MauroToscano Oct 24, 2026
7adae6e
prover: full MEMW_A and LOAD chunks handed out as their rows
MauroToscano Oct 24, 2026
cd4d599
math-cuda: known answers for the MEMW_A and LOAD fills
MauroToscano Oct 24, 2026
e712e5b
math-cuda: fill STORE, SHIFT and MEMW tables on the card from their ops
MauroToscano Oct 24, 2026
4adb575
multilinear: STORE, SHIFT and MEMW records
MauroToscano Oct 24, 2026
3ae7aee
prover: full STORE, MEMW and SHIFT chunks handed out as their ops
MauroToscano Oct 24, 2026
b25443e
math-cuda: known answers for the STORE, SHIFT and MEMW fills
MauroToscano Oct 24, 2026
31b6c71
test(prover): make the card-fill fault tests bite on the merged CPU l…
MauroToscano Oct 25, 2026
df6bd2d
math-cuda: the fill checks read back through the pinned staging
MauroToscano Oct 25, 2026
1c8b41f
stark: a finished group lets go of its records in phase B
MauroToscano Oct 25, 2026
072fb55
prover: report the records phase B lets go, and check them in the dro…
MauroToscano Oct 25, 2026
acd8160
tests: the records drop test states its parked table's cells
MauroToscano Oct 25, 2026
38c5e30
multilinear: records can hand their pages back as they are let go
MauroToscano Oct 25, 2026
23b690d
prover: records chunks hand back the pages of the lists they alone hold
MauroToscano Oct 25, 2026
ba9449a
stark: phase B hands finished groups' records to a thread of their own
MauroToscano Oct 25, 2026
496ba68
prover: report the records pages handed back, and check them in the d…
MauroToscano Oct 25, 2026
0dff4b3
prover: the card fills CPU and MEMW_R chunks from their records by de…
MauroToscano Oct 26, 2026
a3322dc
tests: the regeneration tests keep CPU and MEMW_R on the host
MauroToscano Oct 26, 2026
01a917c
prover: the finish can count the per-row lookups by parts of each chunk
MauroToscano Oct 25, 2026
ed31517
prover: the card can be set up as the streamed prove starts
MauroToscano Oct 25, 2026
e870428
prover: phase 4 says what each BITWISE source cost
MauroToscano Oct 26, 2026
3740ca8
prover: the finish can count LT's and KECCAK's lookups straight into …
MauroToscano Oct 26, 2026
4ba08f7
prover: the finish counts LT's and KECCAK's lookups straight into its…
MauroToscano Oct 26, 2026
92c735f
prover: pin the finish's phase-4 defaults
MauroToscano Oct 26, 2026
b0f83db
tests: the unarmed live regeneration cases pin auto's target out of r…
MauroToscano Oct 26, 2026
c303681
tests: the spill budget and hand-off tests pin auto's target out of r…
MauroToscano Oct 26, 2026
de10ce3
guest: build ethrex from a fork that keeps jump destinations as a bitmap
MauroToscano Oct 26, 2026
8c36bea
docs: the benchmark block's cycle count with the guest's forked ethrex
MauroToscano Oct 26, 2026
124080d
guest: take ethrex main's unchecked memory hot path in the forked ethrex
MauroToscano Oct 26, 2026
f0366d9
prover: a lean leaf checks a chain's tail rounds at every leaf once
MauroToscano Oct 24, 2026
e386785
prover: a lean tail tree needs 24 queries a leaf
MauroToscano Oct 24, 2026
f1190ab
prover: a lean leaf takes round 0's values four to a hinted word
MauroToscano Oct 24, 2026
014c483
prover: a hint whose arena word the executor picks on a bit
MauroToscano Oct 24, 2026
7d4e903
prover: a lean leaf walks each path level in three selects
MauroToscano Oct 24, 2026
d89432b
prover: the leaves' query check is the verifier's named choice
MauroToscano Oct 24, 2026
5eb5f2f
tests: the lean leaf's tests pass slices by reference, and walk leave…
MauroToscano Oct 24, 2026
721bc0a
tests: a lean chain refuses tail blocks that only fold consistently
MauroToscano Oct 24, 2026
1661b4c
tests: beside a lean leaf's tail rounds the sampled checks still run
MauroToscano Oct 25, 2026
00cdaa5
tests: a lean chain's tail fold compare refuses a tail value on its own
MauroToscano Oct 25, 2026
3ca749b
tests: the lean query's box-tier block tests at the landing's rates
MauroToscano Oct 25, 2026
471d00c
tests: pin the median mix's leaf programs under each query check
MauroToscano Oct 25, 2026
5430703
prover: the leaves check lean by default
MauroToscano Oct 25, 2026
e48de38
tests: pin the median mix's leaf programs over a checked-in ELF
MauroToscano Oct 26, 2026
d8c9308
prover: the sliding finish marks each family's build span, busy secon…
MauroToscano Oct 24, 2026
372491a
prover: with LAMBDA_VM_BLOCK_P4_BESIDE=1 the streamed finish counts B…
MauroToscano Oct 24, 2026
fc6b5f5
prover: with LAMBDA_VM_BLOCK_REST_BITWISE_LAST=1 the sliding finish h…
MauroToscano Oct 26, 2026
540ea8a
prover: with LAMBDA_VM_BLOCK_BITWISE_FROM_TABLES=1 BITWISE's LT, BRAN…
MauroToscano Oct 26, 2026
a69ccd6
prover: count BITWISE's LT, BRANCH and BYTEWISE lookups from their ta…
MauroToscano Oct 26, 2026
25042c0
multilinear: stacked openings can carry WHIR's commitment-time answers
MauroToscano Oct 26, 2026
4d3e41d
block WHIR: every committed polynomial answers its commitment-time point
MauroToscano Oct 26, 2026
0b8f2b7
lfm: the block leaves replay the commitment-time answers
MauroToscano Oct 26, 2026
673d7b6
math-cuda: the commitment-time answers' column values in one pass
MauroToscano Oct 26, 2026
1eb73c4
tests: the leaves' commitment-time answers under both query checks
MauroToscano Oct 26, 2026
d564f2d
tests: no commitment-time answer shares column 0's power
MauroToscano Oct 26, 2026
922d467
tests: the altered-answer leaf test runs its block at blowup 4
MauroToscano Oct 26, 2026
dc58e22
tests: re-pin the median mix's leaf programs with the commitment-time…
MauroToscano Oct 26, 2026
dda7cde
multilinear: read the commitment-time answers' host columns outside t…
MauroToscano Oct 27, 2026
5805fe7
block: the streamed refusal over the group cap says how far the block…
MauroToscano Oct 5, 2026
0427b6c
block: a block statement takes up to 1024 groups
MauroToscano Oct 27, 2026
d99e180
ci: the prover shards skip the tests that take more than 45 s
MauroToscano Oct 27, 2026
27463fa
syscalls: compare a doubleword at a time in the runtime's memcmp
MauroToscano Oct 26, 2026
145301e
ethrex-crypto: cache Keccak-256 digests of repeated short inputs
MauroToscano Oct 27, 2026
3caabfa
guest: build ethrex from the fork with cheaper byte swaps and ordered…
MauroToscano Oct 27, 2026
dc97af3
guest: name the pushed fork branch that holds the pinned ethrex commit
MauroToscano Oct 27, 2026
6656844
ethrex-crypto: absorb inputs shorter than one block with a single copy
diegokingston Oct 27, 2026
0c0f043
guest: decode the input with pre-sized rkyv validation and pooling ta…
diegokingston Oct 27, 2026
1a8958c
guest: build ethrex from the fork with the round-12 guest optimizations
MauroToscano Oct 27, 2026
3bae34c
guest: name the pushed fork branch that holds the pinned ethrex commit
MauroToscano Oct 27, 2026
5b983a2
ci: skip the 26 tests that still took more than 42 s on a runner
MauroToscano Oct 28, 2026
f4ec4af
tests: a lean chain's first tail successor compare, and HintOn at the…
MauroToscano Oct 27, 2026
b545f96
lfm: say what a lean leaf's round-0 fill lanes are
MauroToscano Oct 27, 2026
e9f0267
tests: a grouped run's claims cannot trade, and the coset position is…
MauroToscano Oct 27, 2026
1932943
multilinear: a WHIR chain's verifier holds its domain to the configur…
MauroToscano Oct 27, 2026
cc92656
block: the frame holds BITWISE to its fixed height by a rule of its own
MauroToscano Oct 27, 2026
030c589
lfm: the block verifier checks under a pinned format, never its envir…
MauroToscano Oct 27, 2026
144113e
docs: the query and round counts at the default WHIR format
MauroToscano Oct 27, 2026
e231a90
tests: a verifier under LAMBDA_VM_ZF_WHIR_BLOWUP=4 takes no blowup-4 …
MauroToscano Oct 27, 2026
a9595b2
tests: the batched argue's residual, final equation and cross-table w…
MauroToscano Oct 27, 2026
441256a
docs: the block format's argue is batched in production
MauroToscano Oct 27, 2026
216ebcd
tests: the block tree plan's partition, shape and state word
MauroToscano Oct 27, 2026
bcee8cd
lfm: every block leaf is held under its partition's heights as emitted
MauroToscano Oct 27, 2026
b9c349d
tests: the blowup-4 case runs at the pinned verifier's own group cap
MauroToscano Oct 27, 2026
96ca19f
tests: the block-path scan reaches the verifier's derive and top check
MauroToscano Oct 28, 2026
288b1a9
guest: build ethrex from the fork with cheaper witness decoding and e…
MauroToscano Oct 28, 2026
b72d574
guest: stop reserving the deserializer pool the input no longer uses
MauroToscano Oct 28, 2026
4a2f22f
ethrex-crypto: write a long input's first block straight into the spo…
MauroToscano Oct 28, 2026
be2b279
ethrex-crypto: keep ecrecover on affine coordinates instead of round-…
MauroToscano Oct 28, 2026
7a14b61
guest: build ethrex from the fork with pool-free witness node decoding
MauroToscano Oct 28, 2026
0632656
ethrex-crypto: test the affine-coordinate ecrecover on edge inputs
MauroToscano Oct 28, 2026
be47441
prover, cli: remove the disk-spill feature
MauroToscano Oct 28, 2026
a2e4ba3
stark, crypto, math: remove the disk-spill feature
MauroToscano Oct 28, 2026
69e6e06
block: remove the disk store; live regeneration is the only relief
MauroToscano Oct 28, 2026
1ff9b8b
ci, make: drop the disk-spill job, target and calibration script
MauroToscano Oct 28, 2026
0191bd2
bench: the recursion guest's lockfile without sysinfo, and without li…
MauroToscano Oct 28, 2026
7251b81
lfm: an opt-in leaf scale that doubles every leaf and puts up to four…
MauroToscano Oct 28, 2026
6fd46c0
tests: the real-block harness prints the top's rows and padded heights
MauroToscano Oct 28, 2026
ec003c6
lfm: the block's leaves double and go under one top by default
MauroToscano Oct 28, 2026
9553436
guest: build ethrex from the fork with cheaper EVM bookkeeping
MauroToscano Oct 28, 2026
cb7b865
guest: build ethrex from the fork with cheaper call frames
MauroToscano Oct 28, 2026
1474584
stark: commitment-time out-of-domain answers for multi-table proofs
MauroToscano Oct 28, 2026
8afa05a
lfm: every recursion proof carries commitment-time out-of-domain answers
MauroToscano Oct 28, 2026
01db1cf
lfm: every recursion proof runs 112 queries
MauroToscano Oct 28, 2026
4109866
lfm: one top takes at most three doubled leaves
MauroToscano Oct 28, 2026
b255994
test(block-whir): make the walk-end hand-off test independent of sche…
MauroToscano Oct 28, 2026
632f972
stark, lfm: reject a commitment-time point that meets a DEEP point
MauroToscano Oct 29, 2026
c96d8ab
tests: tidy the DEEP-point tests for fmt and clippy
MauroToscano Oct 29, 2026
147b4b3
spec: read dataclass field names from the class, not the instance
MauroToscano Oct 29, 2026
a81edc7
lfm: optional dense read recount in the program validator
MauroToscano Oct 29, 2026
1767259
lfm: stamp node emission time in the tree readout
MauroToscano Oct 29, 2026
df2ecae
lfm: recount validator reads densely by default
MauroToscano Oct 30, 2026
be1c040
stark: evaluate a two-part composition on the 2n-point sub-coset
MauroToscano Oct 29, 2026
6be6774
stark: card test for the sub-coset composition evaluation
MauroToscano Oct 29, 2026
8dc7097
stark: compare the sub-coset and whole-coset composition on a multi-t…
MauroToscano Oct 29, 2026
1dba83c
lfm: card timing of the socket's composition evaluation at strides 1 …
MauroToscano Oct 29, 2026
912bfa4
lfm, stark: rebuild the hash socket's round witness on the card
MauroToscano Oct 29, 2026
c8049b6
lfm: log the card's upload traffic at the base's end and the tree's end
MauroToscano Oct 29, 2026
458aede
math-cuda: keep the socket fill launcher above the test module
MauroToscano Oct 29, 2026
54ae83f
stark: build a producer's trace only when the device commit will take it
MauroToscano Oct 30, 2026
bdc97b9
lfm: the socket's tampering tests drop the card producer after editing
MauroToscano Oct 30, 2026
bed5813
prover: count each handed-out chunk on a thread of its own
MauroToscano Oct 30, 2026
1e79dc9
prover: prove a block with the hand-out counted on each thread
MauroToscano Oct 30, 2026
bf3f7ed
lfm: prove the socket with the card-built trace and the sub-coset com…
MauroToscano Oct 30, 2026
a9069e8
ci: skip the hand-out counter's whole-block byte test on GitHub
MauroToscano Oct 30, 2026
a82b392
executor: fixed-width in-page access, bulk DMA copies, owned window logs
MauroToscano Oct 30, 2026
e5f1105
block prover: move window logs out of the executor, stamp its own time
MauroToscano Oct 30, 2026
58711c4
stark, lfm: take a prove's first-use costs out of its card window
MauroToscano Oct 30, 2026
f39e054
guest: track the input's shared pointers in a table keyed by offset
MauroToscano Oct 29, 2026
d502b1b
crypto: convert each ECSM point once and take xp^3 from the curve equ…
MauroToscano Oct 29, 2026
5191b1d
crypto: load the keccak input's last partial lane in one go
MauroToscano Oct 29, 2026
c493750
guest: build ethrex from the fork with no end-of-run drop
MauroToscano Oct 29, 2026
535c2fe
crypto: run the ECSM recovery's field arithmetic on four 64-bit limbs
MauroToscano Oct 30, 2026
a49c410
guest: build ethrex from the fork with a pointer program counter
MauroToscano Oct 30, 2026
8d38450
executor: hand out each window's logs with capacity equal to length
MauroToscano Oct 31, 2026
cbf990f
lfm: prove equal-height chips as one AIR behind LAMBDA_VM_ZF_LFM_MERG…
MauroToscano Oct 29, 2026
871ee91
lfm: census of the merged tables, clippy
MauroToscano Oct 30, 2026
13fbf3d
lfm: harden the merged tables after review
MauroToscano Oct 30, 2026
dbce02b
zf: merge the LFM proofs' equal-height chips by default
MauroToscano Oct 30, 2026
5a742df
stark: let phase B re-rank the groups still to come while it runs
MauroToscano Oct 30, 2026
467d37b
prover: phase B finishes one recursion leaf first, and the tree takes…
MauroToscano Oct 30, 2026
3e4de5d
ci: skip the leaf-led phase B block test on GitHub
MauroToscano Oct 31, 2026
60ade0f
lfm: stream the top by each child's own arena count
MauroToscano Oct 31, 2026
750a39f
executor: Keccak-256 of a guest buffer in one ecall
MauroToscano Oct 30, 2026
b39f516
prover: prove Keccak-256 of a buffer as a second mode of KECCAK
MauroToscano Oct 30, 2026
35e6c9f
crypto: hash the guest's keccak inputs with one keccak256 call
MauroToscano Oct 30, 2026
c5f31dd
prover: run the builder equivalence suites over Keccak-256 calls
MauroToscano Oct 30, 2026
3452cb7
spec: the KECCAK chip's sponge mode for Keccak-256 of a buffer
MauroToscano Oct 30, 2026
a57cff6
prover: pin the recursion's cost of checking the two-mode KECCAK table
MauroToscano Oct 30, 2026
26111c7
prover: cut a block's KECCAK tables at 2^17 rows
MauroToscano Oct 30, 2026
46e3637
prover: prove Keccak-256 calls end to end and refuse forged sponge rows
MauroToscano Oct 30, 2026
6bd0a61
prover: show each sponge-mode check is load-bearing
MauroToscano Oct 30, 2026
45f088f
prover: put the round chip's tokens on KECCAK's mode bits
MauroToscano Oct 31, 2026
97dfdb3
spec: KECCAK's permutation mode is gated by its own mode bit
MauroToscano Oct 31, 2026
ea4f144
prover: count the two-mode KECCAK in the epoch budget; read summed mu…
MauroToscano Oct 31, 2026
2570d75
ci: skip the Keccak-256 block test on GitHub
MauroToscano Oct 31, 2026
b0810eb
lfm: re-pin the median-mix leaf programs for the two-mode KECCAK
MauroToscano Nov 1, 2026
1be64bf
prover: leave the sponge checks out on every thread in the box forger…
MauroToscano Nov 1, 2026
a1af933
prover: re-pin the block-wide LogUp census for KECCAK's sponge link
MauroToscano Nov 1, 2026
c7ef167
prover: build the box forgery test's AIRs fresh for each prove
MauroToscano Nov 1, 2026
a8f80a7
ecsm, executor: an ECDSA public-key recovery call
MauroToscano Oct 30, 2026
42d4dc8
prover: the ECREC table proves the recovery call
MauroToscano Oct 30, 2026
5bf6ce6
crypto: recover the sender through one ECREC call
MauroToscano Oct 30, 2026
c8bade3
prover: count both new call programs in the builder suites
MauroToscano Oct 31, 2026
4f080c8
prover: pin ECREC's scalar and chain bounds, and tie its keys to the …
MauroToscano Oct 31, 2026
5e8d461
crypto: take the software path when the VM would refuse ECREC's operands
MauroToscano Oct 31, 2026
c1beb58
spec: name the CPU tables' timestamp bases in ECREC's key argument
MauroToscano Oct 31, 2026
44bffc9
ci: skip the two ECREC block tests on GitHub
MauroToscano Oct 31, 2026
5dd25b5
lfm: re-bless StatementReplayV0 for the 23-count epoch statement
MauroToscano Oct 31, 2026
9dd92be
lfm: re-pin the median-mix leaf programs for the ECREC table
MauroToscano Nov 1, 2026
9fa3bae
lfm: count ECREC's table count in the epoch statement cursor test
MauroToscano Nov 1, 2026
705d990
prover: read the ECREC table in the block-wide LogUp census
MauroToscano Nov 1, 2026
3f9e3f0
chore: drop design notes from the PR, keep the BLAKE3 second source
MauroToscano Nov 1, 2026
44e5378
chore: drop the BLAKE3 absorb micro-benchmark and its guest generator
MauroToscano Nov 1, 2026
9d782a2
test: drop measurement probes that guard nothing
MauroToscano Nov 1, 2026
3997a59
lfm: drop the epoch-continuation WHIR tree and the WHIR-proved LFM pr…
MauroToscano Nov 1, 2026
220dd38
lfm: drop the RPO and Poseidon-original LFM_HASH socket arms
MauroToscano Nov 1, 2026
0346d25
stark: drop the never-adopted fraction-tree prefetch knob
MauroToscano Nov 1, 2026
20ed840
perf(math-cuda): the WHIR encoding's Möbius transform in three passes…
MauroToscano Nov 1, 2026
b21d2f4
test(math-cuda): the wide Möbius parity test's small layout fits its …
MauroToscano Nov 1, 2026
04ecb7d
perf(math-cuda): the WHIR encoding's NTT in three passes, opt-in
MauroToscano Nov 1, 2026
a621053
perf(math-cuda): fold the WHIR encoding's low Möbius levels into its …
MauroToscano Nov 2, 2026
b8e3f9d
perf(argue): keep a long program's zerocheck rounds on the card to a …
MauroToscano Nov 2, 2026
c9c9ee4
perf(recursion): warm the tree's first prove beside the base (LFM_WAR…
MauroToscano Nov 1, 2026
df88055
perf(cuda): hoist the fused DEEP's row-independent terms (LAMBDA_VM_D…
MauroToscano Nov 2, 2026
a64045d
perf(math-cuda): lean twins of the Poseidon1 leaf and node kernels, o…
MauroToscano Nov 1, 2026
272370b
multilinear: drop the never-adopted lean GKR tail and gathered-read k…
MauroToscano Nov 2, 2026
af18a98
lfm: drop the classic WHIR fold emitter and the windowed fold point
MauroToscano Nov 2, 2026
c730ba9
block_whir: drop the streamed KECCAK_RND, streamed MEMW-LT and packed…
MauroToscano Nov 2, 2026
6674bc7
perf(math-cuda): the WHIR encoding's wide Möbius, wide NTT and fused …
MauroToscano Nov 3, 2026
0ebb247
perf(argue): keep a long program's zerocheck rounds on the card by de…
MauroToscano Nov 3, 2026
312af85
perf(recursion): warm the tree's first prove beside the base by default
MauroToscano Nov 3, 2026
e8362a1
perf(cuda): hoist the fused DEEP's row-independent terms by default
MauroToscano Nov 3, 2026
493394e
perf(math-cuda): load the lean Poseidon1 leaf and node kernels by def…
MauroToscano Nov 3, 2026
6fef1b4
test(stark): pin the default batched argue's bytes
MauroToscano Nov 1, 2026
eea6d01
feat(argue): pack the batched argue's GKR slots, opt-in, recursion in…
MauroToscano Nov 1, 2026
f9f8866
test(argue): the GKR slot packing's rule, round trips, tampers and re…
MauroToscano Nov 1, 2026
f78b635
test(argue): the card tests fail when a card is present but unused
MauroToscano Nov 1, 2026
cc6b351
feat(argue): pack the base's GKR trees by default, at a price of 2^22…
MauroToscano Nov 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
327 changes: 327 additions & 0 deletions .config/ci-slow-tests.txt

Large diffs are not rendered by default.

7 changes: 4 additions & 3 deletions .github/workflows/benchmark-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,15 @@ env:
# from one real one. Only the headline screen was dropped.
#
# Cycle counts below are for the ELF THIS JOB BUILDS (see "Build ethrex guest ELF"),
# as of main @ 9ccdaf2 with clang 21. They move with guest optimisation (#861 gave the
# guest thin LTO) and ~2% with the clang major on PATH, so a count quoted against a
# as of the guest built with fat LTO and its own memcpy. They move with guest
# optimisation (#861 gave the guest thin LTO, fat LTO and the runtime memcpy took
# another 20 %) and ~2% with the clang major on PATH, so a count quoted against a
# different ELF reads as a regression — always pin the ELF when repeating one.
ELF: executor/program_artifacts/rust/ethrex.elf
# The workload: a real Ethereum block. WHICH block lives in
# the Makefile and nowhere else — nothing in this file names one, so a repoint
# moves this job without editing it. At the current default and pinned ethrex rev that
# is 30,498,818 cycles, 10,659 keccak calls and 116 ecsm calls — several times the work
# is 23,935,913 cycles, 10,659 keccak calls and 116 ecsm calls — several times the work
# of the synthetic block, at a very different keccak:ecrecover mix. That is the whole
# point: a prover change can move the synthetic number and the real one in opposite
# directions. All three figures move with the ethrex rev, so re-measure on a bump
Expand Down
141 changes: 71 additions & 70 deletions .github/workflows/pr_main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -96,14 +96,20 @@ jobs:
run: |
make compile-programs-asm

# The key hashes every source a Rust guest build reads: the guest crates, the guest
# runtime (syscalls), the crypto crates guests depend on by path (ethrex-crypto for the
# ethrex guest; crypto and math for keccak_transcript_pattern), the target spec and the
# Makefile's recipe. An exact hit skips the compile step below, so a change confined to
# one of them that the key missed would run every test on a stale ELF. The same key
# appears in each job that restores these ELFs.
- name: Cache compiled Rust ELF artifacts and build cache
id: cache-rust-elfs
uses: actions/cache@v4
with:
path: |
executor/program_artifacts/rust
executor/shared_target
key: rust-elf-artifacts-${{ hashFiles('executor/programs/rust/**', 'executor/programs/riscv64im-lambda-vm-elf.json', 'syscalls/**', 'Makefile') }}
key: rust-elf-artifacts-${{ hashFiles('executor/programs/rust/**', 'executor/programs/riscv64im-lambda-vm-elf.json', 'syscalls/**', 'crypto/ethrex-crypto/src/**', 'crypto/ethrex-crypto/Cargo.toml', 'crypto/crypto/src/**', 'crypto/crypto/Cargo.toml', 'crypto/math/src/**', 'crypto/math/Cargo.toml', 'Makefile') }}
restore-keys: |
rust-elf-artifacts-

Expand Down Expand Up @@ -197,26 +203,72 @@ jobs:
run: make test-ethrex-crypto

# "Test" is a required check — keep this name to avoid branch protection changes.
# This gate job passes only when CLI, executor, disk-spill, and prover tests succeed.
# This gate job passes only when CLI, executor, and prover tests succeed.
host-kat:
# The device kernels' known-answer gates. `make test-*-host-kat` compiles the
# REAL `.cu` sources as host C++ through
# `crypto/math-cuda/tests/host_kat/cuda_host_shim.h` and runs them against
# external vectors (the official BLAKE3 vectors, miden-crypto's RPO vectors)
# and the committed oracle tables — g++ only, no CUDA, no cargo, seconds. It
# is the only per-PR check on the kernel arithmetic: the GPU parity suites
# (gpu-tests.yml) run on merge_group alone, and until this job existed the
# host-KAT targets lived in no workflow at all. Arithmetic only — nvcc
# acceptance and everything about execution stay with the GPU tests.
name: Host KAT (kernel pins)
runs-on: ubuntu-latest
if: github.event_name != 'push' || github.actor != 'github-merge-queue[bot]'
steps:
- name: Checkout sources
uses: actions/checkout@v4

- name: BLAKE3 host-KAT (7-round and 6-round arms)
run: make test-blake3-host-kat

- name: RPX host-KAT (permutation, leaf sponge, parent, leaf and tree kernels)
run: make test-rpx-host-kat

- name: Column-major LDE engine host-KAT (NTT passes, coset LDE)
run: make test-ntt-cm-host-kat

- name: WHIR host-KAT (fused round fold, lean first rounds)
run: make test-whir-host-kat

- name: GKR host-KAT (layer rounds over an input layer kept without its padding)
run: make test-gkr-host-kat

- name: Commit-time answers host-KAT (columns' values at one point, one pass)
run: make test-eq-dot-host-kat

- name: Round-slot host-KAT (a round's sums reduced by its last block)
run: make test-round-slot-host-kat

# Second source for the TABLES the BLAKE3 host-KAT trusts: upstream
# BLAKE3's portable C with its round loop parameterised, against the
# committed 6-round vectors and the Python oracle. A ~1 s C compile plus a
# few seconds of Python (cc + python3, both on the runner); it too had no
# workflow before this job.
- name: BLAKE3 second-source check of the 6-round tables
run: make test-blake3-second-source

test:
name: Test
if: always()
needs: [test-executor, test-cli, test-prover, test-disk-spill, test-stark-cuda-lib]
needs: [test-executor, test-cli, test-prover, test-stark-cuda-lib, host-kat]
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 }}"
stark_cuda_lib="${{ needs.test-stark-cuda-lib.result }}"
host_kat="${{ needs.host-kat.result }}"

echo "test-executor: $executor"
echo "test-cli: $cli"
echo "test-prover: $prover"
echo "test-disk-spill: $disk_spill"
echo "test-stark-cuda-lib: $stark_cuda_lib"
echo "host-kat: $host_kat"

# Allow "success" or "skipped" (skipped on merge queue pushes)
if [[ "$executor" != "success" && "$executor" != "skipped" ]]; then
Expand All @@ -228,72 +280,13 @@ jobs:
if [[ "$prover" != "success" && "$prover" != "skipped" ]]; then
exit 1
fi
if [[ "$disk_spill" != "success" && "$disk_spill" != "skipped" ]]; then
if [[ "$stark_cuda_lib" != "success" && "$stark_cuda_lib" != "skipped" ]]; then
exit 1
fi
if [[ "$stark_cuda_lib" != "success" && "$stark_cuda_lib" != "skipped" ]]; then
if [[ "$host_kat" != "success" && "$host_kat" != "skipped" ]]; then
exit 1
fi

test-disk-spill:
name: Disk-spill 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-disk-spill"
cache-all-crates: "true"

- name: Cache compiled ASM ELF artifacts
id: cache-asm-elfs
uses: actions/cache@v4
with:
path: executor/program_artifacts/asm
key: asm-elf-artifacts-${{ hashFiles('executor/programs/asm/**') }}

- name: Install clang and lld
if: steps.cache-asm-elfs.outputs.cache-hit != 'true'
run: sudo apt-get update && sudo apt-get install -y clang lld

- name: Compile ASM programs to ELF
if: steps.cache-asm-elfs.outputs.cache-hit != 'true'
run: |
make compile-programs-asm

- name: Cache compiled Rust ELF artifacts and build cache
id: cache-rust-elfs
uses: actions/cache@v4
with:
path: |
executor/program_artifacts/rust
executor/shared_target
key: rust-elf-artifacts-${{ hashFiles('executor/programs/rust/**', 'executor/programs/riscv64im-lambda-vm-elf.json', 'syscalls/**', 'Makefile') }}
restore-keys: |
rust-elf-artifacts-

- name: Compile Rust programs to ELF
if: steps.cache-rust-elfs.outputs.cache-hit != 'true'
run: |
make compile-programs-rust

- name: Run stark disk-spill tests
run: |
cargo test --release -p stark --features disk-spill disk_spill

- name: Run prover disk-spill tests
env:
FORCE_DISK_SPILL: "1"
run: |
cargo test --release -p lambda-vm-prover --features disk-spill -- disk_spill count_table_lengths

test-stark-cuda-lib:
name: Stark cuda-feature lib tests
runs-on: ubuntu-latest
Expand Down Expand Up @@ -349,6 +342,11 @@ jobs:
-p lambda-vm-prover -p stark -p crypto -p ecsm \
--archive-file prover-tests.tar.zst

# The prover shards skip the tests listed in .config/ci-slow-tests.txt (they run in full on the project's own
# machines). Fails unless the filter skips exactly the listed tests and every test binary keeps a test.
- name: Check the slow-test list against the archive
run: python3 scripts/ci_slow_tests.py check prover-tests.tar.zst

- name: Upload test archive
uses: actions/upload-artifact@v4
with:
Expand Down Expand Up @@ -391,7 +389,7 @@ jobs:
path: |
executor/program_artifacts/rust
executor/shared_target
key: rust-elf-artifacts-${{ hashFiles('executor/programs/rust/**', 'executor/programs/riscv64im-lambda-vm-elf.json', 'syscalls/**', 'Makefile') }}
key: rust-elf-artifacts-${{ hashFiles('executor/programs/rust/**', 'executor/programs/riscv64im-lambda-vm-elf.json', 'syscalls/**', 'crypto/ethrex-crypto/src/**', 'crypto/ethrex-crypto/Cargo.toml', 'crypto/crypto/src/**', 'crypto/crypto/Cargo.toml', 'crypto/math/src/**', 'crypto/math/Cargo.toml', 'Makefile') }}
restore-keys: |
rust-elf-artifacts-

Expand Down Expand Up @@ -440,13 +438,16 @@ jobs:
# the concurrent path or VramGate's blocking path on a PR. The other
# three shards keep the default-k coverage. An empty value on those
# fails to parse and falls back to the default, so this is inert there.
# The tests listed in .config/ci-slow-tests.txt are skipped here: each took more than 45 s on a runner, and
# the project's own machines run them (scripts/ci_slow_tests.py; the build job checks the list).
env:
TABLE_PARALLELISM: ${{ matrix.partition == 1 && '6' || '' }}
run: |
cargo nextest run \
--archive-file prover-tests.tar.zst \
--partition hash:${{ matrix.partition }}/4 \
--test-threads=1
--test-threads=1 \
-E "$(python3 scripts/ci_slow_tests.py expr)"

test-prover-comprehensive:
name: Prover comprehensive tests
Expand Down Expand Up @@ -480,7 +481,7 @@ jobs:
path: |
executor/program_artifacts/rust
executor/shared_target
key: rust-elf-artifacts-${{ hashFiles('executor/programs/rust/**', 'executor/programs/riscv64im-lambda-vm-elf.json', 'syscalls/**', 'Makefile') }}
key: rust-elf-artifacts-${{ hashFiles('executor/programs/rust/**', 'executor/programs/riscv64im-lambda-vm-elf.json', 'syscalls/**', 'crypto/ethrex-crypto/src/**', 'crypto/ethrex-crypto/Cargo.toml', 'crypto/crypto/src/**', 'crypto/crypto/Cargo.toml', 'crypto/math/src/**', 'crypto/math/Cargo.toml', 'Makefile') }}
restore-keys: |
rust-elf-artifacts-

Expand Down Expand Up @@ -564,7 +565,7 @@ jobs:
path: |
executor/program_artifacts/rust
executor/shared_target
key: rust-elf-artifacts-${{ hashFiles('executor/programs/rust/**', 'executor/programs/riscv64im-lambda-vm-elf.json', 'syscalls/**', 'Makefile') }}
key: rust-elf-artifacts-${{ hashFiles('executor/programs/rust/**', 'executor/programs/riscv64im-lambda-vm-elf.json', 'syscalls/**', 'crypto/ethrex-crypto/src/**', 'crypto/ethrex-crypto/Cargo.toml', 'crypto/crypto/src/**', 'crypto/crypto/Cargo.toml', 'crypto/math/src/**', 'crypto/math/Cargo.toml', 'Makefile') }}
restore-keys: |
rust-elf-artifacts-

Expand Down
Loading
Loading