Skip to content

Commit 00d50a2

Browse files
committed
Remove VerifierState from state manager
1 parent 7177860 commit 00d50a2

File tree

19 files changed

+516
-772
lines changed

19 files changed

+516
-772
lines changed

jolt-core/src/zkvm/bytecode/mod.rs

Lines changed: 7 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
1-
use crate::poly::opening_proof::{
2-
OpeningAccumulator, ProverOpeningAccumulator, SumcheckId, VerifierOpeningAccumulator,
3-
};
1+
use crate::poly::opening_proof::{OpeningAccumulator, ProverOpeningAccumulator, SumcheckId};
42
use crate::subprotocols::sumcheck_prover::SumcheckInstanceProver;
5-
use crate::subprotocols::sumcheck_verifier::SumcheckInstanceVerifier;
63
use crate::subprotocols::{
74
BooleanitySumcheckParams, BooleanitySumcheckProver, BooleanitySumcheckVerifier,
85
HammingWeightSumcheckParams, HammingWeightSumcheckProver, HammingWeightSumcheckVerifier,
96
};
107
use crate::utils::math::Math;
118
#[cfg(feature = "allocative")]
129
use crate::utils::profiling::print_data_structure_heap_usage;
13-
use crate::zkvm::bytecode::read_raf_checking::{ReadRafSumcheckProver, ReadRafSumcheckVerifier};
14-
use crate::zkvm::dag::stage::{SumcheckStagesProver, SumcheckStagesVerifier};
10+
use crate::zkvm::bytecode::read_raf_checking::ReadRafSumcheckProver;
11+
use crate::zkvm::dag::stage::SumcheckStagesProver;
1512
use crate::zkvm::dag::state_manager::StateManager;
1613
use crate::zkvm::witness::{
1714
compute_d_parameter, CommittedPolynomial, VirtualPolynomial, DTH_ROOT_OF_K,
@@ -168,27 +165,6 @@ impl<F: JoltField, PCS: CommitmentScheme<Field = F>, T: Transcript> SumcheckStag
168165
}
169166
}
170167

171-
pub struct BytecodeDagVerifier;
172-
173-
impl<F: JoltField, PCS: CommitmentScheme<Field = F>, T: Transcript>
174-
SumcheckStagesVerifier<F, T, PCS> for BytecodeDagVerifier
175-
{
176-
fn stage6_instances(
177-
&mut self,
178-
sm: &mut StateManager<'_, F, PCS>,
179-
opening_accumulator: &mut VerifierOpeningAccumulator<F>,
180-
transcript: &mut T,
181-
) -> Vec<Box<dyn SumcheckInstanceVerifier<F, T>>> {
182-
let read_checking = ReadRafSumcheckVerifier::gen(sm, opening_accumulator, transcript);
183-
let (hamming_weight, booleanity) = new_ra_one_hot_verifiers(sm, transcript);
184-
vec![
185-
Box::new(read_checking),
186-
Box::new(hamming_weight),
187-
Box::new(booleanity),
188-
]
189-
}
190-
}
191-
192168
fn gen_ra_one_hot_provers<F: JoltField>(
193169
state_manager: &mut StateManager<'_, F, impl CommitmentScheme<Field = F>>,
194170
opening_accumulator: &ProverOpeningAccumulator<F>,
@@ -247,17 +223,15 @@ fn gen_ra_one_hot_provers<F: JoltField>(
247223
)
248224
}
249225

