From 3a0aaffe1b08740c8efa810537759ec4455d13db Mon Sep 17 00:00:00 2001 From: parazyd Date: Thu, 13 Jan 2022 14:52:47 +0100 Subject: [PATCH] bin/cashierd: Finalize features refactor. --- bin/cashierd/.gitignore | 4 +- bin/cashierd/Cargo.toml | 109 +++++++++++++++++------------ bin/cashierd/Makefile | 37 ++++++++++ bin/cashierd/src/main.rs | 33 ++++----- bin/cashierd/src/service/bridge.rs | 4 +- bin/cashierd/src/service/btc.rs | 9 ++- bin/cashierd/src/service/eth.rs | 7 +- bin/cashierd/src/service/sol.rs | 11 +-- 8 files changed, 135 insertions(+), 79 deletions(-) create mode 100644 bin/cashierd/Makefile diff --git a/bin/cashierd/.gitignore b/bin/cashierd/.gitignore index 47eeb99a3..eb5a316cb 100644 --- a/bin/cashierd/.gitignore +++ b/bin/cashierd/.gitignore @@ -1,3 +1 @@ - -/target -Cargo.lock +target diff --git a/bin/cashierd/Cargo.toml b/bin/cashierd/Cargo.toml index 079db89f6..ff9c78e12 100644 --- a/bin/cashierd/Cargo.toml +++ b/bin/cashierd/Cargo.toml @@ -1,61 +1,82 @@ [package] -name = "cashier" -version = "0.1.0" +name = "cashierd" +version = "0.2.0" edition = "2021" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[dependencies.darkfi] +path = "../../" +features = ["node", "rpc", "cli"] [dependencies] -darkfi = {path= "../../", features = ["node", "chain"]} +# Async +smol = "1.2.5" +futures = "0.3.19" +async-std = "1.10.0" +async-trait = "0.1.52" +async-channel = "1.6.1" +async-executor = "1.4.1" +easy-parallel = "3.2.0" + +# Crypto +rand = "0.8.4" + +# Misc +clap = {version = "3.0.7", features = ["derive"]} +log = "0.4.14" +num_cpus = "1.13.1" +simplelog = "0.11.2" +thiserror = "1.0.30" # Encoding and parsing -serde_json = "1.0.72" -serde = {version = "1.0.130", features = ["derive"]} -hex = "0.4.3" -url = "2.2.2" +serde = {version = "1.0.133", features = ["derive"], optional = true} +serde_json = "1.0.74" -# Utilities -clap = { version = "3.0.0", features = ["derive"] } -log = "0.4.14" -simplelog = "0.11.1" -thiserror = "1.0.30" -rand = "0.8.4" -num_cpus = "1.13.0" -lazy_static = "1.4.0" -anyhow = "1.0.49" -num-bigint = {version = "0.4.3", features = ["rand", "serde"]} - -# Used for Websockets client implementation. -async-tungstenite = "0.16.0" -tungstenite = "0.16.0" - -# Async -async-std = "1.10.0" -async-trait = "0.1.51" -async-channel = "1.6.1" -easy-parallel = "3.1.0" -async-executor = "1.4.1" -futures = "0.3.17" -smol = "1.2.5" -native-tls = "0.2.8" -async-native-tls = "0.4.0" - -# Cashier Bitcoin dependencies -bdk = {version = "0.14.0", optional = true} +# Bitcoin bridge dependencies +bdk = {version = "0.15.0", optional = true} +anyhow = {version = "1.0.52", optional = true} bitcoin = {version = "0.27.1", optional = true} -secp256k1 = {version = "0.20.3", default-features = false, features = ["rand-std"], optional = true} +secp256k1 = {version = "0.20.1", default-features = false, features = ["rand-std"], optional = true} -# Cashier Ethereum dependencies +# Ethereum bridge dependencies +hex = {version = "0.4.3", optional = true} hash-db = {version = "0.15.2", optional = true} +lazy_static = {version = "1.4.0", optional = true} keccak-hasher = {version = "0.15.3", optional = true} +num-bigint = {version = "0.4.3", features = ["rand", "serde"], optional = true} -# Cashier Solana dependencies -solana-client = {version = "1.8.11", optional = true} -solana-sdk = {version = "1.8.11", optional = true} +# Solana bridge dependencies +native-tls = {version = "0.2.8", optional = true} +async-native-tls = {version = "0.4.0", optional = true} +solana-client = {version = "1.8.12", optional = true} +solana-sdk = {version = "1.8.12", optional = true} spl-associated-token-account = {version = "1.0.3", features = ["no-entrypoint"], optional = true} spl-token = {version = "3.2.0", features = ["no-entrypoint"], optional = true} +tungstenite = {version = "0.16.0", optional = true} [features] -btc = ["bdk", "bitcoin", "secp256k1"] -eth = ["keccak-hasher", "hash-db"] -sol = ["solana-sdk", "solana-client", "spl-token", "spl-associated-token-account"] +btc = [ + "anyhow", + "bdk", + "bitcoin", + "secp256k1", +] + +eth = [ + "serde", + "num-bigint", + "keccak-hasher", + "hash-db", + "lazy_static", + "hex", +] + +sol = [ + "async-native-tls", + "native-tls", + "serde", + "solana-client", + "solana-sdk", + "spl-associated-token-account", + "spl-token", + "tungstenite", +] diff --git a/bin/cashierd/Makefile b/bin/cashierd/Makefile new file mode 100644 index 000000000..fd9ef7cd7 --- /dev/null +++ b/bin/cashierd/Makefile @@ -0,0 +1,37 @@ +.POSIX: + +# Cargo binary +CARGO = cargo + +# Binary to be built +BIN = cashierd + +# Dependencies which should force the binaries to be rebuilt +BINDEPS = \ + Cargo.toml \ + $(shell find src -type f) \ + $(shell find ../../sql -type f) \ + $(shell find ../../contrib/token -type f) + +all: $(BIN) + +$(BIN): $(BINDEPS) + $(CARGO) build --release --all-features + cp -f target/release/$@ $@ + +check: $(BINDEPS) + $(CARGO) hack check --release --feature-powerset --no-dev-deps + +fix: + $(CARGO) clippy --release --all-features --fix --allow-dirty + +clippy: + $(CARGO) clippy --release --all-features + +test: + $(CARGO) test --release --all-features + +clean: + rm -f $(BIN) + +.PHONY: all check fix clippy test clean diff --git a/bin/cashierd/src/main.rs b/bin/cashierd/src/main.rs index b6acc17f9..c78d60ff8 100644 --- a/bin/cashierd/src/main.rs +++ b/bin/cashierd/src/main.rs @@ -11,35 +11,30 @@ use serde_json::{json, Value}; use simplelog::{ColorChoice, LevelFilter, TermLogger, TerminalMode}; use darkfi::{ - chain::{rocks::columns, Rocks, RocksColumn}, + blockchain::{rocks::columns, Rocks, RocksColumn}, cli::{CashierdConfig, CliCashierd, Config}, crypto::{ + address::Address, keypair::{PublicKey, SecretKey}, proof::VerifyingKey, + token_id::generate_id2, + types::DrkTokenId, }, node::{ client::Client, state::State, wallet::{cashierdb::CashierDb, walletdb::WalletDb}, }, - serial::serialize, - types::DrkTokenId, - util::{ - expand_path, generate_id2, join_config_path, - parse::truncate, - rpc::{ - jsonrpc::{ - error as jsonerr, response as jsonresp, ErrorCode::*, JsonRequest, JsonResult, - }, - rpcserver::{listen_and_serve, RequestHandler, RpcServerConfig}, - }, - Address, NetworkName, + rpc::{ + jsonrpc::{error as jsonerr, response as jsonresp, ErrorCode::*, JsonRequest, JsonResult}, + rpcserver::{listen_and_serve, RequestHandler, RpcServerConfig}, }, + util::{expand_path, join_config_path, parse::truncate, serial::serialize, NetworkName}, zk::circuit::{MintContract, SpendContract}, Error, Result, }; -use cashier::service::{bridge, bridge::Bridge}; +use cashierd::service::{bridge, bridge::Bridge}; fn handle_bridge_error(error_code: u32) -> Result<()> { match error_code { @@ -123,7 +118,7 @@ impl Cashierd { #[cfg(feature = "sol")] NetworkName::Solana => { debug!(target: "CASHIER DAEMON", "Adding solana network"); - use cashier::service::SolClient; + use cashierd::service::SolClient; let _bridge = self.bridge.clone(); @@ -141,7 +136,7 @@ impl Cashierd { NetworkName::Ethereum => { debug!(target: "CASHIER DAEMON", "Adding ethereum network"); - use cashier::service::EthClient; + use cashierd::service::EthClient; let _bridge = self.bridge.clone(); @@ -161,7 +156,7 @@ impl Cashierd { #[cfg(feature = "btc")] NetworkName::Bitcoin => { debug!(target: "CASHIER DAEMON", "Adding bitcoin network"); - use cashier::service::btc::BtcClient; + use cashierd::service::btc::BtcClient; let _bridge = self.bridge.clone(); @@ -306,7 +301,7 @@ impl Cashierd { match network { #[cfg(feature = "sol")] NetworkName::Solana => { - use cashier::service::sol::SOL_NATIVE_TOKEN_ID; + use cashierd::service::sol::SOL_NATIVE_TOKEN_ID; if _token_id != SOL_NATIVE_TOKEN_ID { return Ok(Some(_token_id.to_string())) } @@ -314,7 +309,7 @@ impl Cashierd { } #[cfg(feature = "eth")] NetworkName::Ethereum => { - use cashier::service::eth::ETH_NATIVE_TOKEN_ID; + use cashierd::service::eth::ETH_NATIVE_TOKEN_ID; if _token_id != ETH_NATIVE_TOKEN_ID { return Ok(Some(_token_id.to_string())) } diff --git a/bin/cashierd/src/service/bridge.rs b/bin/cashierd/src/service/bridge.rs index cb87991e3..aaa96c5d9 100644 --- a/bin/cashierd/src/service/bridge.rs +++ b/bin/cashierd/src/service/bridge.rs @@ -7,7 +7,9 @@ use futures::stream::{FuturesUnordered, StreamExt}; use log::{debug, error}; use darkfi::{ - crypto::keypair::PublicKey, node::wallet::cashierdb::TokenKey, types::*, util::NetworkName, + crypto::{keypair::PublicKey, types::*}, + node::wallet::cashierdb::TokenKey, + util::NetworkName, Error, Result, }; diff --git a/bin/cashierd/src/service/btc.rs b/bin/cashierd/src/service/btc.rs index 5fb3f7796..45ace78f6 100644 --- a/bin/cashierd/src/service/btc.rs +++ b/bin/cashierd/src/service/btc.rs @@ -42,10 +42,13 @@ use secp256k1::{ use super::bridge::{NetworkClient, TokenNotification, TokenSubscribtion}; use darkfi::{ - crypto::keypair::PublicKey as DrkPublicKey, + crypto::{keypair::PublicKey as DrkPublicKey, token_id::generate_id2}, node::wallet::cashierdb::{CashierDb, TokenKey}, - serial::{deserialize, serialize, Decodable, Encodable}, - util::{expand_path, generate_id2, load_keypair_to_str, NetworkName}, + util::{ + expand_path, load_keypair_to_str, + serial::{deserialize, serialize, Decodable, Encodable}, + NetworkName, + }, Error, Result, }; diff --git a/bin/cashierd/src/service/eth.rs b/bin/cashierd/src/service/eth.rs index e4e944c3c..6615f56ba 100644 --- a/bin/cashierd/src/service/eth.rs +++ b/bin/cashierd/src/service/eth.rs @@ -14,13 +14,12 @@ use serde_json::{json, Value}; use super::bridge::{NetworkClient, TokenNotification, TokenSubscribtion}; use darkfi::{ - crypto::keypair::PublicKey, + crypto::{keypair::PublicKey, token_id::generate_id2}, node::wallet::cashierdb::{CashierDb, TokenKey}, - serial::{deserialize, serialize, Decodable, Encodable}, + rpc::{jsonrpc, jsonrpc::JsonResult}, util::{ - generate_id2, parse::truncate, - rpc::{jsonrpc, jsonrpc::JsonResult}, + serial::{deserialize, serialize, Decodable, Encodable}, sleep, NetworkName, }, Error, Result, diff --git a/bin/cashierd/src/service/sol.rs b/bin/cashierd/src/service/sol.rs index 43104301d..630c9cf5d 100644 --- a/bin/cashierd/src/service/sol.rs +++ b/bin/cashierd/src/service/sol.rs @@ -24,15 +24,16 @@ use tungstenite::Message; use super::bridge::{NetworkClient, TokenNotification, TokenSubscribtion}; use darkfi::{ - crypto::keypair::PublicKey, + crypto::{keypair::PublicKey, token_id::generate_id2}, node::wallet::cashierdb::{CashierDb, TokenKey}, - serial::{deserialize, serialize, Decodable, Encodable}, + rpc::{jsonrpc, jsonrpc::JsonResult, websockets, websockets::WsStream}, util::{ - expand_path, generate_id2, load_keypair_to_str, + expand_path, load_keypair_to_str, parse::truncate, - rpc::{jsonrpc, jsonrpc::JsonResult, websockets, websockets::WsStream}, - sleep, Error, NetworkName, Result, + serial::{deserialize, serialize, Decodable, Encodable}, + sleep, NetworkName, }, + Error, Result, }; pub const SOL_NATIVE_TOKEN_ID: &str = "So11111111111111111111111111111111111111112";