1
- use super :: { utils:: tick , Prover } ;
1
+ use super :: { utils:: gen_rng , Prover } ;
2
2
use crate :: {
3
3
utils:: { metric_of_witness_block, read_env_var} ,
4
4
zkevm:: circuit:: { block_traces_to_witness_block, check_batch_capacity, TargetCircuit , DEGREE } ,
5
5
} ;
6
6
use anyhow:: { bail, Result } ;
7
- use halo2_proofs:: { dev:: MockProver , halo2curves:: bn256:: Fr , plonk :: keygen_pk2 } ;
7
+ use halo2_proofs:: { dev:: MockProver , halo2curves:: bn256:: Fr } ;
8
8
use once_cell:: sync:: Lazy ;
9
- use rand:: SeedableRng ;
10
- use rand_xorshift:: XorShiftRng ;
11
9
use snark_verifier_sdk:: { gen_snark_shplonk, Snark } ;
12
10
use types:: eth:: BlockTrace ;
13
11
@@ -34,7 +32,7 @@ impl Prover {
34
32
35
33
let ( circuit, instance) = C :: from_witness_block ( & witness_block) ?;
36
34
37
- // generate the proof for the inner circuit
35
+ // Generate the proof for the inner circuit.
38
36
log:: info!(
39
37
"Create {} proof of block {} ... block {}, batch len {}" ,
40
38
C :: name( ) ,
@@ -43,9 +41,6 @@ impl Prover {
43
41
chunk_trace. len( )
44
42
) ;
45
43
46
- let seed = [ 0u8 ; 16 ] ;
47
- let mut rng = XorShiftRng :: from_seed ( seed) ;
48
-
49
44
if * MOCK_PROVE {
50
45
log:: info!( "Mock prove {} start" , C :: name( ) ) ;
51
46
let prover = MockProver :: < Fr > :: run ( * DEGREE as u32 , & circuit, instance) ?;
@@ -59,25 +54,17 @@ impl Prover {
59
54
log:: info!( "Mock prove {} done" , C :: name( ) ) ;
60
55
}
61
56
62
- if !self . inner_pks . contains_key ( & C :: name ( ) ) {
63
- self . gen_inner_pk :: < C > ( & C :: dummy_inner_circuit ( ) ) ;
57
+ // Reuse pk.
58
+ let id = C :: name ( ) ;
59
+ if !self . pks . contains_key ( & id) {
60
+ self . gen_inner_pk :: < C > ( & circuit) ?;
64
61
}
65
- let pk = & self . inner_pks [ & C :: name ( ) ] ;
62
+ let pk = & self . pks [ & id ] ;
66
63
67
64
// Generate the SNARK proof for inner circuit.
68
65
let snark_proof =
69
- gen_snark_shplonk ( & self . inner_params , pk, circuit, & mut rng , None :: < String > ) ;
66
+ gen_snark_shplonk ( & self . params , pk, circuit, & mut gen_rng ( ) , None :: < String > ) ;
70
67
71
68
Ok ( snark_proof)
72
69
}
73
-
74
- fn gen_inner_pk < C : TargetCircuit > ( & mut self , circuit : & <C as TargetCircuit >:: Inner ) {
75
- tick ( & format ! ( "Before init pk of {}" , C :: name( ) ) ) ;
76
-
77
- let pk = keygen_pk2 ( & self . inner_params , circuit)
78
- . unwrap_or_else ( |e| panic ! ( "Failed to generate {} pk: {:?}" , C :: name( ) , e) ) ;
79
- self . inner_pks . insert ( C :: name ( ) , pk) ;
80
-
81
- tick ( & format ! ( "After init pk of {}" , C :: name( ) ) ) ;
82
- }
83
70
}
0 commit comments