From 44cb4871e6e5dc8e4098990af02ec52e8dfb57e5 Mon Sep 17 00:00:00 2001 From: ghassmo Date: Sat, 2 Oct 2021 07:30:40 +0300 Subject: [PATCH] add empty name to NetworkName for no-features build & more cleanups --- src/bin/cashierd.rs | 21 ++++++++++++++------- src/bin/darkfid.rs | 12 ++++-------- src/error.rs | 2 +- src/service/bridge.rs | 20 ++++++++++++-------- src/util/net_name.rs | 4 ++++ src/util/parse.rs | 25 ++++++++++++++++--------- 6 files changed, 51 insertions(+), 33 deletions(-) diff --git a/src/bin/cashierd.rs b/src/bin/cashierd.rs index 8ae7ece5b..9d5153f3c 100644 --- a/src/bin/cashierd.rs +++ b/src/bin/cashierd.rs @@ -385,12 +385,13 @@ impl Cashierd { )) } - fn validate_token_id(network: &NetworkName, token_id: &str) -> Result> { + fn validate_token_id(network: &NetworkName, _token_id: &str) -> Result> { match network { #[cfg(feature = "sol")] NetworkName::Solana => { - if token_id != "So11111111111111111111111111111111111111112" { - return Ok(Some(token_id.to_string())); + use drk::service::sol::SOL_NATIVE_TOKEN_ID; + if _token_id != SOL_NATIVE_TOKEN_ID { + return Ok(Some(_token_id.to_string())); } return Ok(None); } @@ -399,6 +400,8 @@ impl Cashierd { // Handle bitcoin address here if needed Ok(None) } + + _ => Err(Error::NotSupportedNetwork), } } @@ -413,8 +416,7 @@ impl Cashierd { )> { self.cashier_wallet.init_db().await?; - for (feature_name, chain) in self.features.iter() { - let bridge2 = self.bridge.clone(); + for (feature_name, _chain) in self.features.iter() { match feature_name { #[cfg(feature = "sol")] @@ -423,6 +425,8 @@ impl Cashierd { use drk::service::SolClient; use solana_sdk::{signature::Signer, signer::keypair::Keypair}; + let bridge2 = self.bridge.clone(); + let main_keypair: Keypair; let main_keypairs = self.cashier_wallet.get_main_keys(&NetworkName::Solana)?; @@ -438,7 +442,7 @@ impl Cashierd { main_keypair = deserialize(&main_keypairs[0].0)?; } - let sol_client = SolClient::new(serialize(&main_keypair), &chain).await?; + let sol_client = SolClient::new(serialize(&main_keypair), &_chain).await?; bridge2.add_clients(NetworkName::Solana, sol_client).await?; } @@ -448,6 +452,8 @@ impl Cashierd { debug!(target: "CASHIER DAEMON", "Add btc network"); use drk::service::btc::{BtcClient, Keypair}; + let bridge2 = self.bridge.clone(); + let main_keypair: Keypair; let main_keypairs = self.cashier_wallet.get_main_keys(&NetworkName::Bitcoin)?; @@ -463,12 +469,13 @@ impl Cashierd { main_keypair = deserialize(&main_keypairs[0].0)?; } - let btc_client = BtcClient::new(serialize(&main_keypair), &chain).await?; + let btc_client = BtcClient::new(serialize(&main_keypair), &_chain).await?; bridge2 .add_clients(NetworkName::Bitcoin, btc_client) .await?; } + _ => {}, } } diff --git a/src/bin/darkfid.rs b/src/bin/darkfid.rs index 255616242..6c79648bd 100644 --- a/src/bin/darkfid.rs +++ b/src/bin/darkfid.rs @@ -211,11 +211,9 @@ impl Darkfid { let token_id = match assign_id(&network, &token, self.tokenlist.clone()) { Ok(t) => t, - Err(_e) => { + Err(e) => { debug!(target: "DARKFID", "TOKEN ID IS ERR"); - // TODO: this should return the relevant drk error - // right now it just flattens it into ParseError - return JsonResult::Err(jsonerr(ParseError, None, id)); + return JsonResult::Err(jsonerr(InternalError, Some(e.to_string()), id)); } }; @@ -303,11 +301,9 @@ impl Darkfid { let token_id = match assign_id(&network, &token, self.tokenlist.clone()) { Ok(t) => t, - Err(_e) => { + Err(e) => { debug!(target: "DARKFID", "TOKEN ID IS ERR"); - // TODO: this should return the relevant drk error - // right now it just flattens it into ParseError - return JsonResult::Err(jsonerr(ParseError, None, id)); + return JsonResult::Err(jsonerr(InternalError, Some(e.to_string()), id)); } }; diff --git a/src/error.rs b/src/error.rs index 662baf830..06612436a 100644 --- a/src/error.rs +++ b/src/error.rs @@ -118,7 +118,7 @@ impl fmt::Display for Error { Error::JsonRpcError(ref err) => write!(f, "JsonRpc Error: {}", err), Error::TreeFull => f.write_str("MerkleTree is full"), Error::NotSupportedNetwork => { - f.write_str("Not supported network inside cashierd config file") + f.write_str("Not supported network") } Error::BridgeError(ref err) => write!(f, "Bridge error: {}", err), Error::SerdeJsonError(ref err) => write!(f, "Json serialization error: {}", err), diff --git a/src/service/bridge.rs b/src/service/bridge.rs index 3c014e48a..401413116 100644 --- a/src/service/bridge.rs +++ b/src/service/bridge.rs @@ -83,14 +83,18 @@ impl Bridge { } pub async fn listen(self: Arc) -> Option> { - debug!(target: "BRIDGE", "Start listening to new notification"); - self.notifiers - .iter() - .map(|n| n.recv()) - .collect::>>() - .next() - .await - .map(|o| o.map_err(Error::from)) + if !self.notifiers.is_empty() { + debug!(target: "BRIDGE", "Start listening to new notification"); + self.notifiers + .iter() + .map(|n| n.recv()) + .collect::>>() + .next() + .await + .map(|o| o.map_err(Error::from)) + } else { + None + } } pub async fn subscribe( diff --git a/src/util/net_name.rs b/src/util/net_name.rs index 136b1e4f5..c49a01f98 100644 --- a/src/util/net_name.rs +++ b/src/util/net_name.rs @@ -8,6 +8,7 @@ use std::str::FromStr; pub enum NetworkName { Solana, Bitcoin, + Empty } impl std::fmt::Display for NetworkName { @@ -19,6 +20,9 @@ impl std::fmt::Display for NetworkName { Self::Bitcoin => { write!(f, "Bitcoin") } + Self::Empty => { + write!(f, "No Supported Network") + } } } } diff --git a/src/util/parse.rs b/src/util/parse.rs index 87a3ffa40..718f5c4fe 100644 --- a/src/util/parse.rs +++ b/src/util/parse.rs @@ -43,40 +43,47 @@ pub fn generate_id(tkn_str: &str, network: &NetworkName) -> Result { Ok(token_id) } -pub fn assign_id(network: &str, token: &str, tokenlist: TokenList) -> Result { +pub fn assign_id(network: &str, _token: &str, _tokenlist: TokenList) -> Result { match NetworkName::from_str(network)? { - NetworkName::Solana => match token.to_lowercase().as_str() { + #[cfg(feature = "sol")] + NetworkName::Solana => match _token.to_lowercase().as_str() { "solana" | "sol" => { - let token_id = "So11111111111111111111111111111111111111112"; + use crate::service::sol::SOL_NATIVE_TOKEN_ID; + let token_id = SOL_NATIVE_TOKEN_ID; Ok(token_id.to_string()) } tkn => { // (== 44) can represent a Solana base58 token mint address - let id = if token.len() == 44 { - token.to_string() + let id = if _token.len() == 44 { + _token.to_string() } else { - symbol_to_id(tkn, tokenlist)? + symbol_to_id(tkn, _tokenlist)? }; Ok(id) } }, + #[cfg(feature = "btc")] NetworkName::Bitcoin => Err(Error::NetworkParseError), + _ => Err(Error::NotSupportedNetwork), } } -pub fn decimals(network: &str, token: &str, tokenlist: TokenList) -> Result { +pub fn decimals(network: &str, _token: &str, _tokenlist: TokenList) -> Result { match NetworkName::from_str(network)? { - NetworkName::Solana => match token { + #[cfg(feature = "sol")] + NetworkName::Solana => match _token { "solana" | "sol" => { let decimals = 9; Ok(decimals) } tkn => { - let decimals = tokenlist.search_decimal(tkn)?; + let decimals = _tokenlist.search_decimal(tkn)?; Ok(decimals) } }, + #[cfg(feature = "btc")] NetworkName::Bitcoin => Err(Error::NetworkParseError), + _ => Err(Error::NotSupportedNetwork), } }