|
@@ -1,9 +1,11 @@
|
|
|
-use async_std::sync::{Arc, Mutex};
|
|
|
|
|
use async_trait::async_trait;
|
|
use async_trait::async_trait;
|
|
|
use clap::clap_app;
|
|
use clap::clap_app;
|
|
|
use log::debug;
|
|
use log::debug;
|
|
|
use serde_json::{json, Value};
|
|
use serde_json::{json, Value};
|
|
|
|
|
+
|
|
|
|
|
+use async_std::sync::{Arc, Mutex};
|
|
|
use std::path::PathBuf;
|
|
use std::path::PathBuf;
|
|
|
|
|
+use std::str::FromStr;
|
|
|
//use std::sync::Arc;
|
|
//use std::sync::Arc;
|
|
|
|
|
|
|
|
use drk::{
|
|
use drk::{
|
|
@@ -16,6 +18,7 @@ use drk::{
|
|
|
rpcserver::{listen_and_serve, RequestHandler, RpcServerConfig},
|
|
rpcserver::{listen_and_serve, RequestHandler, RpcServerConfig},
|
|
|
},
|
|
},
|
|
|
serial::{deserialize, serialize},
|
|
serial::{deserialize, serialize},
|
|
|
|
|
+ service::NetworkName,
|
|
|
util::{expand_path, generate_id, join_config_path},
|
|
util::{expand_path, generate_id, join_config_path},
|
|
|
wallet::WalletDb,
|
|
wallet::WalletDb,
|
|
|
Error, Result,
|
|
Error, Result,
|
|
@@ -214,6 +217,18 @@ impl Darkfid {
|
|
|
let network = &args[0];
|
|
let network = &args[0];
|
|
|
let token = &args[1];
|
|
let token = &args[1];
|
|
|
|
|
|
|
|
|
|
+ if token.as_str().is_none() {
|
|
|
|
|
+ return JsonResult::Err(jsonerr(InvalidParams, None, id));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ let token = token.as_str().unwrap();
|
|
|
|
|
+
|
|
|
|
|
+ if network.as_str().is_none() {
|
|
|
|
|
+ return JsonResult::Err(jsonerr(InvalidParams, None, id));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ let network = network.as_str().unwrap();
|
|
|
|
|
+
|
|
|
let token_id = match self.parse_network(&network, &token) {
|
|
let token_id = match self.parse_network(&network, &token) {
|
|
|
Ok(t) => t,
|
|
Ok(t) => t,
|
|
|
Err(_e) => {
|
|
Err(_e) => {
|
|
@@ -314,6 +329,12 @@ impl Darkfid {
|
|
|
let address = &args[1];
|
|
let address = &args[1];
|
|
|
let amount = &args[2];
|
|
let amount = &args[2];
|
|
|
|
|
|
|
|
|
|
+ if token.as_str().is_none() {
|
|
|
|
|
+ return JsonResult::Err(jsonerr(InvalidParams, None, id));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ let token = address.as_str().unwrap();
|
|
|
|
|
+
|
|
|
if address.as_str().is_none() {
|
|
if address.as_str().is_none() {
|
|
|
return JsonResult::Err(jsonerr(InvalidParams, None, id));
|
|
return JsonResult::Err(jsonerr(InvalidParams, None, id));
|
|
|
}
|
|
}
|
|
@@ -345,38 +366,35 @@ impl Darkfid {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- fn parse_wrapped_token(&self, token: &Value) -> Result<jubjub::Fr> {
|
|
|
|
|
- match token.as_str() {
|
|
|
|
|
- Some("sol") | Some("SOL") => {
|
|
|
|
|
|
|
+ fn parse_wrapped_token(&self, token: &str) -> Result<jubjub::Fr> {
|
|
|
|
|
+ match token.to_lowercase().as_str() {
|
|
|
|
|
+ "sol" => {
|
|
|
let id = "So11111111111111111111111111111111111111112";
|
|
let id = "So11111111111111111111111111111111111111112";
|
|
|
let token_id = generate_id(id)?;
|
|
let token_id = generate_id(id)?;
|
|
|
Ok(token_id)
|
|
Ok(token_id)
|
|
|
}
|
|
}
|
|
|
- Some("btc") | Some("BTC") => Err(Error::TokenParseError),
|
|
|
|
|
- Some(tkn) => {
|
|
|
|
|
|
|
+ "btc" => Err(Error::TokenParseError),
|
|
|
|
|
+ tkn => {
|
|
|
let id = self.symbol_to_id(tkn)?;
|
|
let id = self.symbol_to_id(tkn)?;
|
|
|
let token_id = generate_id(id.as_str().unwrap())?;
|
|
let token_id = generate_id(id.as_str().unwrap())?;
|
|
|
Ok(token_id)
|
|
Ok(token_id)
|
|
|
}
|
|
}
|
|
|
- None => Err(Error::TokenParseError),
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- fn parse_network(&self, network: &Value, token: &Value) -> Result<Value> {
|
|
|
|
|
- match network.as_str() {
|
|
|
|
|
- Some("solana") | Some("sol") => match token.as_str() {
|
|
|
|
|
- Some("solana") | Some("sol") => {
|
|
|
|
|
|
|
+ fn parse_network(&self, network: &str, token: &str) -> Result<Value> {
|
|
|
|
|
+ match NetworkName::from_str(network)? {
|
|
|
|
|
+ NetworkName::Solana => match token.to_lowercase().as_str() {
|
|
|
|
|
+ "solana" | "sol" => {
|
|
|
let token_id = "So11111111111111111111111111111111111111112";
|
|
let token_id = "So11111111111111111111111111111111111111112";
|
|
|
Ok(json!(token_id))
|
|
Ok(json!(token_id))
|
|
|
}
|
|
}
|
|
|
- Some(tkn) => {
|
|
|
|
|
|
|
+ tkn => {
|
|
|
let id = self.symbol_to_id(tkn)?;
|
|
let id = self.symbol_to_id(tkn)?;
|
|
|
Ok(id)
|
|
Ok(id)
|
|
|
}
|
|
}
|
|
|
- None => Err(Error::TokenParseError),
|
|
|
|
|
},
|
|
},
|
|
|
- Some("bitcoin") | Some("btc") => Err(Error::NetworkParseError),
|
|
|
|
|
- Some(_) | None => Err(Error::NetworkParseError),
|
|
|
|
|
|
|
+ NetworkName::Bitcoin => Err(Error::NetworkParseError),
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -384,25 +402,21 @@ impl Darkfid {
|
|
|
// SOL uses conversion function soltolamport()
|
|
// SOL uses conversion function soltolamport()
|
|
|
// or there are decimals in the token info
|
|
// or there are decimals in the token info
|
|
|
// TODO: how to organize these functions more logically w less repetition?
|
|
// TODO: how to organize these functions more logically w less repetition?
|
|
|
- fn parse_params(&self, network: &Value, token: &Value, amount: &Value) -> Result<Value> {
|
|
|
|
|
- match network.as_str() {
|
|
|
|
|
- Some("solana") | Some("sol") => match token.as_str() {
|
|
|
|
|
- Some("solana") | Some("sol") => {
|
|
|
|
|
|
|
+ fn parse_params(&self, network: &str, token: &str, amount: u64 ) -> Result<Value> {
|
|
|
|
|
+ match NetworkName::from_str(network)? {
|
|
|
|
|
+ NetworkName::Solana => match token {
|
|
|
|
|
+ "solana" | "sol" => {
|
|
|
let token_id = "So11111111111111111111111111111111111111112";
|
|
let token_id = "So11111111111111111111111111111111111111112";
|
|
|
- let amount = amount.as_u64().unwrap();
|
|
|
|
|
let amount_in_apo: u64 = amount * 10 ^ 8;
|
|
let amount_in_apo: u64 = amount * 10 ^ 8;
|
|
|
Ok(json![(token_id, amount_in_apo)])
|
|
Ok(json![(token_id, amount_in_apo)])
|
|
|
}
|
|
}
|
|
|
- Some(tkn) => {
|
|
|
|
|
|
|
+ tkn => {
|
|
|
let token_id = self.symbol_to_id(tkn)?;
|
|
let token_id = self.symbol_to_id(tkn)?;
|
|
|
- let amount = amount.as_u64().unwrap();
|
|
|
|
|
let amount_in_apo: u64 = amount * 10 ^ 8;
|
|
let amount_in_apo: u64 = amount * 10 ^ 8;
|
|
|
Ok(json![(token_id, amount_in_apo)])
|
|
Ok(json![(token_id, amount_in_apo)])
|
|
|
}
|
|
}
|
|
|
- None => Err(Error::TokenParseError),
|
|
|
|
|
},
|
|
},
|
|
|
- Some("bitcoin") | Some("btc") => Err(Error::NetworkParseError),
|
|
|
|
|
- Some(_) | None => Err(Error::NetworkParseError),
|
|
|
|
|
|
|
+ NetworkName::Bitcoin => Err(Error::NetworkParseError),
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|