Просмотр исходного кода

zk/burn: Add metrics in circuit unit test.

parazyd 4 лет назад
Родитель
Сommit
edb91aabaf
1 измененных файлов с 22 добавлено и 1 удалено
  1. 22 1
      src/zk/circuit/burn_contract.rs

+ 22 - 1
src/zk/circuit/burn_contract.rs

@@ -487,7 +487,9 @@ mod tests {
     use crate::{
         crypto::{
             keypair::{PublicKey, SecretKey},
+            proof::{ProvingKey, VerifyingKey},
             util::{mod_r_p, pedersen_commitment_scalar},
+            Proof,
         },
         Result,
     };
@@ -500,6 +502,7 @@ mod tests {
     use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
     use pasta_curves::arithmetic::CurveAffine;
     use rand::rngs::OsRng;
+    use std::time::Instant;
 
     #[test]
     fn burn_circuit_assert() -> Result<()> {
@@ -578,8 +581,26 @@ mod tests {
         let root = root.titled("Burn Circuit Layout", ("sans-serif", 60)).unwrap();
         CircuitLayout::default().render(11, &circuit, &root).unwrap();
 
-        let prover = MockProver::run(11, &circuit, vec![public_inputs])?;
+        let prover = MockProver::run(11, &circuit, vec![public_inputs.clone()])?;
         prover.assert_satisfied();
+
+        let now = Instant::now();
+        let proving_key = ProvingKey::build(11, &circuit);
+        println!("ProvingKey built [{:?}]", now.elapsed());
+        let now = Instant::now();
+        let proof = Proof::create(&proving_key, &[circuit], &public_inputs, &mut OsRng)?;
+        println!("Proof created [{:?}]", now.elapsed());
+
+        let circuit = BurnContract::default();
+        let now = Instant::now();
+        let verifying_key = VerifyingKey::build(11, &circuit);
+        println!("VerifyingKey built [{:?}]", now.elapsed());
+        let now = Instant::now();
+        proof.verify(&verifying_key, &public_inputs)?;
+        println!("Proof verified [{:?}]", now.elapsed());
+
+        println!("Proof size [{} kB]", proof.as_ref().len() as f64 / 1024.0);
+
         Ok(())
     }
 }