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

Cashier: avoid generating new keypair if keys exist in cashierdb

ghassmo 5 лет назад
Родитель
Сommit
864760df4a
2 измененных файлов с 14 добавлено и 19 удалено
  1. 11 6
      src/service/cashier.rs
  2. 3 13
      src/wallet/cashierdb.rs

+ 11 - 6
src/service/cashier.rs

@@ -45,18 +45,23 @@ impl CashierService {
         params_paths: (PathBuf, PathBuf),
         client_wallet_path: PathBuf,
     ) -> Result<CashierService> {
-        // Load trusted setup parameters
-
         // Pull address from config later
         let client_address = btc_endpoint;
 
         // create btc client
         let btc_client = Arc::new(ElectrumClient::new(&client_address)?);
 
-        wallet.init_db()?;
-        let keys = wallet.cash_key_gen();
-        wallet.put_keypair(keys.0, keys.1)?;
-        let cashier_secret = wallet.get_cashier_private()?;
+        let cashier_secret: jubjub::Fr;
+
+        if let Ok(secret) = wallet.get_cashier_private() {
+            cashier_secret = secret;
+        } else {
+            wallet.init_db()?;
+            let keys = wallet.cash_key_gen();
+            wallet.put_keypair(keys.0, keys.1)?;
+            cashier_secret = wallet.get_cashier_private()?;
+        }
+
         let rocks = Rocks::new(&cashier_database_path)?;
 
         let client = Client::new(

+ 3 - 13
src/wallet/cashierdb.rs

@@ -178,17 +178,6 @@ impl CashierDb {
         Ok(())
     }
 
-    pub fn put_cashier_pub(&self, key_public: Vec<u8>) -> Result<()> {
-        debug!(target: "CASHIERDB", "Save cashier keys...");
-        let conn = Connection::open(&self.path)?;
-        conn.pragma_update(None, "key", &self.password)?;
-        conn.execute(
-            "INSERT INTO cashier(key_public) VALUES (?1)",
-            params![key_public],
-        )?;
-        Ok(())
-    }
-
     pub fn get_cashier_public(&self) -> Result<jubjub::SubgroupPoint> {
         debug!(target: "CASHIERDB", "Returning keys...");
         let conn = Connection::open(&self.path)?;
@@ -202,10 +191,11 @@ impl CashierDb {
         let public: jubjub::SubgroupPoint = self.get_value_deserialized(
             pub_keys
                 .pop()
-                .expect("unable to load public_key from cashierdb"),
+                .expect("load public_key from cashierdb"),
         )?;
         Ok(public)
     }
+
     pub fn get_cashier_private(&self) -> Result<jubjub::Fr> {
         debug!(target: "CASHIERDB", "Returning keys...");
         let conn = Connection::open(&self.path)?;
@@ -218,7 +208,7 @@ impl CashierDb {
         }
         let private: jubjub::Fr = self.get_value_deserialized(
             keys.pop()
-                .expect("unable to load private_key from cashierdb"),
+                .expect("load private_key from cashierdb"),
         )?;
         Ok(private)
     }