-
Notifications
You must be signed in to change notification settings - Fork 4
/
single_storage_proof.rs
66 lines (56 loc) · 2.06 KB
/
single_storage_proof.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
use halo2_base::{
halo2_proofs::{
SerdeFormat,
plonk::{create_proof, keygen_pk, keygen_vk, verify_proof, VerifyingKey, ProvingKey},
halo2curves::bn256::{Bn256, Fr, G1Affine},
poly::commitment::{ParamsProver, Params},
poly::kzg::{
commitment::{KZGCommitmentScheme, ParamsKZG},
multiopen::{ProverSHPLONK, VerifierSHPLONK},
strategy::SingleStrategy,
},
transcript::{
Blake2bRead, Blake2bWrite, Challenge255, TranscriptReadBuffer, TranscriptWriterBuffer,
},
},
utils::{fs::gen_srs},
};
use rand_core::OsRng;
use axiom_eth::storage::EthBlockStorageCircuit;
use std::{
fs::{self, File},
io::{BufWriter, Write},
};
fn main() {
let k = 17;
let params = gen_srs(k);
let circuit = EthBlockStorageCircuit::<Fr>::default();
let vk = keygen_vk(¶ms, &circuit).unwrap();
let pk = keygen_pk(¶ms, vk, &circuit).unwrap();
let circuit = EthBlockStorageCircuit::<Fr>::from_json("diff_block_same_add.json");
let instance = circuit.instance();
// create a proof
println!("beginning prove step");
let mut transcript = Blake2bWrite::<_, _, Challenge255<_>>::init(vec![]);
create_proof::<
KZGCommitmentScheme<Bn256>,
ProverSHPLONK<'_, Bn256>,
Challenge255<G1Affine>,
_,
Blake2bWrite<Vec<u8>, G1Affine, Challenge255<G1Affine>>,
_,
>(¶ms, &pk, &[circuit], &[&[&instance]], OsRng, &mut transcript).unwrap();
let proof = transcript.finalize();
println!("beginning verify");
let verifier_params = params.verifier_params();
let strategy = SingleStrategy::new(¶ms);
let mut transcript = Blake2bRead::<_, _, Challenge255<_>>::init(&proof[..]);
verify_proof::<
KZGCommitmentScheme<Bn256>,
VerifierSHPLONK<'_, Bn256>,
Challenge255<G1Affine>,
Blake2bRead<&[u8], G1Affine, Challenge255<G1Affine>>,
SingleStrategy<'_, Bn256>,
>(verifier_params, pk.get_vk(), strategy, &[&[&instance]], &mut transcript)
.unwrap();
}