فهرست منبع

token_list: generate the id inside the hashmap from token id instead of token symbol

ghassmo 4 سال پیش
والد
کامیت
042b298c6e
1فایلهای تغییر یافته به همراه14 افزوده شده و 2 حذف شده
  1. 14 2
      src/util/token_list.rs

+ 14 - 2
src/util/token_list.rs

@@ -82,11 +82,22 @@ impl DrkTokenList {
 
 
         let tokens: HashMap<String, jubjub::Fr> = sol_symbols
         let tokens: HashMap<String, jubjub::Fr> = sol_symbols
             .iter()
             .iter()
-            .map(|sym| return (sym.clone(), generate_id(sym, &NetworkName::Solana).unwrap()))
+            .filter_map(|symbol| Self::generate_hash_pair(&sol_list, symbol).ok())
             .collect();
             .collect();
 
 
         Ok(Self { tokens })
         Ok(Self { tokens })
     }
     }
+
+    fn generate_hash_pair(sol_list: &SolTokenList, symbol: &str) -> Result<(String, jubjub::Fr)> {
+        if let Some(token_id) = &sol_list.search_id(symbol)? {
+            Ok((
+                symbol.to_string(),
+                generate_id(token_id, &NetworkName::Solana)?,
+            ))
+        } else {
+            Err(Error::NotSupportedToken)
+        }
+    }
 }
 }
 
 
 #[allow(unused_imports)]
 #[allow(unused_imports)]
@@ -134,11 +145,12 @@ mod tests {
     #[test]
     #[test]
     pub fn test_hashmap() -> Result<()> {
     pub fn test_hashmap() -> Result<()> {
         let tokens = _get_tokens()?;
         let tokens = _get_tokens()?;
+        let tokens2 = _get_tokens()?;
         let drk_token = DrkTokenList::new(tokens)?;
         let drk_token = DrkTokenList::new(tokens)?;
         assert_eq!(drk_token.tokens.len(), 5);
         assert_eq!(drk_token.tokens.len(), 5);
         assert_eq!(
         assert_eq!(
             drk_token.tokens["SOL"],
             drk_token.tokens["SOL"],
-            generate_id("SOL", &NetworkName::Solana)?
+            generate_id(&tokens2.search_id("SOL")?.unwrap(), &NetworkName::Solana)?
         );
         );
         Ok(())
         Ok(())
     }
     }