loader.rs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. use std::{fs::*, path::PathBuf, time::Instant};
  2. use crate::{
  3. crypto::proof::{ProvingKey, VerifyingKey},
  4. util::serial::Decodable,
  5. zk::{circuit::MintContract, vm},
  6. Result,
  7. };
  8. pub struct ContractLoader {}
  9. impl ContractLoader {
  10. // let bin = from_bincode("Mint", "proofs/mint.zk.bin");
  11. pub fn from_bincode(name: String, path: PathBuf) -> Result<vm::ZkContract> {
  12. let start = Instant::now();
  13. let file = File::open(path)?;
  14. let zkbin = vm::ZkBinary::decode(file)?;
  15. for contract_name in zkbin.contracts.keys() {
  16. println!("Loaded '{}' contract.", contract_name);
  17. }
  18. println!("Load time: [{:?}]", start.elapsed());
  19. let contract = zkbin.contracts[&name].clone();
  20. Ok(contract)
  21. }
  22. // let prk = load_prk("Mint", "proofs/mint.zk/bin", "proofs/mint.prk")
  23. pub fn load_prk(
  24. contract_name: String,
  25. contract_path: PathBuf,
  26. key_path: PathBuf,
  27. ) -> Result<()> {
  28. // TODO: benchmarks
  29. //let start = Instant::now();
  30. let contract_data = metadata(contract_path)?;
  31. let key_data = metadata(key_path)?;
  32. let contract_time = contract_data.modified()?;
  33. let key_time = key_data.modified()?;
  34. if key_time > contract_time {
  35. println!("Key is newer than contract.");
  36. } else {
  37. Self::create_prk(contract_name)?;
  38. }
  39. Ok(())
  40. }
  41. // let prk = load_vrk("Mint", "proofs/mint.zk/bin", "proofs/mint.vrk")
  42. pub fn load_vrk(
  43. contract_name: String,
  44. contract_path: PathBuf,
  45. key_path: PathBuf,
  46. ) -> Result<()> {
  47. // TODO: benchmarks
  48. //let start = Instant::now();
  49. let contract_data = metadata(contract_path)?;
  50. let key_data = metadata(key_path)?;
  51. let contract_time = contract_data.modified()?;
  52. let key_time = key_data.modified()?;
  53. if key_time > contract_time {
  54. println!("Key is newer than contract.");
  55. } else {
  56. Self::create_vrk(contract_name)?;
  57. }
  58. Ok(())
  59. }
  60. pub fn create_prk(name: String) -> Result<()> {
  61. // TODO: implement this
  62. let _mint_pk = ProvingKey::build(11, MintContract::default());
  63. let _file = File::create(name + ".prk")?;
  64. // TODO: serialize and save file
  65. Ok(())
  66. }
  67. pub fn create_vrk(name: String) -> Result<()> {
  68. // TODO: implement this
  69. let _mint_vk = VerifyingKey::build(11, MintContract::default());
  70. let _file = File::create(name + ".vrk")?;
  71. // TODO: serialize and save file
  72. Ok(())
  73. }
  74. }