ghassmo 4 лет назад
Родитель
Сommit
4640f535a4
1 измененных файлов с 20 добавлено и 22 удалено
  1. 20 22
      src/wallet/walletdb.rs

+ 20 - 22
src/wallet/walletdb.rs

@@ -23,6 +23,7 @@ pub struct Keypair {
     pub private: jubjub::Fr,
 }
 
+
 //#[derive(Clone)]
 pub struct WalletDb {
     pub path: PathBuf,
@@ -81,9 +82,7 @@ impl WalletDb {
         if !key_check {
             let secret: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
             let public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * secret;
-            let pubkey = serial::serialize(&public);
-            let privkey = serial::serialize(&secret);
-            self.put_keypair(pubkey, privkey)?;
+            self.put_keypair(&public, &secret)?;
         } else {
             debug!(target: "WALLETDB", "Keys already exist.");
             return Err(Error::from(ClientFailed::KeyExists));
@@ -91,9 +90,18 @@ impl WalletDb {
         Ok(())
     }
 
-    pub fn put_keypair(&self, key_public: Vec<u8>, key_private: Vec<u8>) -> Result<()> {
+    pub fn put_keypair(
+        &self,
+        key_public: &jubjub::SubgroupPoint,
+        key_private: &jubjub::Fr,
+    ) -> Result<()> {
         let conn = Connection::open(&self.path)?;
+
         conn.pragma_update(None, "key", &self.password)?;
+
+        let key_public = serial::serialize(key_public);
+        let key_private = serial::serialize(key_private);
+
         conn.execute(
             "INSERT INTO keys(key_public, key_private) VALUES (?1, ?2)",
             params![key_public, key_private],
@@ -244,7 +252,7 @@ impl WalletDb {
         Ok(())
     }
 
-    pub fn get_witnesses(&self) -> Result<Vec<(u64, IncrementalWitness<MerkleNode>)>> {
+    pub fn get_witnesses(&self) -> Result<HashMap<u64, IncrementalWitness<MerkleNode>>> {
         let conn = Connection::open(&self.path)?;
         conn.pragma_update(None, "key", &self.password)?;
 
@@ -257,12 +265,12 @@ impl WalletDb {
             Ok((row.get(0)?, row.get(1)?))
         })?;
 
-        let mut witnesses = Vec::new();
+        let mut witnesses = HashMap::new();
         for i in rows {
             let i = i?;
             let coin_id: u64 = i.0;
             let witness: IncrementalWitness<MerkleNode> = self.get_value_deserialized(&i.1)?;
-            witnesses.push((coin_id, witness))
+            witnesses.insert(coin_id, witness);
         }
 
         Ok(witnesses)
@@ -395,10 +403,8 @@ mod tests {
 
         let secret: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
         let public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * secret;
-        let key_public = serial::serialize(&public);
-        let key_private = serial::serialize(&secret);
 
-        wallet.put_keypair(key_public, key_private)?;
+        wallet.put_keypair(&public, &secret)?;
 
         let token_id = jubjub::Fr::random(&mut OsRng);
 
@@ -452,10 +458,8 @@ mod tests {
 
         let secret: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
         let public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * secret;
-        let key_public = serial::serialize(&public);
-        let key_private = serial::serialize(&secret);
 
-        wallet.put_keypair(key_public, key_private)?;
+        wallet.put_keypair(&public, &secret)?;
 
         let token_id = jubjub::Fr::random(&mut OsRng);
 
@@ -506,10 +510,8 @@ mod tests {
 
         let secret: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
         let public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * secret;
-        let key_public = serial::serialize(&public);
-        let key_private = serial::serialize(&secret);
 
-        wallet.put_keypair(key_public, key_private)?;
+        wallet.put_keypair(&public, &secret)?;
 
         let keypair = wallet.get_keypairs()?[0].clone();
 
@@ -530,10 +532,8 @@ mod tests {
 
         let secret: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
         let public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * secret;
-        let key_public = serial::serialize(&public);
-        let key_private = serial::serialize(&secret);
 
-        wallet.put_keypair(key_public, key_private)?;
+        wallet.put_keypair(&public, &secret)?;
 
         let note = Note {
             serial: jubjub::Fr::random(&mut OsRng),
@@ -586,10 +586,8 @@ mod tests {
 
         let secret: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
         let public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * secret;
-        let key_public = serial::serialize(&public);
-        let key_private = serial::serialize(&secret);
 
-        wallet.put_keypair(key_public, key_private)?;
+        wallet.put_keypair(&public, &secret)?;
 
         let mut tree = crate::crypto::merkle::CommitmentTree::empty();