Răsfoiți Sursa

walletdb: use secert key to save owncoin instead of key_id

ghassmo 4 ani în urmă
părinte
comite
e4b8860840
2 a modificat fișierele cu 8 adăugiri și 35 ștergeri
  1. 1 4
      sql/schema.sql
  2. 7 31
      src/wallet/walletdb.rs

+ 1 - 4
sql/schema.sql

@@ -13,10 +13,7 @@ CREATE TABLE IF NOT EXISTS coins(
     value INT NOT NULL,
     asset_id INT NOT NULL,
     witness BLOB NOT NULL,
-    key_id INTEGER NOT NULL,
-    FOREIGN KEY (key_id)
-        REFERENCES keys (key_id)
-        ON UPDATE CASCADE
+   	secret BLOB NOT NULL
 );
 CREATE TABLE IF NOT EXISTS cashier(
     key_id INTEGER PRIMARY KEY NOT NULL,

+ 7 - 31
src/wallet/walletdb.rs

@@ -165,21 +165,7 @@ impl WalletDb {
             };
 
             let witness = self.get_value_deserialized(&row.6)?;
-            let key_id: u64 = row.7;
-
-            // return key_private from key_id
-            let mut get_private_key =
-                conn.prepare("SELECT key_private FROM keys WHERE key_id = :key_id")?;
-
-            let rows = get_private_key.query_map(&[(":key_id", &key_id)], |row| row.get(0))?;
-
-            let mut secret = Vec::new();
-            for id in rows {
-                secret.push(id?)
-            }
-
-            let secret: jubjub::Fr =
-                self.get_value_deserialized(&secret.pop().expect("Load public_key from walletdb"))?;
+            let secret: jubjub::Fr = self.get_value_deserialized(&row.7)?;
 
             let oc = OwnCoin {
                 coin,
@@ -207,27 +193,17 @@ impl WalletDb {
         let asset_id = self.get_value_serialized(&own_coin.note.asset_id)?;
         let witness = self.get_value_serialized(&own_coin.witness)?;
         let secret = self.get_value_serialized(&own_coin.secret)?;
+        
         // open connection
         let conn = Connection::open(&self.path)?;
         // unlock database
         conn.pragma_update(None, "key", &self.password)?;
 
-        // return key_id from key_private
-        let mut get_id =
-            conn.prepare("SELECT key_id FROM keys WHERE key_private = :key_private")?;
-
-        let rows = get_id.query_map::<u64, _, _>(&[(":key_private", &secret)], |row| row.get(0))?;
-
-        let mut key_id = Vec::new();
-        for id in rows {
-            key_id.push(id?)
-        }
-
         conn.execute(
             "INSERT INTO coins
-            (coin, serial, value, asset_id, coin_blind, valcom_blind, witness, key_id)
+            (coin, serial, value, asset_id, coin_blind, valcom_blind, witness, secret)
             VALUES
-            (:coin, :serial, :value, :asset_id, :coin_blind, :valcom_blind, :witness, :key_id);",
+            (:coin, :serial, :value, :asset_id, :coin_blind, :valcom_blind, :witness, :secret);",
             named_params! {
                 ":coin": coin,
                 ":serial": serial,
@@ -236,7 +212,7 @@ impl WalletDb {
                 ":coin_blind": coin_blind,
                 ":valcom_blind": valcom_blind,
                 ":witness": witness,
-                ":key_id": key_id.pop().expect("Get key_id"),
+                ":secret": secret,
             },
         )?;
         Ok(())
@@ -377,8 +353,8 @@ mod tests {
 
     use super::*;
     use crate::crypto::{coin::Coin, OwnCoin};
-    use crate::serial::{deserialize, serialize};
-    use crate::util::{join_config_path, DrkTokenList, SolTokenList};
+    use crate::serial::serialize;
+    use crate::util::join_config_path;
     use ff::PrimeField;
 
     pub fn init_db(path: &PathBuf, password: String) -> Result<()> {