@@ -3,7 +3,7 @@ use crate::{
3
3
constants:: NUM_CHALLENGE_BITS ,
4
4
digest:: { DigestComputer , SimpleDigestible } ,
5
5
errors:: NovaError ,
6
- gadgets:: utils:: scalar_as_base,
6
+ gadgets:: { lookup :: Lookup , utils:: scalar_as_base} ,
7
7
spartan:: {
8
8
math:: Math ,
9
9
polys:: {
@@ -120,17 +120,19 @@ where
120
120
/// setup
121
121
pub fn setup (
122
122
ck : & CommitmentKey < G > ,
123
- initial_table : & Vec < ( G :: Scalar , G :: Scalar , G :: Scalar ) > ,
123
+ initial_table : & Lookup < G :: Scalar > ,
124
124
) -> Result < ( ProverKey < G , EE > , VerifierKey < G , EE > ) , NovaError > {
125
125
// check the provided commitment key meets minimal requirements
126
126
// assert!(ck.length() >= Self::commitment_key_floor()(S));
127
- let init_values: Vec < <G as Group >:: Scalar > =
128
- initial_table. iter ( ) . map ( |( _, value, _) | * value) . collect ( ) ;
127
+ let init_values: Vec < <G as Group >:: Scalar > = initial_table
128
+ . into_iter ( )
129
+ . map ( |( _, ( value, _) ) | * value)
130
+ . collect ( ) ;
129
131
130
132
let comm_init_value = G :: CE :: commit ( ck, & init_values) ;
131
133
132
134
let ( pk_ee, vk_ee) = EE :: setup ( ck) ;
133
- let table_size = initial_table. len ( ) ;
135
+ let table_size = initial_table. table_size ( ) ;
134
136
135
137
let vk = VerifierKey :: new ( vk_ee, table_size, comm_init_value) ;
136
138
@@ -150,8 +152,8 @@ where
150
152
challenges : ( G :: Scalar , G :: Scalar ) ,
151
153
read_row : G :: Scalar ,
152
154
write_row : G :: Scalar ,
153
- initial_table : Vec < ( G :: Scalar , G :: Scalar , G :: Scalar ) > ,
154
- final_table : Vec < ( G :: Scalar , G :: Scalar , G :: Scalar ) > ,
155
+ initial_table : & Lookup < G :: Scalar > ,
156
+ final_table : & Lookup < G :: Scalar > ,
155
157
) -> Result < Self , NovaError > {
156
158
// a list of polynomial evaluation claims that will be batched
157
159
let mut w_u_vec = Vec :: new ( ) ;
@@ -163,13 +165,13 @@ where
163
165
} ;
164
166
// init_row
165
167
let initial_row: Vec < G :: Scalar > = initial_table
166
- . iter ( )
167
- . map ( |( addr, value, counter) | hash_func ( addr, value, counter) )
168
+ . into_iter ( )
169
+ . map ( |( addr, ( value, counter) ) | hash_func ( addr, value, counter) )
168
170
. collect ( ) ;
169
171
// audit_row
170
172
let audit_row: Vec < G :: Scalar > = final_table
171
- . iter ( )
172
- . map ( |( addr, value, counter) | hash_func ( addr, value, counter) )
173
+ . into_iter ( )
174
+ . map ( |( addr, ( value, counter) ) | hash_func ( addr, value, counter) )
173
175
. collect ( ) ;
174
176
let mut transcript = G :: TE :: new ( b"LookupSNARK" ) ;
175
177
// append the verifier key (which includes commitment to R1CS matrices) and the read_row/write_row to the transcript
@@ -179,12 +181,12 @@ where
179
181
transcript. absorb ( b"alpha" , & fingerprint_alpha) ;
180
182
transcript. absorb ( b"gamma" , & fingerprint_gamma) ;
181
183
182
- let init_values: Vec < <G as Group >:: Scalar > =
183
- initial_table . iter ( ) . map ( | ( _ , value , _ ) | * value ) . collect ( ) ;
184
- let final_values : Vec < < G as Group > :: Scalar > =
185
- final_table . iter ( ) . map ( | ( _ , value , _ ) | * value ) . collect ( ) ;
186
- let final_counters: Vec < < G as Group > :: Scalar > =
187
- final_table. iter ( ) . map ( | ( _ , _ , counter ) | * counter ) . collect ( ) ;
184
+ let init_values: Vec < <G as Group >:: Scalar > = initial_table
185
+ . into_iter ( )
186
+ . map ( | ( _ , ( value , _ ) ) | * value )
187
+ . collect ( ) ;
188
+ let ( final_values , final_counters) : ( Vec < _ > , Vec < _ > ) =
189
+ final_table. values ( ) . copied ( ) . unzip ( ) ;
188
190
let comm_init_value = pk. comm_init_value ;
189
191
let ( comm_final_value, comm_final_counter) = rayon:: join (
190
192
|| G :: CE :: commit ( ck, & final_values) ,
0 commit comments