Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
48 changes: 48 additions & 0 deletions Cargo.lock

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

8 changes: 8 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ members = [
"crates/jolt-transcript",
"crates/jolt-witness",
"crates/bolt",
"crates/jolt-kernels",
"crates/jolt-prover",
"crates/jolt-verifier",
"crates/jolt-profiling",
"crates/jolt-field",
"jolt-core",
Expand Down Expand Up @@ -379,6 +382,8 @@ common = { path = "./common", default-features = false }
tracer = { path = "./tracer", default-features = false }
jolt-core = { path = "./jolt-core", default-features = false }
jolt-crypto = { path = "./crates/jolt-crypto" }
jolt-dory = { path = "./crates/jolt-dory" }
jolt-hyperkzg = { path = "./crates/jolt-hyperkzg" }
jolt-field = { path = "./crates/jolt-field" }
jolt-openings = { path = "./crates/jolt-openings" }
jolt-poly = { path = "./crates/jolt-poly" }
Expand All @@ -387,6 +392,9 @@ jolt-sumcheck = { path = "./crates/jolt-sumcheck" }
jolt-r1cs = { path = "./crates/jolt-r1cs" }
jolt-witness = { path = "./crates/jolt-witness" }
bolt = { path = "./crates/bolt" }
jolt-kernels = { path = "./crates/jolt-kernels" }
jolt-prover = { path = "./crates/jolt-prover" }
jolt-verifier = { path = "./crates/jolt-verifier" }
jolt-riscv = { path = "./crates/jolt-riscv", default-features = false }
jolt-program = { path = "./crates/jolt-program", default-features = false }
jolt-lookup-tables = { path = "./crates/jolt-lookup-tables" }
Expand Down
9 changes: 9 additions & 0 deletions crates/bolt/src/emit/rust/artifacts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -426,9 +426,18 @@ fn generated_crate(
path: format!("src/stages/{}.rs", artifact.stage.module_name()),
source: artifact.source.source,
}));
for file in &mut files {
file.source = normalized_generated_source(&file.source);
}
GeneratedCrate { crate_name, files }
}

