@@ -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};
4243use itertools:: { chain, zip_eq, Itertools } ;
4344use rayon:: prelude:: * ;
4445use strum:: { EnumCount , IntoEnumIterator } ;
45- use tracer:: instruction:: NormalizedInstruction ;
46+ use tracer:: instruction:: { Instruction , NormalizedInstruction } ;
4647
4748/// Number of batched read-checking sumchecks bespokely
4849const 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
522529impl < 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
644657impl < 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