token_list: refactored TokenList and fixed generate_id error

This commit is contained in:
lunar-mining
2021-10-02 21:41:28 +02:00
parent 4a17cf0a12
commit 82d300dccc
3 changed files with 24 additions and 16 deletions

View File

@@ -370,6 +370,8 @@ impl Darkfid {
async fn transfer(&self, id: Value, params: Value) -> JsonResult {
//let token_vec = self.wallet.get_token_ids();
//for (network_name, token_id) in self.tokenlist.drk_tokenlist.iter() {}
let args = params.as_array();
if args.is_none() {
@@ -390,7 +392,7 @@ impl Darkfid {
return JsonResult::Err(jsonerr(InvalidTokenIdParam, None, id));
}
let _token = address.as_str().unwrap();
let _token = token.as_str().unwrap();
if address.as_str().is_none() {
return JsonResult::Err(jsonerr(InvalidAddressParam, None, id));

View File

@@ -6,4 +6,4 @@ pub mod token_list;
pub use net_name::NetworkName;
pub use parse::{assign_id, decimals, decode_base10, encode_base10, generate_id};
pub use path::{expand_path, join_config_path};
pub use token_list::TokenList;
pub use token_list::{DrkTokenList, TokenList};

View File

@@ -8,7 +8,6 @@ use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct TokenList {
sol_tokenlist: Value,
drk_tokenlist: HashMap<NetworkName, jubjub::Fr>,
}
impl TokenList {
@@ -16,7 +15,6 @@ impl TokenList {
// TODO: FIXME
let file_contents = std::fs::read_to_string("token/solanatokenlist.json")?;
let sol_tokenlist: Value = serde_json::from_str(&file_contents)?;
let mut drk_tokenlist = HashMap::new();
let tokens = sol_tokenlist["tokens"]
.as_array()
@@ -27,17 +25,7 @@ impl TokenList {
symbols.push(symbol.to_string());
}
for symbol in symbols {
let id = generate_id(&symbol, &NetworkName::Solana)?;
drk_tokenlist.insert(NetworkName::Solana, id);
}
// TODO: add btc_id, NetworkName::Bitcoin to drk_tokenlist
Ok(Self {
sol_tokenlist,
drk_tokenlist,
})
Ok(Self { sol_tokenlist })
}
pub fn get_symbols(self) -> Result<Vec<String>> {
@@ -52,7 +40,7 @@ impl TokenList {
return Ok(symbols);
}
pub fn search_id(self, symbol: &str) -> Result<String> {
pub fn search_id(&self, symbol: &str) -> Result<String> {
let tokens = self.sol_tokenlist["tokens"]
.as_array()
.ok_or(Error::TokenParseError)?;
@@ -82,6 +70,24 @@ impl TokenList {
}
}
pub struct DrkTokenList {
drk_tokenlist: HashMap<String, jubjub::Fr>,
}
impl DrkTokenList {
pub fn new(list: TokenList) -> Result<Self> {
let mut drk_tokenlist = HashMap::new();
let symbols = list.clone().get_symbols()?;
for symbol in symbols {
let id = list.clone().search_id(&symbol)?;
let drk_id = generate_id(&id, &NetworkName::Solana)?;
drk_tokenlist.insert(symbol, drk_id);
}
// TODO: add btc_id, NetworkName::Bitcoin to drk_tokenlist
Ok(Self { drk_tokenlist })
}
}
mod tests {
use super::*;