mod.rs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. pub mod coin;
  2. pub mod diffie_hellman;
  3. pub mod fr_serial;
  4. pub mod merkle;
  5. pub mod merkle_node;
  6. pub mod mint_proof;
  7. pub mod note;
  8. pub mod nullifier;
  9. pub mod schnorr;
  10. pub mod spend_proof;
  11. pub mod types;
  12. pub mod util;
  13. use bellman::groth16;
  14. use bls12_381::Bls12;
  15. use crate::error::Result;
  16. pub use mint_proof::{create_mint_proof, setup_mint_prover, verify_mint_proof, MintRevealedValues};
  17. pub use spend_proof::{
  18. create_spend_proof, setup_spend_prover, verify_spend_proof, SpendRevealedValues,
  19. };
  20. #[derive(Clone)]
  21. pub struct OwnCoin {
  22. pub coin: coin::Coin,
  23. pub note: note::Note,
  24. pub secret: jubjub::Fr,
  25. pub witness: merkle::IncrementalWitness<merkle_node::MerkleNode>,
  26. pub nullifier: nullifier::Nullifier,
  27. }
  28. pub type OwnCoins = Vec<OwnCoin>;
  29. pub fn save_params(filename: &str, params: &groth16::Parameters<Bls12>) -> Result<()> {
  30. let buffer = std::fs::File::create(filename)?;
  31. params.write(buffer)?;
  32. Ok(())
  33. }
  34. pub fn load_params(
  35. filename: &str,
  36. ) -> Result<(
  37. groth16::Parameters<Bls12>,
  38. groth16::PreparedVerifyingKey<Bls12>,
  39. )> {
  40. let buffer = std::fs::File::open(filename)?;
  41. let params = groth16::Parameters::<Bls12>::read(buffer, false)?;
  42. let pvk = groth16::prepare_verifying_key(&params.vk);
  43. Ok((params, pvk))
  44. }