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

wallet/walletdb: get_balance() added

aggstam 3 лет назад
Родитель
Сommit
ac79ab9c4d
1 измененных файлов с 31 добавлено и 0 удалено
  1. 31 0
      src/wallet/walletdb.rs

+ 31 - 0
src/wallet/walletdb.rs

@@ -420,6 +420,33 @@ impl WalletDb {
 
         Ok(())
     }
+    
+    pub async fn get_balance(&self, token_id: DrkTokenId) -> Result<Option<Balance>> {
+        debug!("Getting balance of token ID");
+
+        let is_spent = 0;
+        let id = serialize(&token_id);
+
+        let mut conn = self.conn.acquire().await?;
+        let row =
+            sqlx::query("SELECT value, token_id, nullifier FROM coins WHERE token_id = ?1 AND is_spent = ?2;")
+                .bind(id)
+                .bind(is_spent)
+                .fetch_optional(&mut conn)
+                .await?;
+
+        let balance = match row {
+            Some(b) => {
+                let value = deserialize(b.get("value"))?;
+                let token_id = deserialize(b.get("token_id"))?;
+                let nullifier = deserialize(b.get("nullifier"))?;
+                Some(Balance { token_id, value, nullifier })
+            }
+            None => None,
+        };
+
+        Ok(balance)
+    }
 
     pub async fn get_balances(&self) -> Result<Balances> {
         debug!("Getting tokens and balances");
@@ -573,6 +600,10 @@ mod tests {
             assert_eq!(i, token_id);
             assert!(wallet.token_id_exists(i).await?);
         }
+        
+        // get_balance()
+        let balance = wallet.get_balance(token_id).await?;
+        assert_eq!(balance.unwrap().value, 69);
 
         // get_balances()
         let balances = wallet.get_balances().await?;