250-
fn new_ra_one_hot_verifiers<F: JoltField>(
251-
state_manager: &mut StateManager<'_, F, impl CommitmentScheme<Field = F>>,
226+
pub fn new_ra_one_hot_verifiers<F: JoltField>(
227+
bytecode_preprocessing: &BytecodePreprocessing,
228+
n_cycle_vars: usize,
252229
transcript: &mut impl Transcript,
253230
) -> (
254231
HammingWeightSumcheckVerifier<F>,
255232
BooleanitySumcheckVerifier<F>,
256233
) {
257-
let (preprocessing, _, T_val) = state_manager.get_verifier_data();
258-
let bytecode_preprocessing = &preprocessing.shared.bytecode;
259234
let d = bytecode_preprocessing.d;
260-
let log_t = T_val.log_2();
261235
let polynomial_types: Vec<CommittedPolynomial> =
262236
(0..d).map(CommittedPolynomial::BytecodeRa).collect();
263237
let hamming_weight_gamma_powers = transcript.challenge_scalar_powers(d);
@@ -279,7 +253,7 @@ fn new_ra_one_hot_verifiers<F: JoltField>(
279253
let booleanity_params = BooleanitySumcheckParams {
280254
d,
281255
log_k_chunk: DTH_ROOT_OF_K.log_2(),
282-
log_t,
256+
log_t: n_cycle_vars,
283257
gammas: booleanity_gammas,
284258
r_address,
285259
r_cycle: Vec::new(),

jolt-core/src/zkvm/bytecode/read_raf_checking.rs

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use crate::{
2626
transcripts::Transcript,
2727
utils::{math::Math, small_scalar::SmallScalar, thread::unsafe_allocate_zero_vec},
2828
zkvm::{
29+
bytecode::BytecodePreprocessing,
2930
dag::state_manager::StateManager,
3031
instruction::{
3132
CircuitFlags, Flags, InstructionFlags, InstructionLookup, InterleavedBitsMarker,
@@ -42,7 +43,7 @@ use common::constants::{REGISTER_COUNT, XLEN};
4243
use itertools::{chain, zip_eq, Itertools};
4344
use rayon::prelude::*;
4445
use strum::{EnumCount, IntoEnumIterator};
45-
use tracer::instruction::NormalizedInstruction;
46+
use tracer::instruction::{Instruction, NormalizedInstruction};
4647

4748
/// Number of batched read-checking sumchecks bespokely
4849
const N_STAGES: usize = 5;
@@ -127,7 +128,14 @@ impl<F: JoltField> ReadRafSumcheckProver<F> {
127128
opening_accumulator: &ProverOpeningAccumulator<F>,
128129
transcript: &mut impl Transcript,
129130
) -> Self {
130-
let params = ReadRafSumcheckParams::gen(state_manager, opening_accumulator, transcript);
131+
let (preprocessing, _, trace, _, _) = state_manager.get_prover_data();
132+
133+
let params = ReadRafSumcheckParams::gen(
134+
&preprocessing.shared.bytecode,
135+
trace.len().log_2(),
136+
opening_accumulator,
137+
transcript,
138+
);
131139

132140
let claim_per_stage = [
133141
params.rv_claims[0] + params.gamma_powers[5] * params.raf_claim,
@@ -146,7 +154,6 @@ impl<F: JoltField> ReadRafSumcheckProver<F> {
146154
.each_ref()
147155
.map(|r_cycle| EqPolynomial::evals(&r_cycle[..prefix_n_vars]));
148156

149-
let (preprocessing, _, trace, _, _) = state_manager.get_prover_data();
150157
let F = trace
151158
.par_chunks(chunk_size)
152159
.enumerate()
@@ -521,12 +528,18 @@ pub struct ReadRafSumcheckVerifier<F: JoltField> {
521528

522529
impl<F: JoltField> ReadRafSumcheckVerifier<F> {
523530
pub fn gen(
524-
state_manager: &mut StateManager<'_, F, impl CommitmentScheme<Field = F>>,
531+
bytecode_preprocessing: &BytecodePreprocessing,
532+
n_cycle_vars: usize,
525533
opening_accumulator: &VerifierOpeningAccumulator<F>,
526534
transcript: &mut impl Transcript,
527535
) -> Self {
528536
Self {
529-
params: ReadRafSumcheckParams::gen(state_manager, opening_accumulator, transcript),
537+
params: ReadRafSumcheckParams::gen(
538+
bytecode_preprocessing,
539+
n_cycle_vars,
540+
opening_accumulator,
541+
transcript,
542+
),
530543
}
531544
}
532545
}
@@ -643,43 +656,43 @@ struct ReadRafSumcheckParams<F: JoltField> {
643656

644657
impl<F: JoltField> ReadRafSumcheckParams<F> {
645658
fn gen(
646-
state_manager: &mut StateManager<'_, F, impl CommitmentScheme<Field = F>>,
659+
bytecode_preprocessing: &BytecodePreprocessing,
660+
n_cycle_vars: usize,
647661
opening_accumulator: &dyn OpeningAccumulator<F>,
648662
transcript: &mut impl Transcript,
649663
) -> Self {
650-
let preprocessing = state_manager.get_shared_preprocessing();
651-
let K = preprocessing.bytecode.code_size;
664+
let K = bytecode_preprocessing.code_size;
652665
let log_K = K.log_2();
653-
let d = preprocessing.bytecode.d;
654-
let log_T = state_manager.get_trace_len().log_2();
666+
let d = bytecode_preprocessing.d;
655667
let gamma_powers = transcript.challenge_scalar_powers(7);
656668

669+
let bytecode = &bytecode_preprocessing.bytecode;
657670
let (val_1, rv_claim_1) = Self::compute_val_rv(
658-
state_manager,
671+
bytecode,
659672
opening_accumulator,
660673
ReadCheckingValType::Stage1,
661674
transcript,
662675
);
663676
let (val_2, rv_claim_2) = Self::compute_val_rv(
664-
state_manager,
677+
bytecode,
665678
opening_accumulator,
666679
ReadCheckingValType::Stage2,
667680
transcript,
668681
);
669682
let (val_3, rv_claim_3) = Self::compute_val_rv(
670-
state_manager,
683+
bytecode,
671684
opening_accumulator,
672685
ReadCheckingValType::Stage3,
673686
transcript,
674687
);
675688
let (val_4, rv_claim_4) = Self::compute_val_rv(
676-
state_manager,
689+
bytecode,
677690
opening_accumulator,
678691
ReadCheckingValType::Stage4,
679692
transcript,
680693
);
681694
let (val_5, rv_claim_5) = Self::compute_val_rv(
682-
state_manager,
695+
bytecode,
683696
opening_accumulator,
684697
ReadCheckingValType::Stage5,
685698
transcript,
@@ -747,7 +760,7 @@ impl<F: JoltField> ReadRafSumcheckParams<F> {
747760
K,
748761
log_K,
749762
d,
750-
log_T,
763+
log_T: n_cycle_vars,
751764
val_polys,
752765
rv_claims,
753766
raf_claim,
@@ -758,7 +771,7 @@ impl<F: JoltField> ReadRafSumcheckParams<F> {
758771
}
759772

760773
fn compute_val_rv(
761-
sm: &mut StateManager<F, impl CommitmentScheme<Field = F>>,
774+
bytecode: &[Instruction],
762775
opening_accumulator: &dyn OpeningAccumulator<F>,
763776
val_type: ReadCheckingValType,
764777
transcript: &mut impl Transcript,
@@ -767,35 +780,35 @@ impl<F: JoltField> ReadRafSumcheckParams<F> {
767780
ReadCheckingValType::Stage1 => {
768781
let gamma_powers = transcript.challenge_scalar_powers(2 + NUM_CIRCUIT_FLAGS);
769782
(
770-
Self::compute_val_1(sm, &gamma_powers),
783+
Self::compute_val_1(bytecode, &gamma_powers),
771784
Self::compute_rv_claim_1(opening_accumulator, &gamma_powers),
772785
)
773786
}
774787
ReadCheckingValType::Stage2 => {
775788
let gamma_powers = transcript.challenge_scalar_powers(4);
776789
(
777-
Self::compute_val_2(sm, &gamma_powers),
790+
Self::compute_val_2(bytecode, &gamma_powers),
778791
Self::compute_rv_claim_2(opening_accumulator, &gamma_powers),
779792
)
780793
}
781794
ReadCheckingValType::Stage3 => {
782795
let gamma_powers = transcript.challenge_scalar_powers(9);
783796
(
784-
Self::compute_val_3(sm, &gamma_powers),
797+
Self::compute_val_3(bytecode, &gamma_powers),
785798
Self::compute_rv_claim_3(opening_accumulator, &gamma_powers),
786799
)
787800
}
788801
ReadCheckingValType::Stage4 => {
789802
let gamma_powers = transcript.challenge_scalar_powers(3);
790803
(
791-
Self::compute_val_4(sm, opening_accumulator, &gamma_powers),
804+
Self::compute_val_4(bytecode, opening_accumulator, &gamma_powers),
792805
Self::compute_rv_claim_4(opening_accumulator, &gamma_powers),
793806
)
794807
}
795808
ReadCheckingValType::Stage5 => {
796809
let gamma_powers = transcript.challenge_scalar_powers(2 + NUM_LOOKUP_TABLES);
797810
(
798-
Self::compute_val_5(sm, opening_accumulator, &gamma_powers),
811+
Self::compute_val_5(bytecode, opening_accumulator, &gamma_powers),
799812
Self::compute_rv_claim_5(opening_accumulator, &gamma_powers),
800813
)
801814
}
@@ -806,11 +819,8 @@ impl<F: JoltField> ReadRafSumcheckParams<F> {
806819
/// Val(k) = unexpanded_pc(k) + gamma * imm(k)
807820
/// + gamma^2 * circuit_flags[0](k) + gamma^3 * circuit_flags[1](k) + ...
808821
/// This particular Val virtualizes claims output by Spartan's "outer" sumcheck
809-
fn compute_val_1(
810-
sm: &mut StateManager<F, impl CommitmentScheme<Field = F>>,
811-
gamma_powers: &[F],
812-
) -> Vec<F> {
813-
sm.get_bytecode()
822+
fn compute_val_1(bytecode: &[Instruction], gamma_powers: &[F]) -> Vec<F> {
823+
bytecode
814824
.par_iter()
815825
.map(|instruction| {
816826
let NormalizedInstruction {
@@ -879,11 +889,8 @@ impl<F: JoltField> ReadRafSumcheckParams<F> {
879889
/// rd_addr(k) is the rd address for instruction k;
880890
/// write_lookup_output_to_rd_flag(k) = 1 if instruction k writes lookup output to rd, 0 otherwise.
881891
/// This Val matches the fused product sumcheck.
882-
fn compute_val_2(
883-
sm: &mut StateManager<F, impl CommitmentScheme<Field = F>>,
884-
gamma_powers: &[F],
885-
) -> Vec<F> {
886-
sm.get_bytecode()
892+
fn compute_val_2(bytecode: &[Instruction], gamma_powers: &[F]) -> Vec<F> {
893+
bytecode
887894
.par_iter()
888895
.map(|instruction| {
889896
let flags = instruction.circuit_flags();
@@ -947,11 +954,8 @@ impl<F: JoltField> ReadRafSumcheckParams<F> {
947954
/// + gamma^2 * left_operand_is_rs1_value(k)
948955
/// + gamma^3 * left_operand_is_pc(k) + ...
949956
/// This particular Val virtualizes claims output by the ShiftSumcheck.
950-
fn compute_val_3(
951-
sm: &mut StateManager<F, impl CommitmentScheme<Field = F>>,
952-
gamma_powers: &[F],
953-
) -> Vec<F> {
954-
sm.get_bytecode()
957+
fn compute_val_3(bytecode: &[Instruction], gamma_powers: &[F]) -> Vec<F> {
958+
bytecode
955959
.par_iter()
956960
.map(|instruction| {
957961
let instr = instruction.normalize();
@@ -1067,7 +1071,7 @@ impl<F: JoltField> ReadRafSumcheckParams<F> {
10671071
/// and analogously for rs1(k, k') and rs2(k, k').
10681072
/// This particular Val virtualizes claims output by the registers read/write checking sumcheck.
10691073
fn compute_val_4(
1070-
sm: &mut StateManager<F, impl CommitmentScheme<Field = F>>,
1074+
bytecode: &[Instruction],
10711075
opening_accumulator: &dyn OpeningAccumulator<F>,
10721076
gamma_powers: &[F],
10731077
) -> Vec<F> {
@@ -1082,7 +1086,7 @@ impl<F: JoltField> ReadRafSumcheckParams<F> {
10821086
let eq_r_register = EqPolynomial::<F>::evals(r_register);
10831087
debug_assert_eq!(eq_r_register.len(), REGISTER_COUNT as usize);
10841088

1085-
sm.get_bytecode()
1089+
bytecode
10861090
.par_iter()
10871091
.map(|instruction| {
10881092
let instr = instruction.normalize();
@@ -1125,7 +1129,7 @@ impl<F: JoltField> ReadRafSumcheckParams<F> {
11251129
/// This particular Val virtualizes the claim output by the registers val-evaluation sumcheck
11261130
/// and the instruction lookups sumcheck.
11271131
fn compute_val_5(
1128-
sm: &mut StateManager<F, impl CommitmentScheme<Field = F>>,
1132+
bytecode: &[Instruction],
11291133
opening_accumulator: &dyn OpeningAccumulator<F>,
11301134
gamma_powers: &[F],
11311135
) -> Vec<F> {
@@ -1140,7 +1144,7 @@ impl<F: JoltField> ReadRafSumcheckParams<F> {
11401144
let eq_r_register = EqPolynomial::evals(&r_register);
11411145
debug_assert_eq!(eq_r_register.len(), REGISTER_COUNT as usize);
11421146

1143-
sm.get_bytecode()
1147+
bytecode
11441148
.par_iter()
11451149
.map(|instruction| {
11461150
let instr = instruction.normalize();

0 commit comments

Comments
 (0)