Explorar o código

walletdb: refactored TokenTable into hashmap. renamed get_token_table to get_balances

lunar-mining %!s(int64=4) %!d(string=hai) anos
pai
achega
0b2d1434e2
Modificáronse 3 ficheiros con 20 adicións e 21 borrados
  1. 10 1
      src/bin/darkfid.rs
  2. 4 4
      src/bin/drk.rs
  3. 6 16
      src/wallet/walletdb.rs

+ 10 - 1
src/bin/darkfid.rs

@@ -46,6 +46,7 @@ impl RequestHandler for Darkfid {
             Some("create_wallet") => return self.create_wallet(req.id, req.params).await,
             Some("create_wallet") => return self.create_wallet(req.id, req.params).await,
             Some("key_gen") => return self.key_gen(req.id, req.params).await,
             Some("key_gen") => return self.key_gen(req.id, req.params).await,
             Some("get_key") => return self.get_key(req.id, req.params).await,
             Some("get_key") => return self.get_key(req.id, req.params).await,
+            Some("get_balances") => return self.get_balances(req.id, req.params).await,
             Some("get_token_id") => return self.get_token_id(req.id, req.params).await,
             Some("get_token_id") => return self.get_token_id(req.id, req.params).await,
             Some("features") => return self.features(req.id, req.params).await,
             Some("features") => return self.features(req.id, req.params).await,
             Some("deposit") => return self.deposit(req.id, req.params).await,
             Some("deposit") => return self.deposit(req.id, req.params).await,
@@ -132,6 +133,10 @@ impl Darkfid {
         return JsonResult::Resp(jsonresp(json!(b58), id));
         return JsonResult::Resp(jsonresp(json!(b58), id));
     }
     }
 
 
+    async fn get_balances(&self, id: Value, _params: Value) -> JsonResult {
+        return JsonResult::Err(jsonerr(InvalidNetworkParam, None, id));
+    }
+
     // --> {"method": "get_token_id", "params": [network, token]}
     // --> {"method": "get_token_id", "params": [network, token]}
     // <-- {"result": "Ht5G1RhkcKnpLVLMhqJc5aqZ4wYUEbxbtZwGCVbgU7DL"}
     // <-- {"result": "Ht5G1RhkcKnpLVLMhqJc5aqZ4wYUEbxbtZwGCVbgU7DL"}
     async fn get_token_id(&self, id: Value, params: Value) -> JsonResult {
     async fn get_token_id(&self, id: Value, params: Value) -> JsonResult {
@@ -438,7 +443,11 @@ impl Darkfid {
             let decimals: usize = 8;
             let decimals: usize = 8;
             let amount = decode_base10(&amount.to_string(), decimals, true)?;
             let amount = decode_base10(&amount.to_string(), decimals, true)?;
 
 
-            self.client.lock().await.transfer(token_id.clone(), drk_address, amount).await?;
+            self.client
+                .lock()
+                .await
+                .transfer(token_id.clone(), drk_address, amount)
+                .await?;
 
 
             Ok(())
             Ok(())
         }
         }

+ 4 - 4
src/bin/drk.rs

@@ -97,8 +97,8 @@ impl Drk {
         Ok(self.request(req).await?)
         Ok(self.request(req).await?)
     }
     }
 
 
-    async fn get_tokens(&self) -> Result<Value> {
-        let req = jsonrpc::request(json!("get_tokens"), json![()]);
+    async fn get_balances(&self) -> Result<Value> {
+        let req = jsonrpc::request(json!("get_balances"), json![()]);
         Ok(self.request(req).await?)
         Ok(self.request(req).await?)
     }
     }
 
 
@@ -167,8 +167,8 @@ async fn start(config: &DrkConfig, options: ArgMatches<'_>) -> Result<()> {
             return Ok(());
             return Ok(());
         }
         }
 
 
-        if matches.is_present("tokens") {
-            let reply = client.get_tokens().await?;
+        if matches.is_present("balances") {
+            let reply = client.get_balances().await?;
             println!("Server replied: {}", &reply.to_string());
             println!("Server replied: {}", &reply.to_string());
             return Ok(());
             return Ok(());
         }
         }

+ 6 - 16
src/wallet/walletdb.rs

@@ -12,6 +12,7 @@ use log::*;
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 use rusqlite::{named_params, params, Connection};
 use rusqlite::{named_params, params, Connection};
 
 
+use std::collections::HashMap;
 use std::path::{Path, PathBuf};
 use std::path::{Path, PathBuf};
 
 
 pub type WalletPtr = Arc<WalletDb>;
 pub type WalletPtr = Arc<WalletDb>;
@@ -22,13 +23,6 @@ pub struct Keypair {
     pub private: jubjub::Fr,
     pub private: jubjub::Fr,
 }
 }
 
 
-#[derive(Debug, Clone)]
-pub struct TokenTable {
-    pub coin_id: u64,
-    pub token_id: jubjub::Fr,
-    pub value: u64,
-}
-
 //#[derive(Clone)]
 //#[derive(Clone)]
 pub struct WalletDb {
 pub struct WalletDb {
     pub path: PathBuf,
     pub path: PathBuf,
@@ -319,7 +313,7 @@ impl WalletDb {
         Ok(pub_keys)
         Ok(pub_keys)
     }
     }
 
 
-    pub fn get_token_table(&self) -> Result<Vec<TokenTable>> {
+    pub fn get_balances(&self) -> Result<HashMap<u64, jubjub::Fr>> {
         debug!(target: "WALLETDB", "Get token and balances...");
         debug!(target: "WALLETDB", "Get token and balances...");
         let conn = Connection::open(&self.path)?;
         let conn = Connection::open(&self.path)?;
         conn.pragma_update(None, "key", &self.password)?;
         conn.pragma_update(None, "key", &self.password)?;
@@ -327,21 +321,17 @@ impl WalletDb {
         let mut stmt = conn.prepare("SELECT coin_id, value, asset_id FROM coins ;")?;
         let mut stmt = conn.prepare("SELECT coin_id, value, asset_id FROM coins ;")?;
         let rows = stmt.query_map([], |row| Ok((row.get(0)?, row.get(1)?, row.get(2)?)))?;
         let rows = stmt.query_map([], |row| Ok((row.get(0)?, row.get(1)?, row.get(2)?)))?;
 
 
-        let mut token_table = Vec::new();
+        let mut balances = HashMap::new();
 
 
         for row in rows {
         for row in rows {
             let row = row?;
             let row = row?;
-            let coin_id: u64 = row.0;
+            let _coin_id: u64 = row.0;
             let value: u64 = row.1;
             let value: u64 = row.1;
             let token_id: jubjub::Fr = self.get_value_deserialized(&row.2)?;
             let token_id: jubjub::Fr = self.get_value_deserialized(&row.2)?;
 
 
-            token_table.push(TokenTable {
-                coin_id,
-                value,
-                token_id,
-            });
+            balances.insert(value, token_id);
         }
         }
-        Ok(token_table)
+        Ok(balances)
     }
     }
 
 
     pub fn get_token_id(&self) -> Result<Vec<jubjub::Fr>> {
     pub fn get_token_id(&self) -> Result<Vec<jubjub::Fr>> {