fn normalized_generated_source(source: &str) -> String {
let mut normalized = source.trim_end_matches(char::is_whitespace).to_owned();
normalized.push('\n');
normalized
}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
enum ManifestMode<'a> {
Standalone { dependency_root: &'a str },
Expand Down
8 changes: 4 additions & 4 deletions crates/bolt/src/protocols/jolt/artifacts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -322,8 +322,8 @@ pub use verifier::{
verify_jolt_through_stage6_with_programs, verify_jolt_through_stage7,
verify_jolt_through_stage7_with_programs, verify_jolt_with_programs, JoltEvaluationProof,
JoltEvaluationProofError, JoltNamedEval, JoltProof, JoltStage2RamAccess, JoltStage2RamData,
JoltStage2RamOutputLayout, JoltStageChallengeVector, JoltStageExecutionArtifacts,
JoltStage6BytecodeEntry, JoltStage6BytecodeReadRafData, JoltStage6VerifierData,
JoltStage2RamOutputLayout, JoltStage6BytecodeEntry, JoltStage6BytecodeReadRafData,
JoltStage6VerifierData, JoltStageChallengeVector, JoltStageExecutionArtifacts,
JoltStageOpeningInputValue, JoltStageProof, JoltSumcheckOutput, JoltVerificationArtifacts,
JoltVerifierInputs, JoltVerifierPrograms, JoltVerifierTarget, JoltVerifyError,
};"
Expand All @@ -337,7 +337,7 @@ fn jolt_evaluation_role_api_extension() -> ProtocolArtifactExtension {
required_artifact_stages: vec!["stage8".to_owned()],
prover: ProtocolProverApiExtension {
lib_module: jolt_prover_lib_module(),
imports: "#![expect(\n clippy::too_many_arguments,\n reason = \"generated prover helpers mirror staged protocol ABIs\"\n)]\n\nuse jolt_dory::{DoryCommitment, DoryHint, DoryProverSetup, DoryScheme};\nuse jolt_field::{Field, Fr};\nuse jolt_kernels::{stage1, stage2, stage3, stage4, stage5, stage6, stage7};\nuse jolt_openings::{AdditivelyHomomorphic, CommitmentScheme};\nuse jolt_poly::{EqPolynomial, Polynomial};\nuse jolt_transcript::{AppendToTranscript, Blake2bTranscript, LabelWithCount, Transcript};\nuse jolt_verifier::{JoltEvaluationProof, JoltNamedEval, JoltProof, JoltStage2RamAccess, JoltStage2RamData, JoltStage2RamOutputLayout, JoltStage6BytecodeEntry, JoltStage6BytecodeReadRafData, JoltStage6VerifierData, JoltStageChallengeVector, JoltStageExecutionArtifacts, JoltStageOpeningInputValue, JoltStageProof, JoltSumcheckOutput};\nuse jolt_witness::{stage4_ram_val_init_opening, CycleInput, Stage45SparseTraceWitness, Stage6BytecodeEntry as WitnessStage6BytecodeEntry, Stage6WitnessParams, Stage6WitnessPolynomials, Stage6WitnessSlices};\nuse rayon::prelude::*;\n\n".to_owned(),
imports: "#![expect(\n clippy::too_many_arguments,\n reason = \"generated prover helpers mirror staged protocol ABIs\"\n)]\n\nuse jolt_dory::{DoryCommitment, DoryHint, DoryProverSetup, DoryScheme};\nuse jolt_field::Fr;\nuse jolt_kernels::{stage1, stage2, stage3, stage4, stage5, stage6, stage7};\nuse jolt_openings::{AdditivelyHomomorphic, CommitmentScheme};\nuse jolt_poly::{EqPolynomial, Polynomial};\nuse jolt_transcript::{AppendToTranscript, Blake2bTranscript, LabelWithCount, Transcript};\nuse jolt_verifier::{JoltEvaluationProof, JoltNamedEval, JoltProof, JoltStage2RamAccess, JoltStage2RamData, JoltStage2RamOutputLayout, JoltStage6BytecodeEntry, JoltStage6BytecodeReadRafData, JoltStage6VerifierData, JoltStageChallengeVector, JoltStageExecutionArtifacts, JoltStageOpeningInputValue, JoltStageProof, JoltSumcheckOutput};\nuse jolt_witness::{stage4_ram_val_init_opening, CycleInput, Stage45SparseTraceWitness, Stage6BytecodeEntry as WitnessStage6BytecodeEntry, Stage6WitnessParams, Stage6WitnessPolynomials, Stage6WitnessSlices};\nuse rayon::prelude::*;\n\n".to_owned(),
input_fields:
" pub stage7_openings: Option<&'a [stage7::Stage7OpeningInputValue<Fr>]>,\n"
.to_owned(),
Expand All @@ -357,7 +357,7 @@ fn jolt_evaluation_role_api_extension() -> ProtocolArtifactExtension {
},
verifier: ProtocolVerifierApiExtension {
lib_module: jolt_verifier_lib_module(),
imports: "use std::collections::BTreeMap;\n\nuse jolt_dory::{DoryCommitment, DoryProof, DoryScheme, DoryVerifierSetup};\nuse jolt_field::{Field, Fr};\nuse jolt_openings::{AdditivelyHomomorphic, CommitmentScheme, OpeningsError};\nuse jolt_poly::EqPolynomial;\nuse jolt_transcript::{AppendToTranscript, LabelWithCount, Transcript};\n".to_owned(),
imports: "use std::collections::BTreeMap;\n\nuse jolt_dory::{DoryCommitment, DoryProof, DoryScheme, DoryVerifierSetup};\nuse jolt_field::Fr;\nuse jolt_openings::{AdditivelyHomomorphic, CommitmentScheme, OpeningsError};\nuse jolt_poly::EqPolynomial;\nuse jolt_transcript::{AppendToTranscript, LabelWithCount, Transcript};\n".to_owned(),
proof_fields: " pub evaluation: Option<JoltEvaluationProof>,\n".to_owned(),
proof_items: "pub type JoltStage2RamAccess = crate::stages::stage2::Stage2RamAccess;\npub type JoltStage2RamOutputLayout = crate::stages::stage2::Stage2RamOutputLayout;\npub type JoltStage2RamData<'a> = crate::stages::stage2::Stage2RamData<'a>;\npub type JoltStageChallengeVector = crate::stages::common::StageChallengeVector<Fr>;\npub type JoltStageExecutionArtifacts = crate::stages::common::StageExecutionArtifacts<Fr>;\npub type JoltStageOpeningInputValue = crate::stages::common::StageOpeningInputValue<Fr>;\n\n#[derive(Clone, Debug)]\npub struct JoltEvaluationProof {\n pub joint_opening_proof: DoryProof,\n}\n\n".to_owned(),
inputs_derive: Some("#[derive(Clone, Copy)]".to_owned()),
Expand Down
18 changes: 13 additions & 5 deletions crates/bolt/src/protocols/jolt/emit/rust/commitment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ impl CommitmentCpuProgram {
"use std::borrow::Cow;\n\
\n\
use jolt_dory::{DoryCommitment, DoryHint, DoryProverSetup, DoryScheme};\n\
use jolt_field::{Field, Fr};\n\
use jolt_field::Fr;\n\
use jolt_openings::CommitmentScheme as _;\n\
use jolt_poly::{EqPolynomial, MultilinearPoly};\n\
use jolt_transcript::{AppendToTranscript, Blake2bTranscript, LabelWithCount, Transcript};\n\
Expand Down Expand Up @@ -540,13 +540,13 @@ impl MultilinearPoly<Fr> for AddressMajorOneHotPolynomial {
result
}

fn is_sparse(&self) -> bool {
fn is_one_hot(&self) -> bool {
true
}

fn for_each_nonzero(&self, f: &mut dyn FnMut(usize, Fr)) {
fn for_each_one(&self, f: &mut dyn FnMut(usize)) {
for flat in self.nonzero_flat_indices() {
f(flat, Fr::from_u64(1));
f(flat);
}
}
}
Expand Down Expand Up @@ -908,6 +908,14 @@ impl Default for OneHotChunkCounts {
}
}
}
let input_binding = if initializers
.iter()
.any(|initializer| initializer.contains("inputs."))
{
"inputs"
} else {
"_inputs"
};
let fields = fields.join("\n");
let provider_arms = provider_arms.join("\n");
let initializers = initializers.join("\n");
Expand All @@ -930,7 +938,7 @@ impl CommitmentInputProvider for CommitmentOracles {{
}}

pub fn build_commitment_oracles(
inputs: &CommitmentOracleInputs<'_>,
{input_binding}: &CommitmentOracleInputs<'_>,
) -> Result<CommitmentOracles, CommitmentPhaseError> {{
Ok(CommitmentOracles {{
{initializers}
Expand Down
2 changes: 1 addition & 1 deletion crates/bolt/src/protocols/jolt/emit/rust/stage1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1067,7 +1067,7 @@ impl Stage1CpuProgram {

fn emit_verifier_imports() -> &'static str {
"use super::common::append_labeled_scalar;\n\
use jolt_field::{Field, Fr};\n\
use jolt_field::Fr;\n\
use jolt_sumcheck::{CompressedLabeledRoundPoly, LabeledRoundPoly, SumcheckClaim, SumcheckError, SumcheckVerifier};\n\
use jolt_transcript::{Blake2bTranscript, Transcript};"
}
Expand Down
2 changes: 1 addition & 1 deletion crates/bolt/src/protocols/jolt/emit/rust/stage2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -927,7 +927,7 @@ impl Stage2CpuProgram {

fn emit_verifier_imports() -> &'static str {
"use super::common::{append_labeled_scalar, batch_claims, eval_by_name, find_batch, find_plan, pow_field, require_operand_count, reverse_slice, single_operand};\n\
use jolt_field::{Field, Fr};\n\
use jolt_field::{Field, Fr, MulPow2, MulPrimitiveInt, RingCore};\n\
use jolt_poly::lagrange::{lagrange_evals, lagrange_kernel_eval};\n\
use jolt_poly::{EqPolynomial, UnivariatePoly};\n\
use jolt_sumcheck::{CompressedLabeledRoundPoly, SumcheckClaim, SumcheckError, SumcheckVerifier};\n\
Expand Down
2 changes: 1 addition & 1 deletion crates/bolt/src/protocols/jolt/emit/rust/stage5.rs
Original file line number Diff line number Diff line change
Expand Up @@ -964,7 +964,7 @@ impl Stage5CpuProgram {

fn emit_verifier_imports() -> &'static str {
"use super::common::{batch_claims, eval_by_name, find_batch, find_plan, identity_polynomial_eval, indexed_evals_by_prefix, indexed_evals_by_prefix_any, lt_polynomial_eval, normalize_instruction_read_raf_point, operand_polynomial_eval, reverse_slice, suffix_point};\n\
use jolt_field::{Field, Fr};\n\
use jolt_field::{Field, Fr, RingCore};\n\
use jolt_lookup_tables::LookupTableKind;\n\
use jolt_poly::EqPolynomial;\n\
use jolt_sumcheck::SumcheckError;\n\
Expand Down
2 changes: 1 addition & 1 deletion crates/bolt/src/protocols/jolt/emit/rust/stage7.rs
Original file line number Diff line number Diff line change
Expand Up @@ -985,7 +985,7 @@ impl Stage7CpuProgram {

fn emit_verifier_imports() -> &'static str {
"use super::common::{batch_claims, eval_by_name, find_batch, find_plan, normalize_bytecode_read_raf_point, normalize_instruction_read_raf_point, reverse_slice};\n\
use jolt_field::{Field, Fr};\n\
use jolt_field::{Field, Fr, RingCore};\n\
use jolt_poly::EqPolynomial;\n\
use jolt_sumcheck::SumcheckError;\n\
use jolt_transcript::{Blake2bTranscript, LabelWithCount, Transcript};"
Expand Down
2 changes: 1 addition & 1 deletion crates/bolt/src/protocols/jolt/params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ impl JoltProtocolParams {
lookups_ra_virtual_log_k_chunk,
instruction_log_k,
register_log_k: 7,
lookup_table_count: 40,
lookup_table_count: 41,
instruction_d,
instruction_ra_virtual_d,
bytecode_d,
Expand Down
2 changes: 1 addition & 1 deletion crates/bolt/src/protocols/jolt/verifier_common.rs.template
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
reason = "generated verifier helpers mirror staged protocol ABIs"
)]

use jolt_field::{Field, Fr};
use jolt_field::{Field, Fr, MulPow2, RingCore};
use jolt_poly::EqPolynomial;
use jolt_sumcheck::{
CompressedLabeledRoundPoly, SumcheckClaim, SumcheckError, SumcheckProof, SumcheckVerifier,
Expand Down
41 changes: 26 additions & 15 deletions crates/bolt/tests/commitment_ir.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1417,8 +1417,8 @@ fn stage5_rust_targets_extract_and_compile() {
assert!(verifier_source
.source
.contains("jolt.stage5.registers_val_evaluation"));
assert!(verifier_source.source.contains("LookupTableFlag_39"));
assert!(!verifier_source.source.contains("LookupTableFlag_40"));
assert!(verifier_source.source.contains("LookupTableFlag_40"));
assert!(!verifier_source.source.contains("LookupTableFlag_41"));
assert!(verifier_source
.source
.contains("stage5.instruction_read_raf.eval.InstructionRa_7"));
Expand Down Expand Up @@ -1453,7 +1453,7 @@ fn stage6_rust_targets_extract_and_compile() {
assert_eq!(prover_program.steps.len(), 10);
assert_eq!(prover_program.transcript_squeezes.len(), 9);
assert!(prover_program.transcript_absorb_bytes.is_empty());
assert_eq!(prover_program.opening_inputs.len(), 90);
assert_eq!(prover_program.opening_inputs.len(), 91);
assert!(prover_program.field_exprs.len() > 150);
assert_eq!(prover_program.field_constants.len(), 1);
assert!(prover_program.opening_equalities.is_empty());
Expand Down Expand Up @@ -3169,11 +3169,11 @@ fn assert_rust_source_compiles(_filename: &str, source: &str) {
.expect("write generated cargo manifest");
std::fs::create_dir_all(dir.join("src")).expect("create generated src dir");
if source.contains("super::common") {
let common = std::fs::read_to_string(
workspace_root.join("crates/jolt-verifier/src/stages/common.rs"),
std::fs::write(
dir.join("src/common.rs"),
generated_verifier_common_source(&workspace_root),
)
.expect("read generated verifier common stage source");
std::fs::write(dir.join("src/common.rs"), common).expect("write generated common source");
.expect("write generated common source");
std::fs::write(dir.join("src/generated.rs"), source).expect("write generated source");
std::fs::write(
dir.join("src/lib.rs"),
Expand Down Expand Up @@ -3445,10 +3445,20 @@ fn assert_generated_jolt_chain_self_parity_runs(files: &[&RustSourceFile], main_
}

fn write_verifier_common_module(src_dir: &Path, workspace_root: &Path) {
std::fs::write(
src_dir.join("common.rs"),
generated_verifier_common_source(workspace_root),
)
.expect("write generated common source");
}

fn generated_verifier_common_source(workspace_root: &Path) -> String {
let common =
std::fs::read_to_string(workspace_root.join("crates/jolt-verifier/src/stages/common.rs"))
.expect("read generated verifier common stage source");
std::fs::write(src_dir.join("common.rs"), common).expect("write generated common source");
format!(
"#![allow(dead_code, unused_imports, unused_macros, reason = \"generated verifier helpers are shared across generated stage subsets\")]\n{common}"
)
}

fn workspace_root() -> std::path::PathBuf {
Expand Down Expand Up @@ -3538,7 +3548,7 @@ mod verify_commitment_phase;
use std::borrow::Cow;

use jolt_dory::DoryScheme;
use jolt_field::{Field, Fr};
use jolt_field::Fr;
use jolt_transcript::{Blake2bTranscript, Transcript};

struct Inputs;
Expand Down Expand Up @@ -3600,7 +3610,7 @@ fn generated_pipeline_self_parity_main() -> String {
mod verify_commitment_phase;

use jolt_dory::DoryScheme;
use jolt_field::{Field, Fr};
use jolt_field::Fr;
use jolt_transcript::{Blake2bTranscript, Transcript};

"
Expand Down Expand Up @@ -3663,7 +3673,7 @@ fn generated_stage1_shape_self_parity_main() -> String {
let mut source = r"mod prove_stage1_outer;
mod verify_stage1_outer;

use jolt_field::{Field, Fr};
use jolt_field::Fr;
use jolt_kernels::stage1::Stage1ShapeKernelExecutor;
use jolt_transcript::{Blake2bTranscript, Transcript};

Expand Down Expand Up @@ -3768,7 +3778,7 @@ fn generated_stage1_real_dispatch_main() -> &'static str {
r#"mod prove_stage1_outer;
mod verify_stage1_outer;

use jolt_field::{Field, Fr};
use jolt_field::Fr;
use jolt_kernels::stage1::{
Stage1KernelError, Stage1ProverInputs, Stage1ProverKernelExecutor,
};
Expand Down Expand Up @@ -3829,7 +3839,7 @@ fn generated_stage1_synthetic_remaining_main() -> String {
let mut source = r"mod prove_stage1_outer;
mod verify_stage1_outer;

use jolt_field::{Field, Fr};
use jolt_field::Fr;
use jolt_kernels::stage1::{
Stage1OuterRemainingContext, Stage1OuterRemainingEvaluator, Stage1ProverInputs,
Stage1ProverKernelExecutor,
Expand Down Expand Up @@ -3969,7 +3979,7 @@ fn generated_stage1_r1cs_data_main() -> String {
let mut source = r"mod prove_stage1_outer;
mod verify_stage1_outer;

use jolt_field::{Field, Fr};
use jolt_field::Fr;
use jolt_kernels::stage1::{
Stage1OuterR1csData, Stage1ProverInputs, Stage1ProverKernelExecutor,
};
Expand Down Expand Up @@ -4039,7 +4049,7 @@ mod verify_commitment_phase;
mod verify_stage1_outer;

use jolt_dory::DoryScheme;
use jolt_field::{Field, Fr};
use jolt_field::Fr;
use jolt_kernels::stage1::{
Stage1OuterRemainingContext, Stage1OuterRemainingEvaluator, Stage1ProverInputs,
Stage1ProverKernelExecutor,
Expand Down Expand Up @@ -4178,6 +4188,7 @@ impl Transcript for TracingTranscript {
}
}

#[allow(dead_code)]
fn assert_transcript_step_parity(prover: &TracingTranscript, verifier: &TracingTranscript) {
assert_eq!(prover.events, verifier.events);
assert_eq!(prover.state(), verifier.state());
Expand Down
2 changes: 1 addition & 1 deletion crates/jolt-crypto/benches/crypto.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
use jolt_crypto::{
Bn254, Bn254G1, Bn254G2, JoltGroup, PairingGroup, Pedersen, PedersenSetup, VectorCommitment,
};
use jolt_field::{Fr, FromPrimitiveInt, RandomSampling};
use jolt_field::{Fr, RandomSampling};
use rand_chacha::ChaCha20Rng;
use rand_core::SeedableRng;

Expand Down
Loading