@@ -72,16 +72,16 @@ fn init_env_logger() {
72
72
///
73
73
/// CircuitTestBuilder::new_from_test_ctx(ctx)
74
74
/// .block_modifier(Box::new(|block| block.circuits_params.max_evm_rows = (1 << 18) - 100))
75
- /// .state_checks(Box::new(|prover, evm_rows, lookup_rows| assert!(prover.verify_at_rows_par(evm_rows.iter().cloned(), lookup_rows.iter().cloned()).is_err())))
75
+ /// .state_checks(Some( Box::new(|prover, evm_rows, lookup_rows| assert!(prover.verify_at_rows_par(evm_rows.iter().cloned(), lookup_rows.iter().cloned()).is_err() ))))
76
76
/// .run();
77
77
/// ```
78
78
pub struct CircuitTestBuilder < const NACC : usize , const NTX : usize > {
79
79
test_ctx : Option < TestContext < NACC , NTX > > ,
80
80
circuits_params : Option < CircuitsParams > ,
81
81
block : Option < Block < Fr > > ,
82
- evm_checks : Box < dyn Fn ( MockProver < Fr > , & Vec < usize > , & Vec < usize > ) > ,
83
- state_checks : Box < dyn Fn ( MockProver < Fr > , & Vec < usize > , & Vec < usize > ) > ,
84
- copy_checks : Box < dyn Fn ( MockProver < Fr > , & Vec < usize > , & Vec < usize > ) > ,
82
+ evm_checks : Option < Box < dyn Fn ( MockProver < Fr > , & Vec < usize > , & Vec < usize > ) > > ,
83
+ state_checks : Option < Box < dyn Fn ( MockProver < Fr > , & Vec < usize > , & Vec < usize > ) > > ,
84
+ copy_checks : Option < Box < dyn Fn ( MockProver < Fr > , & Vec < usize > , & Vec < usize > ) > > ,
85
85
block_modifiers : Vec < Box < dyn Fn ( & mut Block < Fr > ) > > ,
86
86
geth_data_modifiers : Vec < Box < dyn Fn ( & mut GethData ) > > ,
87
87
}
@@ -93,24 +93,24 @@ impl<const NACC: usize, const NTX: usize> CircuitTestBuilder<NACC, NTX> {
93
93
test_ctx : None ,
94
94
circuits_params : None ,
95
95
block : None ,
96
- evm_checks : Box :: new ( |prover, gate_rows, lookup_rows| {
96
+ evm_checks : Some ( Box :: new ( |prover, gate_rows, lookup_rows| {
97
97
assert_eq ! ( prover. verify_at_rows_par(
98
98
gate_rows. iter( ) . cloned( ) ,
99
99
lookup_rows. iter( ) . cloned( ) ,
100
100
) , Ok ( ( ) ) ) ;
101
- } ) ,
102
- state_checks : Box :: new ( |prover, gate_rows, lookup_rows| {
101
+ } ) ) ,
102
+ state_checks : Some ( Box :: new ( |prover, gate_rows, lookup_rows| {
103
103
assert_eq ! ( prover. verify_at_rows_par(
104
104
gate_rows. iter( ) . cloned( ) ,
105
105
lookup_rows. iter( ) . cloned( ) ,
106
106
) , Ok ( ( ) ) ) ;
107
- } ) ,
108
- copy_checks : Box :: new ( |prover, gate_rows, lookup_rows| {
107
+ } ) ) ,
108
+ copy_checks : Some ( Box :: new ( |prover, gate_rows, lookup_rows| {
109
109
assert_eq ! ( prover. verify_at_rows_par(
110
110
gate_rows. iter( ) . cloned( ) ,
111
111
lookup_rows. iter( ) . cloned( ) ,
112
112
) , Ok ( ( ) ) ) ;
113
- } ) ,
113
+ } ) ) ,
114
114
block_modifiers : vec ! [ ] ,
115
115
geth_data_modifiers : vec ! [ ] ,
116
116
}
@@ -157,7 +157,7 @@ impl<const NACC: usize, const NTX: usize> CircuitTestBuilder<NACC, NTX> {
157
157
/// Circuit verification.
158
158
pub fn state_checks (
159
159
mut self ,
160
- state_checks : Box < dyn Fn ( MockProver < Fr > , & Vec < usize > , & Vec < usize > ) > ,
160
+ state_checks : Option < Box < dyn Fn ( MockProver < Fr > , & Vec < usize > , & Vec < usize > ) > > ,
161
161
) -> Self {
162
162
self . state_checks = state_checks;
163
163
self
@@ -168,12 +168,23 @@ impl<const NACC: usize, const NTX: usize> CircuitTestBuilder<NACC, NTX> {
168
168
/// Circuit verification.
169
169
pub fn evm_checks (
170
170
mut self ,
171
- evm_checks : Box < dyn Fn ( MockProver < Fr > , & Vec < usize > , & Vec < usize > ) > ,
171
+ evm_checks : Option < Box < dyn Fn ( MockProver < Fr > , & Vec < usize > , & Vec < usize > ) > > ,
172
172
) -> Self {
173
173
self . evm_checks = evm_checks;
174
174
self
175
175
}
176
176
177
+ #[ allow( clippy:: type_complexity) ]
178
+ /// Allows to provide checks different than the default ones for the Copy
179
+ /// Circuit verification.
180
+ pub fn copy_checks (
181
+ mut self ,
182
+ copy_checks : Option < Box < dyn Fn ( MockProver < Fr > , & Vec < usize > , & Vec < usize > ) > > ,
183
+ ) -> Self {
184
+ self . copy_checks = copy_checks;
185
+ self
186
+ }
187
+
177
188
#[ allow( clippy:: type_complexity) ]
178
189
/// Allows to provide modifier functions for the [`Block`] that will be
179
190
/// generated within this builder.
@@ -235,18 +246,18 @@ impl<const NACC: usize, const NTX: usize> CircuitTestBuilder<NACC, NTX> {
235
246
236
247
const NUM_BLINDING_ROWS : usize = 64 ;
237
248
// Run evm circuit test
238
- {
249
+ if let Some ( evm_checks ) = & self . evm_checks {
239
250
let k = block. get_test_degree ( ) ;
240
251
let ( active_gate_rows, active_lookup_rows) = EvmCircuit :: < Fr > :: get_active_rows ( & block) ;
241
252
242
253
let circuit = EvmCircuit :: get_test_cicuit_from_block ( block. clone ( ) ) ;
243
254
let prover = MockProver :: < Fr > :: run ( k, & circuit, vec ! [ ] ) . unwrap ( ) ;
244
255
245
- self . evm_checks . as_ref ( ) ( prover, & active_gate_rows, & active_lookup_rows)
256
+ evm_checks ( prover, & active_gate_rows, & active_lookup_rows)
246
257
}
247
258
248
259
// Run state circuit test
249
- {
260
+ if let Some ( state_checks ) = & self . state_checks {
250
261
let rows_needed = StateCircuit :: < Fr > :: min_num_rows_block ( & block) . 1 ;
251
262
let k = log2_ceil ( rows_needed + NUM_BLINDING_ROWS ) ;
252
263
let state_circuit = StateCircuit :: < Fr > :: new ( block. rws . clone ( ) , params. max_rws ) ;
@@ -260,11 +271,11 @@ impl<const NACC: usize, const NTX: usize> CircuitTestBuilder<NACC, NTX> {
260
271
. count ( ) ;
261
272
let rows = ( params. max_rws - non_start_rows_len..params. max_rws ) . collect ( ) ;
262
273
263
- self . state_checks . as_ref ( ) ( prover, & rows, & rows) ;
274
+ state_checks ( prover, & rows, & rows) ;
264
275
}
265
276
266
277
// Run copy circuit test
267
- {
278
+ if let Some ( copy_checks ) = & self . copy_checks {
268
279
let ( active_rows, max_rows) = CopyCircuit :: < Fr > :: min_num_rows_block ( & block) ;
269
280
let k1 = block. get_test_degree ( ) ;
270
281
let k2 = log2_ceil ( max_rows + NUM_BLINDING_ROWS ) ;
@@ -274,7 +285,7 @@ impl<const NACC: usize, const NTX: usize> CircuitTestBuilder<NACC, NTX> {
274
285
let prover = MockProver :: < Fr > :: run ( k, & copy_circuit, instance) . unwrap ( ) ;
275
286
let rows = ( 0 ..active_rows) . collect ( ) ;
276
287
277
- self . copy_checks . as_ref ( ) ( prover, & rows, & rows) ;
288
+ copy_checks ( prover, & rows, & rows) ;
278
289
}
279
290
}
280
291
}
0 commit comments