Procházet zdrojové kódy

loader: dummy ContractLoader and functions

lunar-mining před 4 roky
rodič
revize
1e0e9ae56b
1 změnil soubory, kde provedl 85 přidání a 0 odebrání
  1. 85 0
      src/util/loader.rs

+ 85 - 0
src/util/loader.rs

@@ -0,0 +1,85 @@
+use std::{fs::*, path::PathBuf, time::Instant};
+
+use crate::{
+    circuit::MintContract,
+    crypto::proof::{ProvingKey, VerifyingKey},
+    serial::Decodable,
+    vm, Result,
+};
+
+pub struct ContractLoader {}
+
+impl ContractLoader {
+    // let bin = from_bincode("Mint", "proofs/mint.zk.bin");
+    pub fn from_bincode(name: String, path: PathBuf) -> Result<vm::ZkContract> {
+        let start = Instant::now();
+        let file = File::open(path)?;
+        let zkbin = vm::ZkBinary::decode(file)?;
+        for contract_name in zkbin.contracts.keys() {
+            println!("Loaded '{}' contract.", contract_name);
+        }
+        println!("Load time: [{:?}]", start.elapsed());
+        let contract = zkbin.contracts[&name].clone();
+        Ok(contract)
+    }
+
+    // let prk = load_prk("Mint", "proofs/mint.zk/bin", "proofs/mint.prk")
+    pub fn load_prk(
+        contract_name: String,
+        contract_path: PathBuf,
+        key_path: PathBuf,
+    ) -> Result<()> {
+        // TODO: benchmarks
+        //let start = Instant::now();
+        let contract_data = metadata(contract_path)?;
+        let key_data = metadata(key_path)?;
+
+        let contract_time = contract_data.modified()?;
+        let key_time = key_data.modified()?;
+
+        if key_time > contract_time {
+            println!("Key is newer than contract.");
+        } else {
+            Self::create_prk(contract_name)?;
+        }
+        Ok(())
+    }
+
+    // let prk = load_vrk("Mint", "proofs/mint.zk/bin", "proofs/mint.vrk")
+    pub fn load_vrk(
+        contract_name: String,
+        contract_path: PathBuf,
+        key_path: PathBuf,
+    ) -> Result<()> {
+        // TODO: benchmarks
+        //let start = Instant::now();
+        let contract_data = metadata(contract_path)?;
+        let key_data = metadata(key_path)?;
+
+        let contract_time = contract_data.modified()?;
+        let key_time = key_data.modified()?;
+
+        if key_time > contract_time {
+            println!("Key is newer than contract.");
+        } else {
+            Self::create_vrk(contract_name)?;
+        }
+        Ok(())
+    }
+
+    pub fn create_prk(name: String) -> Result<()> {
+        // TODO: implement this
+        let mint_vk = ProvingKey::build(11, MintContract::default());
+        let mut file = File::create(name + ".prk")?;
+        // TODO: serialize and save file
+        Ok(())
+    }
+
+    pub fn create_vrk(name: String) -> Result<()> {
+        // TODO: implement this
+        let _mint_vk = VerifyingKey::build(11, MintContract::default());
+        let mut file = File::create(name + ".vrk")?;
+        // TODO: serialize and save file
+        Ok(())
+    }
+}