You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Sep 12, 2026. It is now read-only.
Hash the flock R1CS matrices densely, and rename the digest
The circuit digest absorbed the matrices in sparse form, eight bytes per
nonzero, which at 13% to 20% density was seven times longer than the dense
bit image: ~715 MB hashed against ~101 MB. Absorb the dense image instead,
a row at a time so the scatter stays L1-resident and the 96 MiB image is
never materialized. Computing the digest drops from 890 ms to 196 ms.
The dense form is also canonical. Over GF(2) a repeated column index cancels
and a reordered row is the same matrix, so the sparse form committed to an
encoding rather than to the matrix.
"Family" is renamed to "r1cs" throughout (FAMILY_DIGEST, family_digest, and
the prose in lean_vm, rec_aggregation and the end-to-end doc section). What
the word was carrying, that the digest omits the instance count and so covers
every block-diagonal instance over these matrices, is now said outright in
the doc comment. The in-hash domain tag becomes flock-r1cs-digest-v2, v2
because v1 named the sparse encoding.
Also inlines the python verifier's transcript_statement into its one caller.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Each reduction below adds evaluation claims on columns to a shared \emph{claim pool}; the final \textsc{Opening} phase proves all of them with a single PCS opening.
72
72
73
-
\paragraph{Setup and statement binding.} Fixed and shared in advance (\S\ref{sec:e2e-const} through \S\ref{sec:e2e-pi}): the fields and constants; the instance caps (\S\ref{sec:memchan}); the public program and its length; the initial state $(\pc_0,\fp_0)$ and final state $(\pc_{\mathrm{final}},\fp_{\mathrm{final}})$; and the public input $\mem[0],\mem[1]$. Before any challenge, the transcript is seeded by the public input and one environment digest that binds both the exact bytecode and flock's BLAKE2s circuit family. The prover then announces the memory log-size $h$ and the seven table log-heights $\tau_j$; the verifier checks them against the caps and derives every table, stack, and leaf shape.
73
+
\paragraph{Setup and statement binding.} Fixed and shared in advance (\S\ref{sec:e2e-const} through \S\ref{sec:e2e-pi}): the fields and constants; the instance caps (\S\ref{sec:memchan}); the public program and its length; the initial state $(\pc_0,\fp_0)$ and final state $(\pc_{\mathrm{final}},\fp_{\mathrm{final}})$; and the public input $\mem[0],\mem[1]$. Before any challenge, the transcript is seeded by the public input and one environment digest that binds both the exact bytecode and flock's BLAKE2s R1CS. The prover then announces the memory log-size $h$ and the seven table log-heights $\tau_j$; the verifier checks them against the caps and derives every table, stack, and leaf shape.
0 commit comments