Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
c2c45df
perf(blake2): reuse packed Spongefish prefix compressions
Acentelles Oct 20, 2026
cab2954
perf(recursion): forward Akita's factored compression-weight feature
a16zentelles Oct 22, 2026
7a72d0f
perf(recursion): turn factored compression weights on by default
Acentelles Oct 23, 2026
987289c
perf(recursion): forward Akita's terminal quotient certificate feature
Acentelles Oct 22, 2026
68990a2
perf(recursion): turn the terminal quotient certificate on by default
Acentelles Oct 23, 2026
142bf1f
perf(field,transcript): word-sized Fp128 decoding and transcript scalars
Acentelles Oct 23, 2026
8e8ec59
Define canonical big-endian bytes for transcript feature callers
Acentelles Oct 23, 2026
e79d6d9
Gate Solinas encoding tests before lint expectations
Acentelles Oct 24, 2026
c0722ae
perf(recursion): turn word decoding on by default
Acentelles Oct 24, 2026
c14ac93
perf(verifier): reuse instruction read RAF public inputs
Acentelles Oct 23, 2026
407e5de
style: rustfmt the instruction read RAF tests
Acentelles Oct 24, 2026
fb0c01a
Add opt-in RV64 word memory routines for recursion
Acentelles Oct 25, 2026
da9243b
Preserve assembler sections around word memory routines
Acentelles Oct 25, 2026
8ebf215
perf(recursion): turn word memory routines on by default
Acentelles Oct 25, 2026
ec01b72
build(akita): pin the recursion verifier changes on the Akita fork
Acentelles Oct 25, 2026
63c4870
perf(recursion): build the recursion verifier guest with inline-thres…
Acentelles Oct 25, 2026
7fe2a92
perf(recursion): raise the recursion verifier guest inline threshold …
Acentelles Oct 25, 2026
e50659d
perf(recursion): enable GVN hoisting and DFA jump threading in the re…
Acentelles Oct 26, 2026
1a48794
perf(recursion): use ExtTSP block placement without tail merging in t…
Acentelles Oct 26, 2026
85bee6f
test(jolt-sdk): skip the Dory verifier fixture test under akita
Acentelles Oct 26, 2026
81cbce4
perf(recursion): use size-oriented spill splitting in the recursion v…
Acentelles Oct 26, 2026
0d918f6
perf(recursion): disable the RISC-V register cost-per-use model in th…
Acentelles Oct 26, 2026
f769791
Forward optional no-carry tensor contractions to recursion guests
Acentelles Oct 26, 2026
f21f129
perf(recursion): turn no-carry tensor contractions on by default
Acentelles Oct 26, 2026
2269417
build(akita): pin the Akita fork commit that adds no-carry tensor con…
Acentelles Oct 26, 2026
4143970
build(akita): fetch the Akita pin from LayerZero-Labs/akita
Acentelles Oct 26, 2026
b39d733
perf(recursion): split every critical edge in PHI elimination in the …
Acentelles Oct 26, 2026
8ae4568
perf(field-inline): hold weighted-dot row pointers in registers (defa…
Acentelles Oct 27, 2026
cc468a0
fix(field-inline): wrap the weighted-dot block macro body in a block
Acentelles Oct 27, 2026
5139ab0
perf(recursion): hold the weighted-dot row pointers in registers by d…
Acentelles Oct 27, 2026
a0cfe88
perf(recursion): keep PHI-elimination live-out checks, eliminate spil…
Acentelles Oct 27, 2026
3248802
build(recursion): optionally leave unchanged generated guest sources …
Acentelles Oct 26, 2026
09be3a0
build(recursion): optional content-keyed cache for the verifier guest…
Acentelles Oct 26, 2026
535230e
fix(recursion): key the guest ELF cache on every CARGO_PROFILE_ and C…
Acentelles Oct 26, 2026
344e778
build(recursion): leave unchanged generated guest sources untouched b…
Acentelles Oct 27, 2026
544c206
build(recursion): key-only probe for the guest ELF cache
Acentelles Oct 27, 2026
c753cfa
perf(recursion): build the recursion verifier guest without debug inf…
Acentelles Oct 27, 2026
67ea298
perf(recursion): forward the optional tensor equality run feature to …
Acentelles Oct 27, 2026
8725312
style(recursion): one statement per line in the guest feature forwarding
Acentelles Oct 27, 2026
d79d7d6
perf(recursion): traverse constant-high equality runs by default in r…
Acentelles Oct 27, 2026
36af61c
build(akita): pin Akita to the tensor equality run accumulation
Acentelles Oct 27, 2026
d2f1ee5
perf(recursion): forward the optional structured setup-scan sums of p…
Acentelles Oct 27, 2026
f3bcd39
perf(recursion): sum the structured setup-scan contractions by defaul…
Acentelles Oct 27, 2026
cb77dfd
build(akita): pin Akita to the structured setup-scan sums of products
Acentelles Oct 27, 2026
adb3236
perf(recursion): add optional segment-setup and terminal-contraction …
Acentelles Oct 26, 2026
4a352ef
perf(recursion): evaluate the shared reduced setup scan by default in…
Acentelles Oct 27, 2026
541d91f
build(akita): pin Akita to the segment-setup scan
Acentelles Oct 27, 2026
da3a35c
perf(field-inline): evaluate geometric weighted dots by Horner's rule…
Acentelles Oct 27, 2026
4965780
test(field-inline): type the geometric-power recognition test by the …
Acentelles Oct 27, 2026
8cfd88c
style(field-inline): match formatter spacing in the weighted-dot kern…
Acentelles Oct 27, 2026
93ff4c2
perf(recursion): evaluate geometric weighted dots by Horner's rule by…
Acentelles Oct 27, 2026
ddd6e09
feat(verifier): evaluate stage claim expressions from optional precom…
Acentelles Oct 27, 2026
a54a989
Fix recipe macro lint violations
Acentelles Oct 27, 2026
1461a61
Fix recipe test panic and stale lint expectation
Acentelles Oct 27, 2026
9a60748
Place recipe macros before final test modules
Acentelles Oct 27, 2026
5bceb70
Place recursion recipe macros before the test module
Acentelles Oct 27, 2026
3f8d9ad
Enable syn visit-mut only with immutable recipes
Acentelles Oct 27, 2026
1115c30
Name the failing check in recipe Representation errors
Acentelles Oct 27, 2026
352b6d8
Format the named Representation errors
Acentelles Oct 27, 2026
2a1bfce
Report the relation tag and phase of an over-wide recipe term
Acentelles Oct 27, 2026
62030c6
Fall back to canonical evaluation for over-wide recipe keys
Acentelles Oct 27, 2026
843b956
Reject a recipe key seen both narrow and over-wide
Acentelles Oct 27, 2026
a30d67c
Format the fallback coverage check
Acentelles Oct 27, 2026
6669dc9
Write recipe coefficients as decimal strings in capture.json
Acentelles Oct 27, 2026
d7c5104
Emit generated recipe tables from an inline const slice
Acentelles Oct 27, 2026
0bc4d61
Format the inline-const table emitters
Acentelles Oct 27, 2026
9c43b4a
Generate recipe tables in process before the recursion guest build
Acentelles Oct 27, 2026
0fd87bc
Key the guest ELF cache on the recipe tables file contents
Acentelles Oct 27, 2026
4de139f
docs(recursion): add immutable-recipes to the recursion reproduce com…
Acentelles Oct 27, 2026
15398cf
fix(claims): define the CircuitFlags recipe ids in the Spartan flag c…
Acentelles Oct 27, 2026
f98eacd
style(recipes): use imported names for the immutable recipe paths
Acentelles Oct 27, 2026
48538b3
style(toml): taplo-format the jolt-akita, jolt-claims, jolt-transcrip…
Acentelles Oct 27, 2026
8247c90
test(fs): inventory the word-transcript append_scalars absorption site
Acentelles Oct 27, 2026
b84d8c0
style(toml): taplo-format the recursion example, its guest and jolt-s…
Acentelles Oct 27, 2026
29e90cc
style(recursion): import std::process::Command in the guest ELF cache…
Acentelles Oct 27, 2026
6d17a84
build(akita): move the Akita pin to bcc1f30c
Acentelles Oct 28, 2026
3029675
Keep the field-inline weighted dot and its kernel inline when termina…
Acentelles Oct 27, 2026
71ff0bb
Keep the Fp128 weighted dot product inline under terminal contraction
Acentelles Oct 27, 2026
2935327
feat(recursion): contract the terminal relations by default
Acentelles Oct 27, 2026
8fcd5b7
build(recursion): link the verifier guest with its main entry first i…
Acentelles Oct 28, 2026
c1a82e4
Rebuild the recursion guest's one-hot catalog view from a build-time …
Acentelles Oct 27, 2026
2c7731b
Instantiate the prevalidated catalog rebuild for the guest's own fami…
Acentelles Oct 27, 2026
dffd7d5
Make the recursion host's prevalidated catalog effective only with akita
Acentelles Oct 28, 2026
384f017
feat(recursion): rebuild the guest's catalog view from the host recor…
Acentelles Oct 28, 2026
4bfcf69
style(toml): taplo-format the prevalidated-catalog feature lists
Acentelles Oct 28, 2026
e42ad32
Add a default-off three-coefficient step to the Horner weighted dot
Acentelles Oct 28, 2026
f7905d7
feat(recursion): use the three-coefficient Horner step by default
Acentelles Oct 28, 2026
e78656c
style(jolt-field): rustfmt the terminal-contraction attribute lines
Acentelles Oct 28, 2026
c91de2f
style(jolt-akita): import the one-hot types in the host stub of the p…
Acentelles Oct 28, 2026
2b1dcb5
build(akita): move the Akita pin to b90491fa
Acentelles Oct 28, 2026
aa7207c
feat(recursion): add five default-off verifier guest features
Acentelles Oct 28, 2026
ff7b048
feat(recursion): turn the five verifier guest features on by default
Acentelles Oct 28, 2026
b1c26e9
style(jolt-field): end the fill-ingress forwarding call with a semicolon
Acentelles Oct 28, 2026
54b6c97
build(akita): move the Akita pin to b215e829
Acentelles Oct 28, 2026
c3b65ff
feat(recursion): add the default-off setup-lane-streams verifier gues…
Acentelles Oct 28, 2026
f6c72c3
feat(recursion): turn setup-lane-streams on by default
Acentelles Oct 28, 2026
261899c
fix(jolt-akita): align the embedded prevalidated catalog view to 8 bytes
Acentelles Oct 28, 2026
629e620
build(akita): move the Akita pin to d04bf51f
Acentelles Oct 29, 2026
8dd635e
feat(recursion): add the default-off carry-graph verifier guest feature
Acentelles Oct 29, 2026
9016407
feat(recursion): turn carry-graph on by default
Acentelles Oct 29, 2026
44ee1e6
build(akita): move the Akita pin to 9f778c0c
Acentelles Oct 29, 2026
db6506c
feat(recursion): add the default-off mle-leaf-tiles and signed-byte-s…
Acentelles Oct 29, 2026
b36d0c3
feat(recursion): turn mle-leaf-tiles and signed-byte-sum on by default
Acentelles Oct 29, 2026
0779e33
build(akita): move the Akita pin to 13128559
Acentelles Oct 29, 2026
15da2dd
feat(recursion): add the default-off setup-weight-tiles verifier gues…
Acentelles Oct 29, 2026
0565c9e
feat(recursion): add the default-off challenge-word-decode verifier g…
Acentelles Oct 29, 2026
372cee6
feat(recursion): turn setup-weight-tiles and challenge-word-decode on…
Acentelles Oct 29, 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
37 changes: 21 additions & 16 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 15 additions & 12 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -306,18 +306,21 @@ dory = { package = "dory-pcs", version = "0.4.2", features = [
"disk-persistence",
"zk",
] }
# LayerZero-Labs/akita branch markos/recursion-integration: akita cf95fd05
# (the revision Jolt main pins) plus the recursion verifier-guest PRs
# (LayerZero-Labs/akita#186-#190). Repin to akita main once those merge.
akita-algebra = { git = "https://github.com/LayerZero-Labs/akita.git", rev = "ee03aa30544caaa3f5f2948b222790b919e9b8e7", default-features = false }
akita-config = { git = "https://github.com/LayerZero-Labs/akita.git", rev = "ee03aa30544caaa3f5f2948b222790b919e9b8e7", default-features = false }
akita-error = { git = "https://github.com/LayerZero-Labs/akita.git", rev = "ee03aa30544caaa3f5f2948b222790b919e9b8e7", default-features = false }
akita-pcs = { git = "https://github.com/LayerZero-Labs/akita.git", rev = "ee03aa30544caaa3f5f2948b222790b919e9b8e7", default-features = false }
akita-planner = { git = "https://github.com/LayerZero-Labs/akita.git", rev = "ee03aa30544caaa3f5f2948b222790b919e9b8e7", default-features = false }
akita-schedules = { git = "https://github.com/LayerZero-Labs/akita.git", rev = "ee03aa30544caaa3f5f2948b222790b919e9b8e7", default-features = false }
akita-challenges = { git = "https://github.com/LayerZero-Labs/akita.git", rev = "ee03aa30544caaa3f5f2948b222790b919e9b8e7", default-features = false }
akita-types = { git = "https://github.com/LayerZero-Labs/akita.git", rev = "ee03aa30544caaa3f5f2948b222790b919e9b8e7", default-features = false }
akita-params = { git = "https://github.com/LayerZero-Labs/akita.git", rev = "ee03aa30544caaa3f5f2948b222790b919e9b8e7", default-features = false }
# Akita pin: commit 13128559, the previous pin 9f778c0c (d04bf51f plus the
# optional, default-off MLE leaf tiles and signed-byte challenge evaluation)
# plus the optional, default-off setup-weight tiles (setup-weight-tiles) and
# word-level challenge decode (challenge-word-decode), fetched from
# LayerZero-Labs/akita by hash. Repin to the merge commit on
# markos/recursion-integration once those changes land there.
akita-algebra = { git = "https://github.com/LayerZero-Labs/akita", rev = "13128559e8dd3cfba462e1789cc87f6d0b4f87ad", default-features = false }
akita-config = { git = "https://github.com/LayerZero-Labs/akita", rev = "13128559e8dd3cfba462e1789cc87f6d0b4f87ad", default-features = false }
akita-error = { git = "https://github.com/LayerZero-Labs/akita", rev = "13128559e8dd3cfba462e1789cc87f6d0b4f87ad", default-features = false }
akita-pcs = { git = "https://github.com/LayerZero-Labs/akita", rev = "13128559e8dd3cfba462e1789cc87f6d0b4f87ad", default-features = false }
akita-planner = { git = "https://github.com/LayerZero-Labs/akita", rev = "13128559e8dd3cfba462e1789cc87f6d0b4f87ad", default-features = false }
akita-schedules = { git = "https://github.com/LayerZero-Labs/akita", rev = "13128559e8dd3cfba462e1789cc87f6d0b4f87ad", default-features = false }
akita-challenges = { git = "https://github.com/LayerZero-Labs/akita", rev = "13128559e8dd3cfba462e1789cc87f6d0b4f87ad", default-features = false }
akita-types = { git = "https://github.com/LayerZero-Labs/akita", rev = "13128559e8dd3cfba462e1789cc87f6d0b4f87ad", default-features = false }
akita-params = { git = "https://github.com/LayerZero-Labs/akita", rev = "13128559e8dd3cfba462e1789cc87f6d0b4f87ad", default-features = false }

# Core Utilities
clap = { version = "4.6.1", features = ["derive"] }
Expand Down
50 changes: 50 additions & 0 deletions crates/jolt-akita/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,16 @@ description = "Akita batch opening adapter for the Jolt zkVM"
workspace = true

[features]
terminal-contraction = [
"akita-pcs/terminal-contraction",
"jolt-field/terminal-contraction",
]
segment-setup = ["akita-pcs/segment-setup"]
# Verifier features (default off): setup-scan errors built only on failure,
# prevalidated row digests copied without a zero fill, packed terminal z decode.
lazy-scan-errors = ["akita-pcs/lazy-scan-errors"]
digest-nozero = ["akita-schedules/digest-nozero"]
golomb-word = ["akita-types/golomb-word", "akita-params/golomb-word"]
default = ["parallel"]
# Akita's rayon-backed kernels and backend thread pool. A single-core zkVM
# guest builds without it; Jolt's own prover kernels in this crate still link
Expand All @@ -21,8 +31,48 @@ ntt-inline = ["akita-pcs/ntt-inline"]
keccak-inline = ["akita-pcs/keccak-inline"]
# Enables field-inline schedule coverage alongside the prover's field profile.
field-inline = []
# L2 terminal quotient certificate (recursion lever, default off): the
# terminal A rows are checked at two points against a sent quotient, under
# Akita protocol identifier v7-l2tq1.
l2-terminal-quotient = ["akita-pcs/l2-terminal-quotient"]
profiling = ["parallel"]
# L3 recursion experiment (default off): Akita evaluates the compression
# relation weights by factor (same field values; see akita-types).
l3-compression-weights = ["akita-types/l3-compression-weights"]

# Byte-preserving recursion experiments, default off.
word-transcript = ["jolt-transcript/word-transcript"]
word-decode = ["jolt-field/word-decode"]
ont-static-base = ["akita-challenges/ont-static-base"]
tensor-no-carry = ["akita-algebra/tensor-no-carry"]
tensor-eq-runs = ["akita-algebra/tensor-eq-runs"]
setup-sop-structured = ["akita-pcs/setup-sop-structured"]
# Prevalidated catalog (default off): the recursion guest rebuilds its one-hot catalog view
# from a build-time prevalidated record when the view bytes are equal.
prevalidated-catalog = [
"akita-config/prevalidated-catalog",
"akita-schedules/prevalidated-catalog",
]
# Verifier features (default off): direct flag-class index in the bytecode
# fold (Jolt), one scale ingress per bounded run in the Akita equality-window
# fill.
bytecode-fold = ["jolt-claims/bytecode-fold"]
fill-ingress = ["akita-algebra/fill-ingress", "jolt-field/fill-ingress"]
# Root setup scan by lane with hoisted row scales (default off; implies
# terminal-contraction on the Akita side).
setup-lane-streams = ["akita-pcs/setup-lane-streams"]
# Compiled carry-state graphs for the eq-pair tensor recurrences (default off).
carry-graph = ["akita-algebra/carry-graph"]
# Low-variable multilinear evaluation by fixed leaf tiles (default off).
mle-leaf-tiles = ["akita-pcs/mle-leaf-tiles"]
# Sparse challenge evaluation at powers through one signed-byte field sum
# (default off; enables jolt-field/signed-byte-sum on the Akita side).
signed-byte-sum = ["akita-pcs/signed-byte-sum"]
# Direct setup scan weights added by fixed tiles on field-register addition
# (default off; enables jolt-field/setup-weight-tiles on the Akita side).
setup-weight-tiles = ["akita-pcs/setup-weight-tiles"]
# Signed sparse challenges decoded from whole SHAKE output words (default off).
challenge-word-decode = ["akita-pcs/challenge-word-decode"]
[dependencies]
# Jolt keeps its own catalogs for Jolt-specific trace shapes; Akita's shipped
# catalogs do not cover this adapter's complete production and test grids.
Expand Down
18 changes: 17 additions & 1 deletion crates/jolt-akita/src/adapters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -817,7 +817,7 @@ impl AkitaVerifierSetup {
CatalogSource::Artifact(bytes) => {
AkitaOneHotBackendScheme::from_artifact(family, bytes)
}
CatalogSource::VerifierView(view) => {
#[rustfmt::skip] CatalogSource::VerifierView(view) => { #[cfg(feature = "prevalidated-catalog")] if let Some(scheme) = crate::prevalidated_catalog::one_hot_scheme(family, view) { return scheme; }
AkitaOneHotBackendScheme::from_verifier_view(family, view)
}
})
Expand Down Expand Up @@ -1525,6 +1525,22 @@ where
bridged_session
}

