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

Load parameters on cashier start

Janus 5 лет назад
Родитель
Сommit
62959fd7de
1 измененных файлов с 17 добавлено и 5 удалено
  1. 17 5
      src/service/cashier.rs

+ 17 - 5
src/service/cashier.rs

@@ -8,6 +8,9 @@ use crate::wallet::CashierDbPtr;
 use crate::tx;
 use crate::crypto::load_params;
 
+use bellman::groth16;
+use bls12_381::Bls12;
+
 use std::net::SocketAddr;
 use async_std::sync::Arc;
 use async_executor::Executor;
@@ -28,6 +31,10 @@ enum CashierCommand {
 pub struct CashierService {
     addr: SocketAddr,
     wallet: CashierDbPtr,
+    mint_params: groth16::Parameters<Bls12>,
+    mint_pvk: groth16::PreparedVerifyingKey<Bls12>,
+    spend_params: groth16::Parameters<Bls12>,
+    spend_pvk: groth16::PreparedVerifyingKey<Bls12>,
 }
 
 impl CashierService {
@@ -35,13 +42,22 @@ impl CashierService {
         addr: SocketAddr,
         wallet: CashierDbPtr,
     )-> Result<Arc<CashierService>> {
+        // Load trusted setup parameters
+        let (mint_params, mint_pvk) = load_params("mint.params")?;
+        let (spend_params, spend_pvk) = load_params("spend.params")?;
 
         Ok(Arc::new(CashierService {
             addr,
             wallet,
+            mint_params,
+            mint_pvk,
+            spend_params,
+            spend_pvk,
         }))
     }
     pub async fn start(self: Arc<Self>, executor: Arc<Executor<'_>>) -> Result<()> {
+
+        debug!(target: "Cashier", "Start Cashier");
         let service_name = String::from("CASHIER DAEMON");
 
         let mut protocol = RepProtocol::new(self.addr.clone(), service_name.clone());
@@ -61,10 +77,6 @@ impl CashierService {
     }
 
     fn mint_dbtc(&self, dkey_pub: jubjub::SubgroupPoint, value: u64) -> Result<Vec<u8>> {
-        // Load trusted setup parameters
-        let (mint_params, _mint_pvk) = load_params("mint.params")?;
-        let (spend_params, _spend_pvk) = load_params("spend.params")?;
-
 
         let cashier_secret = self.wallet.get_cashier_private().unwrap();
 
@@ -85,7 +97,7 @@ impl CashierService {
         let mut tx_data = vec![];
         {
             // Build the tx
-            let tx = builder.build(&mint_params, &spend_params);
+            let tx = builder.build(&self.mint_params, &self.spend_params);
             // Now serialize it
             tx.encode(&mut tx_data).expect("encode tx");
         }