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

cashierdb: add mint_address field

ghassmo 4 лет назад
Родитель
Сommit
2ee620ddcf
2 измененных файлов с 41 добавлено и 18 удалено
  1. 2 0
      sql/cashier.sql
  2. 39 18
      src/wallet/cashierdb.rs

+ 2 - 0
sql/cashier.sql

@@ -12,6 +12,7 @@ CREATE TABLE IF NOT EXISTS deposit_keypairs(
     token_key_public BLOB NOT NULL,
 	network BLOB NOT NULL,
 	token_id BLOB NOT NULL,
+	mint_address BLOB NOT NULL,
 	confirm BLOB NOT NULL
 );
 
@@ -22,5 +23,6 @@ CREATE TABLE IF NOT EXISTS withdraw_keypairs(
     d_key_public BLOB NOT NULL,
 	network BLOB NOT NULL,
 	token_id BLOB NOT NULL,
+	mint_address BLOB NOT NULL,
 	confirm BLOB NOT NULL
 );

+ 39 - 18
src/wallet/cashierdb.rs

@@ -123,6 +123,7 @@ impl CashierDb {
         d_key_private: &jubjub::Fr,
         network: &NetworkName,
         token_id: &jubjub::Fr,
+        mint_address: &String,
     ) -> Result<()> {
         debug!(target: "CASHIERDB", "Put withdraw keys");
 
@@ -131,6 +132,7 @@ impl CashierDb {
         let network = self.get_value_serialized(network)?;
         let token_id = self.get_value_serialized(token_id)?;
         let confirm = self.get_value_serialized(&false)?;
+        let mint_address = self.get_value_serialized(mint_address)?;
 
         // open connection
         let conn = Connection::open(&self.path)?;
@@ -139,15 +141,16 @@ impl CashierDb {
 
         conn.execute(
             "INSERT INTO withdraw_keypairs
-            (token_key_public, d_key_private, d_key_public, network,  token_id, confirm)
+            (token_key_public, d_key_private, d_key_public, network,  token_id, mint_address, confirm)
             VALUES
-            (:token_key_public, :d_key_private, :d_key_public,:network, :token_id, :confirm);",
+            (:token_key_public, :d_key_private, :d_key_public,:network, :token_id, :mint_address, :confirm);",
             named_params! {
                 ":token_key_public": token_key_public,
                 ":d_key_private": d_key_private,
                 ":d_key_public": d_key_public,
                 ":network": network,
                 ":token_id": token_id,
+                ":mint_address": mint_address,
                 ":confirm": confirm,
             },
         )?;
@@ -161,6 +164,7 @@ impl CashierDb {
         token_key_public: &[u8],
         network: &NetworkName,
         token_id: &jubjub::Fr,
+        mint_address: &String,
     ) -> Result<()> {
         debug!(target: "CASHIERDB", "Put exchange keys");
 
@@ -174,17 +178,20 @@ impl CashierDb {
         let network = self.get_value_serialized(network)?;
         let confirm = self.get_value_serialized(&false)?;
 
+        let mint_address = self.get_value_serialized(mint_address)?;
+
         conn.execute(
             "INSERT INTO deposit_keypairs
-            (d_key_public, token_key_private, token_key_public, network, token_id, confirm)
+            (d_key_public, token_key_private, token_key_public, network, token_id, mint_address, confirm)
             VALUES
-            (:d_key_public, :token_key_private, :token_key_public, :network, :token_id, :confirm)",
+            (:d_key_public, :token_key_private, :token_key_public, :network, :token_id, :mint_address, :confirm)",
             named_params! {
                 ":d_key_public": &d_key_public,
                 ":token_key_private": token_key_private,
                 ":token_key_public": token_key_public,
                 ":network": &network,
                 ":token_id": &token_id,
+                ":mint_address": &mint_address,
                 ":confirm": &confirm,
             },
         )?;
@@ -222,7 +229,7 @@ impl CashierDb {
     pub fn get_withdraw_token_public_key_by_dkey_public(
         &self,
         pub_key: &jubjub::SubgroupPoint,
-    ) -> Result<Option<(Vec<u8>, NetworkName, jubjub::Fr)>> {
+    ) -> Result<Option<(Vec<u8>, NetworkName, jubjub::Fr, String)>> {
         debug!(target: "CASHIERDB", "Get token address by pub_key");
         // open connection
         let conn = Connection::open(&self.path)?;
@@ -234,13 +241,13 @@ impl CashierDb {
         let confirm = self.get_value_serialized(&false)?;
 
         let mut stmt = conn.prepare(
-            "SELECT token_key_public, network, token_id
+            "SELECT token_key_public, network, token_id, mint_address
             FROM withdraw_keypairs
             WHERE d_key_public = :d_key_public AND confirm = :confirm;",
         )?;
         let addr_iter = stmt.query_map(
             &[(":d_key_public", &d_key_public), (":confirm", &&confirm)],
-            |row| Ok((row.get(0)?, row.get(1)?, row.get(2)?)),
+            |row| Ok((row.get(0)?, row.get(1)?, row.get(2)?, row.get(3)?)),
         )?;
 
         let mut token_addresses = vec![];
@@ -250,7 +257,8 @@ impl CashierDb {
             let token_key_public = addr.0;
             let network: NetworkName = self.get_value_deserialized(addr.1)?;
             let token_id: jubjub::Fr = self.get_value_deserialized(addr.2)?;
-            token_addresses.push((token_key_public, network, token_id));
+            let mint_address: String = self.get_value_deserialized(addr.3)?;
+            token_addresses.push((token_key_public, network, token_id, mint_address));
         }
 
         Ok(token_addresses.pop())
@@ -297,11 +305,11 @@ impl CashierDb {
         Ok(keys)
     }
 
-    // return private and public keys as a tuple
+    // return private key, public key, token_id, and mint_address as a tuple
     pub fn get_deposit_token_keys_by_network(
         &self,
         network: &NetworkName,
-    ) -> Result<Vec<(Vec<u8>, Vec<u8>)>> {
+    ) -> Result<Vec<(Vec<u8>, Vec<u8>, jubjub::Fr, String)>> {
         debug!(target: "CASHIERDB", "Check for existing dkey");
         // open connection
         let conn = Connection::open(&self.path)?;
@@ -312,20 +320,25 @@ impl CashierDb {
         let confirm = self.get_value_serialized(&false)?;
 
         let mut stmt = conn.prepare(
-            "SELECT token_key_private, token_key_public
+            "SELECT token_key_private, token_key_public, token_id, mint_address
             FROM deposit_keypairs
             WHERE network = :network
             AND confirm = :confirm ;",
         )?;
-        let keys_iter = stmt.query_map::<(Vec<u8>, Vec<u8>), _, _>(
-            &[(":network", &network), (":confirm", &confirm)],
-            |row| Ok((row.get(0)?, row.get(1)?)),
-        )?;
+        let keys_iter = stmt
+            .query_map(&[(":network", &network), (":confirm", &confirm)], |row| {
+                Ok((row.get(0)?, row.get(1)?, row.get(2)?, row.get(3)?))
+            })?;
 
         let mut keys = vec![];
 
-        for k in keys_iter {
-            keys.push(k?);
+        for key in keys_iter {
+            let key = key?;
+            let private_key = key.0;
+            let pub_key = key.1;
+            let token_id: jubjub::Fr = self.get_value_deserialized(key.2)?;
+            let mint_address: String = self.get_value_deserialized(key.3)?;
+            keys.push((private_key, pub_key, token_id, mint_address));
         }
 
         Ok(keys)
@@ -505,6 +518,7 @@ mod tests {
             &token_addr,
             &network,
             &token_id,
+            &String::new(),
         )?;
 
         let keys = wallet.get_deposit_token_keys_by_dkey_public(&public2, &network)?;
@@ -541,7 +555,14 @@ mod tests {
 
         let network = NetworkName::Bitcoin;
 
-        wallet.put_withdraw_keys(&token_addr, &public2, &secret2, &network, &token_id)?;
+        wallet.put_withdraw_keys(
+            &token_addr,
+            &public2,
+            &secret2,
+            &network,
+            &token_id,
+            &String::new(),
+        )?;
 
         let addr = wallet.get_withdraw_keys_by_token_public_key(&token_addr, &network)?;