#[cfg(all(feature = "prevalidated-catalog", not(target_arch = "riscv64")))]
impl AkitaVerifierSetup {
/// Host: the source of the prevalidated one-hot catalog file for a guest
/// that embeds this setup (see the `prevalidated_catalog` module). Needs
/// this setup's prepared one-hot verifier view (payloads attached).
pub fn prevalidated_catalog_source(&self) -> Result<String, String> {
let CatalogSource::VerifierView(view) = self.catalog_source(AkitaBackendFlavor::OneHot)?
else {
return Err("the one-hot catalog is not a prepared verifier view".to_owned());
};
let family = OneHotFamily::from_parts(self.one_hot_k, self.akita_chunk_profile())
.map_err(|error| error.to_string())?;
crate::prevalidated_catalog::render(family, view).map_err(|error| error.to_string())
}
}

#[cfg(test)]
mod tests {
#![expect(
Expand Down
8 changes: 8 additions & 0 deletions crates/jolt-akita/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,11 @@ pub use trace_onehot::{no_selected_row, TraceOneHotColumn, TraceOneHotRows};
/// backend use the exact transform the adapter uses.
#[doc(hidden)]
pub use adapters::{jolt_to_akita_evals, jolt_to_akita_index, reverse_point};

#[cfg(feature = "carry-graph")]
pub use akita_algebra::offset_eq::carry_graph;

#[cfg(feature = "prevalidated-catalog")]
mod prevalidated_catalog;
#[cfg(feature = "prevalidated-catalog")]
pub use prevalidated_catalog::{EMPTY_PREVALIDATED_CATALOG_SOURCE, PREVALIDATED_CATALOG_VARIABLE};
Loading
Loading