diff --git a/src/bin/cashierd.rs b/src/bin/cashierd.rs index 7518e4d35..de1638068 100644 --- a/src/bin/cashierd.rs +++ b/src/bin/cashierd.rs @@ -17,10 +17,6 @@ use drk::{ use clap::clap_app; use log::*; use serde_json::{json, Value}; -use simplelog::{ - CombinedLogger, Config as SimLogConfig, ConfigBuilder, LevelFilter, TermLogger, TerminalMode, - WriteLogger, -}; use async_executor::Executor; use ff::Field; @@ -372,35 +368,20 @@ async fn main() -> Result<()> { ) .get_matches(); - let config_path: PathBuf; - - if args.is_present("CONFIG") { - config_path = PathBuf::from(args.value_of("CONFIG").unwrap()); + let config_path = if args.is_present("CONFIG") { + PathBuf::from(args.value_of("CONFIG").unwrap()) } else { - config_path = join_config_path(&PathBuf::from("cashierd.toml"))?; - } - - let ex = Arc::new(Executor::new()); - - let cashierd = Cashierd::new(args.clone().is_present("verbose"), ex.clone(), config_path)?; - - let logger_config = ConfigBuilder::new().set_time_format_str("%T%.6f").build(); - let debug_level = if args.is_present("verbose") { - LevelFilter::Debug - } else { - LevelFilter::Off + join_config_path(&PathBuf::from("cashierd.toml"))? }; - let log_path = cashierd.clone().config.log_path; - CombinedLogger::init(vec![ - TermLogger::new(debug_level, logger_config, TerminalMode::Mixed).unwrap(), - WriteLogger::new( - LevelFilter::Debug, - SimLogConfig::default(), - std::fs::File::create(log_path).unwrap(), - ), - ]) - .unwrap(); + let loglevel = if args.is_present("verbose") { + log::Level::Debug + } else { + log::Level::Info + }; + simple_logger::init_with_level(loglevel)?; + let ex = Arc::new(Executor::new()); + let cashierd = Cashierd::new(args.clone().is_present("verbose"), ex.clone(), config_path)?; cashierd.start().await } diff --git a/src/bin/darkfid.rs b/src/bin/darkfid.rs index 1a5b74b8d..3a1ee4475 100644 --- a/src/bin/darkfid.rs +++ b/src/bin/darkfid.rs @@ -1,14 +1,9 @@ -use std::path::PathBuf; -use std::sync::Arc; - use async_trait::async_trait; use clap::clap_app; use log::debug; use serde_json::{json, Value}; -use simplelog::{ - CombinedLogger, Config as SimLogConfig, ConfigBuilder, LevelFilter, TermLogger, TerminalMode, - WriteLogger, -}; +use std::path::PathBuf; +use std::sync::Arc; use drk::{ cli::{Config, DarkfidConfig}, @@ -25,7 +20,6 @@ use drk::{ #[derive(Clone)] struct Darkfid { - verbose: bool, config: DarkfidConfig, wallet: Arc, tokenlist: Value, @@ -60,7 +54,7 @@ impl RequestHandler for Darkfid { } impl Darkfid { - fn new(verbose: bool, config_path: PathBuf) -> Result { + fn new(config_path: PathBuf) -> Result { let config: DarkfidConfig = Config::::load(config_path)?; let wallet_path = join_config_path(&PathBuf::from("walletdb.db"))?; let wallet = WalletDb::new(&PathBuf::from(wallet_path.clone()), config.password.clone())?; @@ -68,7 +62,6 @@ impl Darkfid { let tokenlist: Value = serde_json::from_str(&file_contents)?; Ok(Self { - verbose, config, wallet, tokenlist, @@ -118,9 +111,7 @@ impl Darkfid { } } - // --> {"jsonrpc": "2.0", "method": "get_token_id", - // "params": [token], - // "id": 42} + // --> {"method": "get_token_id", "params": [token]} // <-- {"result": "Ht5G1RhkcKnpLVLMhqJc5aqZ4wYUEbxbtZwGCVbgU7DL"} async fn get_token_id(&self, id: Value, params: Value) -> JsonResult { let args = params.as_array().unwrap(); @@ -151,8 +142,8 @@ impl Darkfid { unreachable!(); } - // --> {"jsonrpc": "2.0", "method": "features", "params": [], "id": 42} - // <-- {"jsonrpc": "2.0", "result": ["network": "btc", "sol"], "id": 42} + // --> {""method": "features", "params": []} + // <-- {"result": { "network": ["btc", "sol"] } } async fn features(&self, id: Value, _params: Value) -> JsonResult { // TODO: return a dictionary of features let req = jsonreq(json!("features"), json!([])); @@ -171,9 +162,7 @@ impl Darkfid { } } - // --> {"jsonrpc": "2.0", "method": "deposit", - // "params": [network, token, publickey], - // "id": 42} + // --> {"method": "deposit", "params": [network, token, publickey]} // The publickey sent here is used so the cashier can know where to send // assets once the deposit is received. // <-- {"result": "Ht5G1RhkcKnpLVLMhqJc5aqZ4wYUEbxbtZwGCVbgU7DL"} @@ -194,7 +183,7 @@ impl Darkfid { // check if the token input is an ID // if not, find the associated ID - // TODO + // TODO //let _token_id = self.clone().parse_token(tkn_str); // TODO: Optional sanity checking here, but cashier *must* do so too. @@ -296,41 +285,30 @@ async fn main() -> Result<()> { ) .get_matches(); - let config_path: PathBuf; - if args.is_present("CONFIG") { - config_path = PathBuf::from(args.value_of("CONFIG").unwrap()); + let config_path = if args.is_present("CONFIG") { + PathBuf::from(args.value_of("CONFIG").unwrap()) } else { - config_path = join_config_path(&PathBuf::from("darkfid.toml"))?; - } - - let logger_config = ConfigBuilder::new().set_time_format_str("%T%.6f").build(); - let debug_level = if args.is_present("verbose") { - LevelFilter::Debug - } else { - LevelFilter::Off + join_config_path(&PathBuf::from("darkfid.toml"))? }; - let dfi = Darkfid::new(args.is_present("verbose"), config_path)?; + let loglevel = if args.is_present("verbose") { + log::Level::Debug + } else { + log::Level::Info + }; - let cfg = RpcServerConfig { + simple_logger::init_with_level(loglevel)?; + + let dfi = Darkfid::new(config_path)?; + + let server_config = RpcServerConfig { socket_addr: dfi.config.clone().rpc_url, use_tls: dfi.config.use_tls, identity_path: dfi.config.clone().tls_identity_path, identity_pass: dfi.config.clone().tls_identity_password, }; - let log_path = &dfi.config.log_path; - CombinedLogger::init(vec![ - TermLogger::new(debug_level, logger_config, TerminalMode::Mixed).unwrap(), - WriteLogger::new( - LevelFilter::Debug, - SimLogConfig::default(), - std::fs::File::create(log_path).unwrap(), - ), - ]) - .unwrap(); - - listen_and_serve(cfg, dfi).await + listen_and_serve(server_config, dfi).await } mod tests { diff --git a/src/bin/drk.rs b/src/bin/drk.rs index 0db95f6e1..ad14ba5a9 100644 --- a/src/bin/drk.rs +++ b/src/bin/drk.rs @@ -1,12 +1,7 @@ -use log::debug; -use std::path::PathBuf; - use clap::{clap_app, ArgMatches}; +use log::debug; use serde_json::{json, Value}; -use simplelog::{ - CombinedLogger, Config as SimplelogConfig, ConfigBuilder, LevelFilter, TermLogger, - TerminalMode, WriteLogger, -}; +use std::path::PathBuf; use drk::cli::{Config, DrkConfig}; use drk::util::join_config_path; @@ -23,7 +18,7 @@ impl Drk { async fn request(&self, r: jsonrpc::JsonRequest) -> Result { let reply: JsonResult; - debug!(target: "DRK", "--> {:#?}", serde_json::to_string(&r)?); + debug!(target: "DRK", "--> {}", serde_json::to_string(&r)?); match jsonrpc::send_request(&self.url, json!(r)).await { Ok(v) => reply = v, Err(e) => return Err(e), @@ -31,17 +26,17 @@ impl Drk { match reply { JsonResult::Resp(r) => { - debug!(target: "DRK", "<-- {:#?}", serde_json::to_string(&r)?); + debug!(target: "DRK", "<-- {}", serde_json::to_string(&r)?); return Ok(r.result); } JsonResult::Err(e) => { - debug!(target: "DRK", "<-- {:#?}", serde_json::to_string(&e)?); + debug!(target: "DRK", "<-- {}", serde_json::to_string(&e)?); return Err(Error::JsonRpcError(e.error.message.to_string())); } JsonResult::Notif(n) => { - debug!(target: "DRK", "<-- {:#?}", serde_json::to_string(&n)?); + debug!(target: "DRK", "<-- {}", serde_json::to_string(&n)?); return Err(Error::JsonRpcError("Unexpected reply".to_string())); } } @@ -260,34 +255,20 @@ async fn main() -> Result<()> { ) .get_matches(); - let config_path: PathBuf; - if args.is_present("CONFIG") { - config_path = PathBuf::from(args.value_of("CONFIG").unwrap()); + let config_path = if args.is_present("CONFIG") { + PathBuf::from(args.value_of("CONFIG").unwrap()) } else { - config_path = join_config_path(&PathBuf::from("drk.toml"))?; - } - - let config = Config::::load(config_path)?; - - let logger_config = ConfigBuilder::new().set_time_format_str("%T%.6f").build(); - - let debug_level = if args.is_present("verbose") { - LevelFilter::Debug - } else { - LevelFilter::Off + join_config_path(&PathBuf::from("drk.toml"))? }; - let log_path = config.log_path.clone(); + let loglevel = if args.is_present("verbose") { + log::Level::Debug + } else { + log::Level::Info + }; - CombinedLogger::init(vec![ - TermLogger::new(debug_level, logger_config, TerminalMode::Mixed).unwrap(), - WriteLogger::new( - LevelFilter::Debug, - SimplelogConfig::default(), - std::fs::File::create(log_path).unwrap(), - ), - ]) - .unwrap(); + simple_logger::init_with_level(loglevel)?; + let config = Config::::load(config_path)?; start(&config, args).await } diff --git a/src/bin/gatewayd.rs b/src/bin/gatewayd.rs index c9f112878..2b9bec233 100644 --- a/src/bin/gatewayd.rs +++ b/src/bin/gatewayd.rs @@ -1,16 +1,17 @@ +use async_executor::Executor; +use clap::clap_app; +use easy_parallel::Parallel; use std::net::SocketAddr; +use std::path::PathBuf; use std::sync::Arc; -use drk::blockchain::{rocks::columns, Rocks, RocksColumn}; -use drk::cli::{Config, GatewaydCli, GatewaydConfig}; -use drk::service::GatewayService; -use drk::util::join_config_path; -use drk::Result; -use std::path::PathBuf; - -extern crate clap; -use async_executor::Executor; -use easy_parallel::Parallel; +use drk::{ + blockchain::{rocks::columns, Rocks, RocksColumn}, + cli::{Config, GatewaydConfig}, + service::GatewayService, + util::join_config_path, + Result, +}; async fn start(executor: Arc>, config: Arc<&GatewaydConfig>) -> Result<()> { let accept_addr: SocketAddr = config.accept_url.parse()?; @@ -22,44 +23,38 @@ async fn start(executor: Arc>, config: Arc<&GatewaydConfig>) -> Res let gateway = GatewayService::new(accept_addr, pub_addr, rocks_slabstore_column)?; - gateway.start(executor.clone()).await?; - Ok(()) + Ok(gateway.start(executor.clone()).await?) } -fn main() -> Result<()> { +#[async_std::main] +async fn main() -> Result<()> { + let args = clap_app!(gatewayd => + (@arg CONFIG: -c --config +takes_value "Sets a custom config file") + (@arg verbose: -v --verbose "Increase verbosity") + ) + .get_matches(); + + let config_path = if args.is_present("CONFIG") { + PathBuf::from(args.value_of("CONFIG").unwrap()) + } else { + join_config_path(&PathBuf::from("gatewayd.toml"))? + }; + + let loglevel = if args.is_present("verbose") { + log::Level::Debug + } else { + log::Level::Info + }; + + simple_logger::init_with_level(loglevel)?; + let ex = Arc::new(Executor::new()); let (signal, shutdown) = async_channel::unbounded::<()>(); - let path = join_config_path(&PathBuf::from("gatewayd.toml"))?; - - let config: GatewaydConfig = Config::::load(path)?; + let config: GatewaydConfig = Config::::load(config_path)?; let config_ptr = Arc::new(&config); - let options = GatewaydCli::load()?; - - { - use simplelog::*; - let logger_config = ConfigBuilder::new().set_time_format_str("%T%.6f").build(); - - let debug_level = if options.verbose { - LevelFilter::Debug - } else { - LevelFilter::Off - }; - - let log_path = config.log_path.clone(); - CombinedLogger::init(vec![ - TermLogger::new(debug_level, logger_config, TerminalMode::Mixed).unwrap(), - WriteLogger::new( - LevelFilter::Debug, - Config::default(), - std::fs::File::create(log_path).unwrap(), - ), - ]) - .unwrap(); - } - let ex2 = ex.clone(); let (_, result) = Parallel::new() diff --git a/src/bin/mint.rs b/src/bin/mint.rs index 15a1d57e5..6af246873 100644 --- a/src/bin/mint.rs +++ b/src/bin/mint.rs @@ -7,7 +7,8 @@ use ff::{Field, PrimeField}; use group::{Curve, Group}; use rand::rngs::OsRng; -type Result = std::result::Result; +//type Result = std::result::Result; +use drk::Result; // Unpack a value (such as jubjub::Fr) into 256 Scalar binary digits fn unpack(value: F) -> Vec { diff --git a/src/error.rs b/src/error.rs index 428d32c57..cb05046c2 100644 --- a/src/error.rs +++ b/src/error.rs @@ -61,6 +61,7 @@ pub enum Error { Base58EncodeError(String), Base58DecodeError(String), ConfigNotFound, + SetLoggerError, } impl std::error::Error for Error {} @@ -123,6 +124,7 @@ impl fmt::Display for Error { Error::ConfigNotFound => { f.write_str("No config file detected. Please create a config file") } + Error::SetLoggerError => f.write_str("SetLoggerError"), } } } @@ -266,3 +268,9 @@ impl From for Error { Error::Base58DecodeError(err.to_string()) } } + +impl From for Error { + fn from(_err: log::SetLoggerError) -> Error { + Error::SetLoggerError + } +} diff --git a/src/util.rs b/src/util.rs index ba28db6db..14d1a7860 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,12 +1,13 @@ -use crate::Result; -use crate::serial::{deserialize, serialize}; - -use sha2::{Digest, Sha256}; +use log::debug; use serde_json::Value; -use log::*; - +use sha2::{Digest, Sha256}; use std::path::{Path, PathBuf}; +use crate::{ + serial::{deserialize, serialize}, + Result, +}; + pub fn join_config_path(file: &PathBuf) -> Result { let mut path = PathBuf::new(); let dfi_path = Path::new("darkfi"); @@ -55,8 +56,6 @@ pub fn parse_id(token: &Value) -> Result { unreachable!(); } - - #[cfg(test)] mod tests { use crate::serial::{deserialize, serialize};