From 9d1a39b2ff06df51648ec495085ea17f30f37ea1 Mon Sep 17 00:00:00 2001 From: Lorenzo Tucci Date: Wed, 11 Jan 2023 14:52:42 +0100 Subject: [PATCH] fixing formatting and cargo clippy warnings --- monero-rpc/src/monerod.rs | 2 +- swap/Cargo.toml | 4 +- swap/src/api.rs | 27 ++--- swap/src/api/request.rs | 195 ++++++++++++++++++++---------- swap/src/bitcoin/wallet.rs | 4 +- swap/src/cli/cancel_and_refund.rs | 4 +- swap/src/cli/command.rs | 156 +++++++++++++++++------- swap/src/database/sqlite.rs | 18 +-- swap/src/monero.rs | 2 +- swap/src/rpc.rs | 4 +- swap/src/rpc/methods.rs | 82 ++++++++----- swap/src/seed.rs | 2 +- swap/tests/rpc.rs | 83 ++++++++----- 13 files changed, 374 insertions(+), 209 deletions(-) diff --git a/monero-rpc/src/monerod.rs b/monero-rpc/src/monerod.rs index 830aafdb..5aef523f 100644 --- a/monero-rpc/src/monerod.rs +++ b/monero-rpc/src/monerod.rs @@ -194,7 +194,7 @@ mod monero_serde_hex_block { { let hex = String::deserialize(deserializer)?; - let bytes = hex::decode(&hex).map_err(D::Error::custom)?; + let bytes = hex::decode(hex).map_err(D::Error::custom)?; let mut cursor = Cursor::new(bytes); let block = monero::Block::consensus_decode(&mut cursor).map_err(D::Error::custom)?; diff --git a/swap/Cargo.toml b/swap/Cargo.toml index ac40f4c3..39651e52 100644 --- a/swap/Cargo.toml +++ b/swap/Cargo.toml @@ -79,17 +79,17 @@ zip = "0.5" bitcoin-harness = "0.2.2" get-port = "3" hyper = "0.14" -monero-harness = { path = "../monero-harness" } jsonrpsee = { version = "0.16.2", features = [ "ws-client" ] } jsonrpsee-types = { version = "0.16.2" } +monero-harness = { path = "../monero-harness" } port_check = "0.1" proptest = "1" +sequential-test = "0.2.4" serde_cbor = "0.11" serial_test = "0.10" spectral = "0.6" tempfile = "3" testcontainers = "0.12" -sequential-test = "0.2.4" [build-dependencies] anyhow = "1" diff --git a/swap/src/api.rs b/swap/src/api.rs index 638fc8a8..971fce06 100644 --- a/swap/src/api.rs +++ b/swap/src/api.rs @@ -11,10 +11,9 @@ use anyhow::{Context as AnyContext, Result}; use std::fmt; use std::net::SocketAddr; use std::path::PathBuf; -use std::sync::{Arc}; -use url::Url; -use std::sync::Once; +use std::sync::{Arc, Once}; use tokio::sync::{broadcast, Mutex}; +use url::Url; static START: Once = Once::new(); @@ -42,7 +41,6 @@ pub struct Context { pub shutdown: Arc>, } - impl Context { pub async fn build( bitcoin: Option, @@ -91,19 +89,12 @@ impl Context { } }; - let tor_socks5_port = { - if let Some(tor) = tor { - Some(tor.tor_socks5_port) - } else { - None - } - }; + let tor_socks5_port = tor.map(|tor| tor.tor_socks5_port); START.call_once(|| { let _ = cli::tracing::init(debug, json, data_dir.join("logs"), None); }); - let init = Context { db: open_db(data_dir.join("sqlite")).await?, bitcoin_wallet, @@ -125,16 +116,14 @@ impl Context { Ok(init) } - } impl fmt::Debug for Context { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "Testing {}", true) + write!(f, "") } } - async fn init_bitcoin_wallet( electrum_rpc_url: Url, seed: &Seed, @@ -159,7 +148,6 @@ async fn init_bitcoin_wallet( Ok(wallet) } - async fn init_monero_wallet( data_dir: PathBuf, monero_daemon_address: String, @@ -213,12 +201,12 @@ fn env_config_from(testnet: bool) -> EnvConfig { } #[cfg(test)] pub mod api_test { + use crate::api::request::{Method, Params, Request, Shutdown}; use crate::tor::DEFAULT_SOCKS5_PORT; - use std::str::FromStr; - use uuid::Uuid; - use crate::api::request::{Request, Params, Method, Shutdown}; use libp2p::Multiaddr; + use std::str::FromStr; use tokio::sync::broadcast; + use uuid::Uuid; pub const MULTI_ADDRESS: &str = "/ip4/127.0.0.1/tcp/9939/p2p/12D3KooWCdMKjesXMJz1SiZ7HgotrxuqhQJbP5sgBm2BwP1cqThi"; @@ -251,7 +239,6 @@ pub mod api_test { is_testnet, } } - } impl Request { pub fn buy_xmr(is_testnet: bool, tx: broadcast::Sender<()>) -> Request { diff --git a/swap/src/api/request.rs b/swap/src/api/request.rs index d56ef473..35372e47 100644 --- a/swap/src/api/request.rs +++ b/swap/src/api/request.rs @@ -1,10 +1,11 @@ +use crate::api::Context; use crate::bitcoin::{Amount, TxLock}; use crate::cli::{list_sellers, EventLoop, SellerStatus}; use crate::libp2p_ext::MultiAddrExt; use crate::network::quote::{BidQuote, ZeroQuoteReceived}; use crate::network::swarm; -use crate::protocol::bob::{BobState, Swap}; use crate::protocol::bob; +use crate::protocol::bob::{BobState, Swap}; use crate::{bitcoin, cli, monero, rpc}; use anyhow::{bail, Context as AnyContext, Result}; use libp2p::core::Multiaddr; @@ -16,10 +17,8 @@ use std::convert::TryInto; use std::future::Future; use std::sync::Arc; use std::time::Duration; -use uuid::Uuid; -use crate::api::Context; use tokio::sync::broadcast; - +use uuid::Uuid; #[derive(PartialEq, Debug)] pub struct Request { @@ -61,11 +60,11 @@ impl Shutdown { #[derive(Debug)] pub struct Shutdown { shutdown: bool, - notify: broadcast::Receiver<()> + notify: broadcast::Receiver<()>, } impl PartialEq for Shutdown { - fn eq(&self, other: &Shutdown) -> bool { + fn eq(&self, other: &Shutdown) -> bool { self.shutdown == other.shutdown } } @@ -81,7 +80,6 @@ pub struct Params { pub address: Option, } - #[derive(Debug, PartialEq)] pub enum Method { BuyXmr, @@ -93,8 +91,7 @@ pub enum Method { GetSeller, SwapStartDate, Resume, - Cancel, - Refund, + CancelAndRefund, ListSellers, ExportBitcoinWallet, MoneroRecovery, @@ -107,19 +104,29 @@ impl Request { Method::BuyXmr => { let swap_id = Uuid::new_v4(); - let seed = context.config.seed.as_ref().unwrap(); + let seed = context.config.seed.as_ref().context("Could not get seed")?; let env_config = context.config.env_config; - let btc = context.bitcoin_wallet.as_ref().unwrap(); - let seller = self.params.seller.clone().unwrap(); - let monero_receive_address = self.params.monero_receive_address.unwrap(); - let bitcoin_change_address = self.params.bitcoin_change_address.clone().unwrap(); - - let bitcoin_wallet = btc; - let seller_peer_id = self + let btc = context + .bitcoin_wallet + .as_ref() + .context("Could not get Bitcoin wallet")?; + let seller = self .params .seller - .as_ref() - .unwrap() + .clone() + .context("Parameter seller is missing")?; + let monero_receive_address = self + .params + .monero_receive_address + .context("Parameter monero_receive_address is missing")?; + let bitcoin_change_address = self + .params + .bitcoin_change_address + .clone() + .context("Parameter bitcoin_change_address is missing")?; + + let bitcoin_wallet = btc; + let seller_peer_id = seller .extract_peer_id() .context("Seller address must contain peer ID")?; context @@ -135,7 +142,10 @@ impl Request { ); let mut swarm = swarm::cli( seed.derive_libp2p_identity(), - context.config.tor_socks5_port.unwrap(), + context + .config + .tor_socks5_port + .context("Could not get Tor SOCKS5 port")?, behaviour, ) .await?; @@ -178,13 +188,16 @@ impl Request { .db .insert_monero_address(swap_id, monero_receive_address) .await?; - let monero_wallet = context.monero_wallet.as_ref().unwrap(); + let monero_wallet = context + .monero_wallet + .as_ref() + .context("Could not get Monero wallet")?; let swap = Swap::new( Arc::clone(&context.db), swap_id, - Arc::clone(&bitcoin_wallet), - Arc::clone(&monero_wallet), + Arc::clone(bitcoin_wallet), + Arc::clone(monero_wallet), env_config, event_loop_handle, monero_receive_address, @@ -217,15 +230,21 @@ impl Request { } Method::RawHistory => { let raw_history = context.db.raw_all().await?; - json!({ - "raw_history": raw_history - }) + json!({ "raw_history": raw_history }) } Method::GetSeller => { - let swap_id = self.params.swap_id.with_context(|| "A swap_id is needed")?; - let peerId = context.db.get_peer_id(swap_id).await.with_context(|| "Could not get PeerID")?; + let swap_id = self.params.swap_id.context("Parameter swap_id is needed")?; + let peerId = context + .db + .get_peer_id(swap_id) + .await + .with_context(|| "Could not get PeerID")?; - let addresses = context.db.get_addresses(peerId).await.with_context(|| "Could not get addressess")?; + let addresses = context + .db + .get_addresses(peerId) + .await + .with_context(|| "Could not get addressess")?; json!({ "peerId": peerId.to_base58(), @@ -233,12 +252,12 @@ impl Request { }) } Method::SwapStartDate => { - let swap_id = self.params.swap_id.with_context(|| "A swap_id is needed")?; + let swap_id = self + .params + .swap_id + .context("Parameter swap_id is missing")?; - let start_date = context - .db - .get_swap_start_date(swap_id) - .await?; + let start_date = context.db.get_swap_start_date(swap_id).await?; json!({ "start_date": start_date, @@ -262,9 +281,16 @@ impl Request { }) } Method::WithdrawBtc => { - let bitcoin_wallet = context.bitcoin_wallet.as_ref().unwrap(); + let bitcoin_wallet = context + .bitcoin_wallet + .as_ref() + .context("Could not get Bitcoin wallet")?; - let address = self.params.address.clone().unwrap(); + let address = self + .params + .address + .clone() + .context("Parameter address is missing")?; let amount = match self.params.amount { Some(amount) => amount, @@ -306,7 +332,10 @@ impl Request { } } Method::Balance => { - let bitcoin_wallet = context.bitcoin_wallet.as_ref().unwrap(); + let bitcoin_wallet = context + .bitcoin_wallet + .as_ref() + .context("Could not get Bitcoin wallet")?; bitcoin_wallet.sync().await?; let bitcoin_balance = bitcoin_wallet.balance().await?; @@ -320,22 +349,38 @@ impl Request { }) } Method::Resume => { - let swap_id = self.params.swap_id.unwrap(); + let swap_id = self + .params + .swap_id + .context("Parameter swap_id is missing")?; let seller_peer_id = context.db.get_peer_id(swap_id).await?; let seller_addresses = context.db.get_addresses(seller_peer_id).await?; - let seed = context.config.seed.as_ref().unwrap().derive_libp2p_identity(); + let seed = context + .config + .seed + .as_ref() + .context("Could not get seed")? + .derive_libp2p_identity(); let behaviour = cli::Behaviour::new( seller_peer_id, context.config.env_config, - Arc::clone(context.bitcoin_wallet.as_ref().unwrap()), + Arc::clone( + context + .bitcoin_wallet + .as_ref() + .context("Could not get Bitcoin wallet")?, + ), (seed.clone(), context.config.namespace), ); let mut swarm = swarm::cli( seed.clone(), - context.config.tor_socks5_port.clone().unwrap(), + context + .config + .tor_socks5_port + .context("Could not get Tor SOCKS5 port")?, behaviour, ) .await?; @@ -357,8 +402,18 @@ impl Request { let swap = Swap::from_db( Arc::clone(&context.db), swap_id, - Arc::clone(context.bitcoin_wallet.as_ref().unwrap()), - Arc::clone(context.monero_wallet.as_ref().unwrap()), + Arc::clone( + context + .bitcoin_wallet + .as_ref() + .context("Could not get Bitcoin wallet")?, + ), + Arc::clone( + context + .monero_wallet + .as_ref() + .context("Could not get Monero wallet")?, + ), context.config.env_config, event_loop_handle, monero_receive_address, @@ -378,39 +433,49 @@ impl Request { }) } Method::CancelAndRefund => { - let bitcoin_wallet = context.bitcoin_wallet.as_ref().unwrap(); + let bitcoin_wallet = context + .bitcoin_wallet + .as_ref() + .context("Could not get Bitcoin wallet")?; - let (txid, _) = cli::cancel_and_refund(swap_id, Arc::clone(bitcoin_wallet), Arc::clone(&context.db).await?; - - json!({ - "txid": txid, - }) - } - Method::Refund => { - let bitcoin_wallet = context.bitcoin_wallet.as_ref().unwrap(); - - let state = cli::refund( - self.params.swap_id.unwrap(), + let state = cli::cancel_and_refund( + self.params + .swap_id + .context("Parameter swap_id is missing")?, Arc::clone(bitcoin_wallet), Arc::clone(&context.db), ) .await?; - json!({ "result": state }) + json!({ + "result": state, + }) } Method::ListSellers => { - let rendezvous_point = self.params.rendezvous_point.clone().unwrap(); + let rendezvous_point = self + .params + .rendezvous_point + .clone() + .context("Parameter rendezvous_point is missing")?; let rendezvous_node_peer_id = rendezvous_point .extract_peer_id() .context("Rendezvous node address must contain peer ID")?; - let identity = context.config.seed.as_ref().unwrap().derive_libp2p_identity(); + let identity = context + .config + .seed + .as_ref() + .context("Cannot extract seed")? + .derive_libp2p_identity(); let sellers = list_sellers( rendezvous_node_peer_id, rendezvous_point, context.config.namespace, - context.config.tor_socks5_port.unwrap(), + context + .config + .tor_socks5_port + .context("Could not get Tor SOCKS5 port")?, identity, ) .await?; @@ -440,7 +505,10 @@ impl Request { json!({ "sellers": sellers }) } Method::ExportBitcoinWallet => { - let bitcoin_wallet = context.bitcoin_wallet.as_ref().unwrap(); + let bitcoin_wallet = context + .bitcoin_wallet + .as_ref() + .context("Could not get Bitcoin wallet")?; let wallet_export = bitcoin_wallet.wallet_export("cli").await?; tracing::info!(descriptor=%wallet_export.to_string(), "Exported bitcoin wallet"); @@ -451,7 +519,11 @@ impl Request { Method::MoneroRecovery => { let swap_state: BobState = context .db - .get_state(self.params.swap_id.clone().unwrap()) + .get_state( + self.params + .swap_id + .context("Parameter swap_id is missing")?, + ) .await? .try_into()?; @@ -495,7 +567,6 @@ impl Request { } } - fn qr_code(value: &impl ToString) -> Result { let code = QrCode::new(value.to_string())?; let qr_code = code diff --git a/swap/src/bitcoin/wallet.rs b/swap/src/bitcoin/wallet.rs index cf1530d1..7427b3e6 100644 --- a/swap/src/bitcoin/wallet.rs +++ b/swap/src/bitcoin/wallet.rs @@ -54,7 +54,7 @@ impl Wallet { ) -> Result { let data_dir = data_dir.as_ref(); let wallet_dir = data_dir.join(WALLET); - let database = bdk::sled::open(&wallet_dir)?.open_tree(SLED_TREE_NAME)?; + let database = bdk::sled::open(wallet_dir)?.open_tree(SLED_TREE_NAME)?; let network = env_config.bitcoin_network; let wallet = match bdk::Wallet::new( @@ -97,7 +97,7 @@ impl Wallet { std::fs::rename(from, to)?; let wallet_dir = data_dir.join(WALLET); - let database = bdk::sled::open(&wallet_dir)?.open_tree(SLED_TREE_NAME)?; + let database = bdk::sled::open(wallet_dir)?.open_tree(SLED_TREE_NAME)?; let wallet = bdk::Wallet::new( bdk::template::Bip84(xprivkey, KeychainKind::External), diff --git a/swap/src/cli/cancel_and_refund.rs b/swap/src/cli/cancel_and_refund.rs index 938e33e0..d542b7ed 100644 --- a/swap/src/cli/cancel_and_refund.rs +++ b/swap/src/cli/cancel_and_refund.rs @@ -28,7 +28,7 @@ pub async fn cancel_and_refund( pub async fn cancel( swap_id: Uuid, bitcoin_wallet: Arc, - db: Arc, + db: Arc, ) -> Result<(Txid, Subscription, BobState)> { let state = db.get_state(swap_id).await?.try_into()?; @@ -80,7 +80,7 @@ pub async fn cancel( pub async fn refund( swap_id: Uuid, bitcoin_wallet: Arc, - db: Arc, + db: Arc, ) -> Result { let state = db.get_state(swap_id).await?.try_into()?; diff --git a/swap/src/cli/command.rs b/swap/src/cli/command.rs index 7ed77291..f70df8dc 100644 --- a/swap/src/cli/command.rs +++ b/swap/src/cli/command.rs @@ -1,8 +1,8 @@ +use crate::api::request::{Method, Params, Request, Shutdown}; use crate::api::Context; -use crate::api::request::{Request, Params, Method, Shutdown}; -use crate::bitcoin::{Amount, bitcoin_address}; -use crate::monero::monero_address; +use crate::bitcoin::{bitcoin_address, Amount}; use crate::monero; +use crate::monero::monero_address; use anyhow::Result; use libp2p::core::Multiaddr; use std::ffi::OsString; @@ -11,9 +11,9 @@ use std::path::PathBuf; use std::str::FromStr; use std::sync::Arc; use structopt::{clap, StructOpt}; +use tokio::sync::broadcast; use url::Url; use uuid::Uuid; -use tokio::sync::broadcast; // See: https://moneroworld.com/ pub const DEFAULT_MONERO_DAEMON_ADDRESS: &str = "node.community.rino.io:18081"; @@ -42,7 +42,10 @@ pub enum ParseResult { PrintAndExitZero { message: String }, } -pub async fn parse_args_and_apply_defaults(raw_args: I, rx: broadcast::Sender<()>) -> Result +pub async fn parse_args_and_apply_defaults( + raw_args: I, + rx: broadcast::Sender<()>, +) -> Result where I: IntoIterator, T: Into + Clone, @@ -70,8 +73,10 @@ where monero_receive_address, tor, } => { - let monero_receive_address = monero_address::validate(monero_receive_address, is_testnet)?; - let bitcoin_change_address = bitcoin_address::validate(bitcoin_change_address, is_testnet)?; + let monero_receive_address = + monero_address::validate(monero_receive_address, is_testnet)?; + let bitcoin_change_address = + bitcoin_address::validate(bitcoin_change_address, is_testnet)?; let request = Request { params: Params { @@ -268,8 +273,18 @@ where shutdown: Shutdown::new(rx.subscribe()), }; - let context = - Context::build(None, None, Some(tor), data, is_testnet, debug, json, None, rx).await?; + let context = Context::build( + None, + None, + Some(tor), + data, + is_testnet, + debug, + json, + None, + rx, + ) + .await?; (context, request) } @@ -563,10 +578,10 @@ mod tests { use crate::tor::DEFAULT_SOCKS5_PORT; use crate::api::api_test::*; - use sequential_test::sequential; - use crate::monero::monero_address::MoneroAddressNetworkMismatch; use crate::api::Config; use crate::fs::system_data_dir; + use crate::monero::monero_address::MoneroAddressNetworkMismatch; + use sequential_test::sequential; const BINARY_NAME: &str = "swap"; const ARGS_DATA_DIR: &str = "/tmp/dir/"; @@ -586,7 +601,9 @@ mod tests { ]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (false, false, false); let (expected_config, expected_request) = ( @@ -619,7 +636,9 @@ mod tests { ]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (true, false, false); let (expected_config, expected_request) = ( @@ -651,7 +670,9 @@ mod tests { ]; let (tx, _) = broadcast::channel(1); - let err = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap_err(); + let err = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap_err(); assert_eq!( err.downcast_ref::().unwrap(), @@ -678,7 +699,9 @@ mod tests { ]; let (tx, _) = broadcast::channel(1); - let err = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap_err(); + let err = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap_err(); assert_eq!( err.downcast_ref::().unwrap(), @@ -695,7 +718,9 @@ mod tests { let raw_ars = vec![BINARY_NAME, "resume", "--swap-id", SWAP_ID]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (false, false, false); let (expected_config, expected_request) = ( @@ -718,7 +743,9 @@ mod tests { let raw_ars = vec![BINARY_NAME, "--testnet", "resume", "--swap-id", SWAP_ID]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (true, false, false); let (expected_config, expected_request) = ( @@ -741,7 +768,9 @@ mod tests { let raw_ars = vec![BINARY_NAME, "cancel", "--swap-id", SWAP_ID]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (false, false, false); @@ -765,7 +794,9 @@ mod tests { let raw_ars = vec![BINARY_NAME, "--testnet", "cancel", "--swap-id", SWAP_ID]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (true, false, false); let (expected_config, expected_request) = ( @@ -788,7 +819,9 @@ mod tests { let raw_ars = vec![BINARY_NAME, "refund", "--swap-id", SWAP_ID]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (false, false, false); let (expected_config, expected_request) = ( @@ -811,7 +844,9 @@ mod tests { let raw_ars = vec![BINARY_NAME, "--testnet", "refund", "--swap-id", SWAP_ID]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (true, false, false); let (expected_config, expected_request) = ( @@ -845,7 +880,9 @@ mod tests { ]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (false, false, false); let data_dir = PathBuf::from_str(ARGS_DATA_DIR).unwrap(); @@ -863,7 +900,6 @@ mod tests { assert_eq!(actual_request, Box::new(expected_request)); } - #[tokio::test] #[sequential] async fn given_buy_xmr_on_testnet_with_data_dir_then_data_dir_set() { @@ -883,7 +919,9 @@ mod tests { let (tx, _) = broadcast::channel(1); let data_dir = PathBuf::from_str(ARGS_DATA_DIR).unwrap(); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (true, false, false); let (expected_config, expected_request) = ( @@ -903,7 +941,6 @@ mod tests { #[tokio::test] #[sequential] async fn given_resume_on_mainnet_with_data_dir_then_data_dir_set() { - let raw_ars = vec![ BINARY_NAME, "--data-base-dir", @@ -915,7 +952,9 @@ mod tests { let (tx, _) = broadcast::channel(1); let data_dir = PathBuf::from_str(ARGS_DATA_DIR).unwrap(); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (false, false, false); let (expected_config, expected_request) = ( @@ -935,7 +974,6 @@ mod tests { #[tokio::test] #[sequential] async fn given_resume_on_testnet_with_data_dir_then_data_dir_set() { - let raw_ars = vec![ BINARY_NAME, "--testnet", @@ -948,7 +986,9 @@ mod tests { let (tx, _) = broadcast::channel(1); let data_dir = PathBuf::from_str(ARGS_DATA_DIR).unwrap(); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (true, false, false); let (expected_config, expected_request) = ( @@ -981,7 +1021,9 @@ mod tests { ]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (false, true, false); let (expected_config, expected_request) = ( @@ -1015,7 +1057,9 @@ mod tests { ]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (true, true, false); let (expected_config, expected_request) = ( @@ -1035,11 +1079,12 @@ mod tests { #[tokio::test] #[sequential] async fn given_resume_on_mainnet_with_debug_then_debug_set() { - let raw_ars = vec![BINARY_NAME, "--debug", "resume", "--swap-id", SWAP_ID]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (false, true, false); let (expected_config, expected_request) = ( @@ -1056,7 +1101,6 @@ mod tests { assert_eq!(actual_request, Box::new(expected_request)); } - #[tokio::test] #[sequential] async fn given_resume_on_testnet_with_debug_then_debug_set() { @@ -1070,7 +1114,9 @@ mod tests { ]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (true, true, false); let (expected_config, expected_request) = ( @@ -1103,7 +1149,9 @@ mod tests { ]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (false, false, true); let data_dir = data_dir_path_cli(is_testnet); @@ -1138,7 +1186,9 @@ mod tests { ]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (true, false, true); let (expected_config, expected_request) = ( @@ -1158,10 +1208,11 @@ mod tests { #[tokio::test] #[sequential] async fn given_resume_on_mainnet_with_json_then_json_set() { - let (tx, _) = broadcast::channel(1); let raw_ars = vec![BINARY_NAME, "--json", "resume", "--swap-id", SWAP_ID]; - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (false, false, true); let (expected_config, expected_request) = ( @@ -1181,7 +1232,6 @@ mod tests { #[tokio::test] #[sequential] async fn given_resume_on_testnet_with_json_then_json_set() { - let raw_ars = vec![ BINARY_NAME, "--testnet", @@ -1192,7 +1242,9 @@ mod tests { ]; let (tx, _) = broadcast::channel(1); - let args = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let args = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); let (is_testnet, debug, json) = (true, false, true); let (expected_config, expected_request) = ( @@ -1223,7 +1275,9 @@ mod tests { MULTI_ADDRESS, ]; let (tx, _) = broadcast::channel(1); - let result = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap_err(); + let result = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap_err(); let raw_ars = vec![ BINARY_NAME, @@ -1235,7 +1289,9 @@ mod tests { "--seller", MULTI_ADDRESS, ]; - let result = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap_err(); + let result = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap_err(); let raw_ars = vec![ BINARY_NAME, @@ -1247,7 +1303,9 @@ mod tests { "--seller", MULTI_ADDRESS, ]; - let result = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let result = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); assert!(matches!(result, ParseResult::Context(_, _))); } @@ -1266,7 +1324,9 @@ mod tests { "--seller", MULTI_ADDRESS, ]; - let result = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap_err(); + let result = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap_err(); let raw_ars = vec![ BINARY_NAME, @@ -1279,7 +1339,9 @@ mod tests { "--seller", MULTI_ADDRESS, ]; - let result = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap_err(); + let result = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap_err(); let raw_ars = vec![ BINARY_NAME, @@ -1292,7 +1354,9 @@ mod tests { "--seller", MULTI_ADDRESS, ]; - let result = parse_args_and_apply_defaults(raw_ars, tx.clone()).await.unwrap(); + let result = parse_args_and_apply_defaults(raw_ars, tx.clone()) + .await + .unwrap(); assert!(matches!(result, ParseResult::Context(_, _))); } diff --git a/swap/src/database/sqlite.rs b/swap/src/database/sqlite.rs index 45e56fc2..087a9163 100644 --- a/swap/src/database/sqlite.rs +++ b/swap/src/database/sqlite.rs @@ -1,7 +1,7 @@ use crate::database::Swap; use crate::monero::Address; use crate::protocol::{Database, State}; -use anyhow::{Context, Result}; +use anyhow::{anyhow, Context, Result}; use async_trait::async_trait; use libp2p::{Multiaddr, PeerId}; use sqlx::sqlite::Sqlite; @@ -185,7 +185,8 @@ impl Database for SqliteDatabase { .fetch_one(&mut conn) .await?; - return Ok(row.start_date.unwrap()); + row.start_date + .ok_or_else(|| anyhow!("Could not get swap start date")) } async fn insert_latest_state(&self, swap_id: Uuid, state: State) -> Result<()> { @@ -283,13 +284,16 @@ impl Database for SqliteDatabase { let mut swaps: HashMap> = HashMap::new(); for row in &rows { - let swap_id = Uuid::from_str(&row.swap_id).unwrap(); - let state = serde_json::from_str(&row.state).unwrap(); + let swap_id = Uuid::from_str(&row.swap_id)?; + let state = serde_json::from_str(&row.state)?; - if swaps.contains_key(&swap_id) { - swaps.get_mut(&swap_id).unwrap().push(state); + if let std::collections::hash_map::Entry::Vacant(e) = swaps.entry(swap_id) { + e.insert(vec![state]); } else { - swaps.insert(swap_id, vec![state]); + swaps + .get_mut(&swap_id) + .ok_or_else(|| anyhow!("Error while retrieving the swap"))? + .push(state); } } diff --git a/swap/src/monero.rs b/swap/src/monero.rs index 158a582b..f13b7ee0 100644 --- a/swap/src/monero.rs +++ b/swap/src/monero.rs @@ -321,7 +321,7 @@ pub mod monero_amount { } pub mod monero_address { - use anyhow::{bail, Result, Context}; + use anyhow::{bail, Context, Result}; use std::str::FromStr; #[derive(thiserror::Error, Debug, Clone, Copy, PartialEq)] diff --git a/swap/src/rpc.rs b/swap/src/rpc.rs index eb308536..45ed6d6d 100644 --- a/swap/src/rpc.rs +++ b/swap/src/rpc.rs @@ -1,5 +1,5 @@ use crate::api::Context; -use jsonrpsee::server::{ServerBuilder, ServerHandle, RpcModule}; +use jsonrpsee::server::{RpcModule, ServerBuilder, ServerHandle}; use std::net::SocketAddr; use std::sync::Arc; use thiserror::Error; @@ -21,7 +21,7 @@ pub async fn run_server( { modules .merge(methods::register_modules(Arc::clone(&context))) - .unwrap() + .expect("Could not register RPC modules") } let addr = server.local_addr()?; diff --git a/swap/src/rpc/methods.rs b/swap/src/rpc/methods.rs index b41d884b..8addc7a9 100644 --- a/swap/src/rpc/methods.rs +++ b/swap/src/rpc/methods.rs @@ -1,8 +1,9 @@ -use crate::api::{Context}; -use crate::api::request::{Params, Request, Method, Shutdown}; -use anyhow::Result; +use crate::api::request::{Method, Params, Request, Shutdown}; +use crate::api::Context; +use crate::bitcoin::bitcoin_address; +use crate::monero::monero_address; use crate::{bitcoin, monero}; -use crate::{bitcoin::bitcoin_address, monero::monero_address}; +use anyhow::Result; use jsonrpsee::server::RpcModule; use libp2p::core::Multiaddr; use std::collections::HashMap; @@ -16,17 +17,17 @@ pub fn register_modules(context: Arc) -> RpcModule> { .register_async_method("get_bitcoin_balance", |_, context| async move { get_bitcoin_balance(&context).await }) - .unwrap(); + .expect("Could not register RPC method get_bitcoin_balance"); module .register_async_method("get_history", |_, context| async move { get_history(&context).await }) - .unwrap(); + .expect("Could not register RPC method get_history"); module .register_async_method("get_raw_history", |_, context| async move { get_raw_history(&context).await }) - .unwrap(); + .expect("Could not register RPC method get_history"); module .register_async_method("get_seller", |params, context| async move { let params: HashMap = params.parse()?; @@ -37,7 +38,7 @@ pub fn register_modules(context: Arc) -> RpcModule> { get_seller(*swap_id, &context).await }) - .unwrap(); + .expect("Could not register RPC method get_seller"); module .register_async_method("get_swap_start_date", |params, context| async move { let params: HashMap = params.parse()?; @@ -48,7 +49,7 @@ pub fn register_modules(context: Arc) -> RpcModule> { get_swap_start_date(*swap_id, &context).await }) - .unwrap(); + .expect("Could not register RPC method get_swap_start_date"); module .register_async_method("resume_swap", |params, context| async move { let params: HashMap = params.parse()?; @@ -59,7 +60,7 @@ pub fn register_modules(context: Arc) -> RpcModule> { resume_swap(*swap_id, &context).await }) - .unwrap(); + .expect("Could not register RPC method resume_swap"); module .register_async_method("withdraw_btc", |params, context| async move { let params: HashMap = params.parse()?; @@ -80,11 +81,12 @@ pub fn register_modules(context: Arc) -> RpcModule> { jsonrpsee_core::Error::Custom("Does not contain address".to_string()) })?) .map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))?; - let withdraw_address = bitcoin_address::validate(withdraw_address, context.config.is_testnet)?; + let withdraw_address = + bitcoin_address::validate(withdraw_address, context.config.is_testnet)?; withdraw_btc(withdraw_address, amount, &context).await }) - .unwrap(); + .expect("Could not register RPC method withdraw_btc"); module .register_async_method("buy_xmr", |params, context| async move { let params: HashMap = params.parse()?; @@ -98,7 +100,8 @@ pub fn register_modules(context: Arc) -> RpcModule> { ) .map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))?; - let bitcoin_change_address = bitcoin_address::validate(bitcoin_change_address, context.config.is_testnet)?; + let bitcoin_change_address = + bitcoin_address::validate(bitcoin_change_address, context.config.is_testnet)?; let monero_receive_address = monero::Address::from_str( params.get("monero_receive_address").ok_or_else(|| { @@ -109,7 +112,8 @@ pub fn register_modules(context: Arc) -> RpcModule> { ) .map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))?; - let monero_receive_address = monero_address::validate(monero_receive_address, context.config.is_testnet)?; + let monero_receive_address = + monero_address::validate(monero_receive_address, context.config.is_testnet)?; let seller = Multiaddr::from_str(params.get("seller").ok_or_else(|| { jsonrpsee_core::Error::Custom("Does not contain seller".to_string()) @@ -121,29 +125,33 @@ pub fn register_modules(context: Arc) -> RpcModule> { monero_receive_address, seller, &context, - ).await + ) + .await }) - .unwrap(); + .expect("Could not register RPC method buy_xmr"); module .register_async_method("list_sellers", |params, context| async move { let params: HashMap = params.parse()?; let rendezvous_point = params.get("rendezvous_point").ok_or_else(|| { - jsonrpsee_core::Error::Custom("Does not contain rendezvous_point".to_string()) - })?; + jsonrpsee_core::Error::Custom("Does not contain rendezvous_point".to_string()) + })?; list_sellers(rendezvous_point.clone(), &context).await }) - .unwrap(); + .expect("Could not register RPC method list_sellers"); module } -async fn get_bitcoin_balance(context: &Arc) -> Result { +async fn get_bitcoin_balance( + context: &Arc, +) -> Result { let mut request = Request { params: Params::default(), cmd: Method::Balance, shutdown: Shutdown::new(context.shutdown.subscribe()), }; - let balance = request.call(Arc::clone(context)) + let balance = request + .call(Arc::clone(context)) .await .map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))?; @@ -156,19 +164,23 @@ async fn get_history(context: &Arc) -> Result) -> Result { +async fn get_raw_history( + context: &Arc, +) -> Result { let mut request = Request { params: Params::default(), cmd: Method::RawHistory, shutdown: Shutdown::new(context.shutdown.subscribe()), }; - let history = request.call(Arc::clone(context)) + let history = request + .call(Arc::clone(context)) .await .map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))?; @@ -177,7 +189,7 @@ async fn get_raw_history(context: &Arc) -> Result + context: &Arc, ) -> Result { let mut request = Request { params: Params { @@ -187,7 +199,8 @@ async fn get_seller( cmd: Method::GetSeller, shutdown: Shutdown::new(context.shutdown.subscribe()), }; - let result = request.call(Arc::clone(context)) + let result = request + .call(Arc::clone(context)) .await .map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))?; @@ -196,7 +209,7 @@ async fn get_seller( async fn get_swap_start_date( swap_id: Uuid, - context: &Arc + context: &Arc, ) -> Result { let mut request = Request { params: Params { @@ -206,7 +219,8 @@ async fn get_swap_start_date( cmd: Method::SwapStartDate, shutdown: Shutdown::new(context.shutdown.subscribe()), }; - let result = request.call(Arc::clone(context)) + let result = request + .call(Arc::clone(context)) .await .map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))?; @@ -226,7 +240,8 @@ async fn resume_swap( shutdown: Shutdown::new(context.shutdown.subscribe()), }; - let result = request.call(Arc::clone(context)) + let result = request + .call(Arc::clone(context)) .await .map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))?; Ok(result) @@ -245,7 +260,8 @@ async fn withdraw_btc( cmd: Method::WithdrawBtc, shutdown: Shutdown::new(context.shutdown.subscribe()), }; - let result = request.call(Arc::clone(context)) + let result = request + .call(Arc::clone(context)) .await .map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))?; Ok(result) @@ -267,7 +283,8 @@ async fn buy_xmr( cmd: Method::BuyXmr, shutdown: Shutdown::new(context.shutdown.subscribe()), }; - let swap = request.call(Arc::clone(context)) + let swap = request + .call(Arc::clone(context)) .await .map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))?; Ok(swap) @@ -285,7 +302,8 @@ async fn list_sellers( cmd: Method::ListSellers, shutdown: Shutdown::new(context.shutdown.subscribe()), }; - let result = request.call(Arc::clone(context)) + let result = request + .call(Arc::clone(context)) .await .map_err(|err| jsonrpsee_core::Error::Custom(err.to_string()))?; Ok(result) diff --git a/swap/src/seed.rs b/swap/src/seed.rs index 2f18cfa7..03a9170d 100644 --- a/swap/src/seed.rs +++ b/swap/src/seed.rs @@ -61,7 +61,7 @@ impl Seed { let file_path = Path::new(&file_path_buf); if file_path.exists() { - return Self::from_file(&file_path); + return Self::from_file(file_path); } tracing::debug!("No seed file found, creating at {}", file_path.display()); diff --git a/swap/tests/rpc.rs b/swap/tests/rpc.rs index 6148df2b..578d2902 100644 --- a/swap/tests/rpc.rs +++ b/swap/tests/rpc.rs @@ -1,37 +1,39 @@ -use testcontainers::clients::Cli; -use testcontainers::{Container, Docker, RunArgs}; use anyhow::{bail, Context as AnyContext, Result}; use futures::Future; -use swap::api::{Context, Config}; -use swap::api::request::{Request, Params, Method, Shutdown}; -use std::sync::Arc; -use tokio::time::{interval, timeout}; -use std::time::Duration; use jsonrpsee::ws_client::WsClientBuilder; -use jsonrpsee_core::{client::ClientT, params::ObjectParams}; use jsonrpsee::{rpc_params, RpcModule}; +use jsonrpsee_core::client::ClientT; +use jsonrpsee_core::params::ObjectParams; use jsonrpsee_types::error::CallError; -use tokio::sync::broadcast; -use swap::cli::command::{Bitcoin, Monero}; -use std::collections::HashMap; -use uuid::Uuid; -use serde_json::{json, Value}; use sequential_test::sequential; +use serde_json::{json, Value}; +use std::collections::HashMap; +use std::sync::Arc; +use std::time::Duration; +use swap::api::request::{Method, Params, Request, Shutdown}; +use swap::api::{Config, Context}; +use swap::cli::command::{Bitcoin, Monero}; +use testcontainers::clients::Cli; +use testcontainers::{Container, Docker, RunArgs}; +use tokio::sync::broadcast; +use tokio::time::{interval, timeout}; +use uuid::Uuid; #[cfg(test)] - // to be replaced with actual "real" testing values -// need to create some kind of swap database and bitcoin environment with some funds +// need to create some kind of swap database and bitcoin environment with some +// funds const SERVER_ADDRESS: &str = "127.0.0.1:1234"; const BITCOIN_ADDR: &str = "tb1qr3em6k3gfnyl8r7q0v7t4tlnyxzgxma3lressv"; const MONERO_ADDR: &str = "53gEuGZUhP9JMEBZoGaFNzhwEgiG7hwQdMCqFxiyiTeFPmkbt1mAoNybEUvYBKHcnrSgxnVWgZsTvRBaHBNXPa8tHiCU51a"; -const SELLER: &str = "/ip4/127.0.0.1/tcp/9939/p2p/12D3KooWCdMKjesXMJz1SiZ7HgotrxuqhQJbP5sgBm2BwP1cqThi"; +const SELLER: &str = + "/ip4/127.0.0.1/tcp/9939/p2p/12D3KooWCdMKjesXMJz1SiZ7HgotrxuqhQJbP5sgBm2BwP1cqThi"; const SWAP_ID: &str = "ea030832-3be9-454f-bb98-5ea9a788406b"; pub async fn initialize_context() -> (Arc, Request) { let (is_testnet, debug, json) = (true, false, false); - //let data_dir = data::data_dir_from(None, is_testnet).unwrap(); + // let data_dir = data::data_dir_from(None, is_testnet).unwrap(); let server_address = None; let (tx, _) = broadcast::channel(1); @@ -60,12 +62,13 @@ pub async fn initialize_context() -> (Arc, Request) { json, server_address, tx, - ).await.unwrap(); + ) + .await + .unwrap(); (Arc::new(context), request) } - #[tokio::test] #[sequential] pub async fn can_start_server() { @@ -92,7 +95,10 @@ pub async fn get_bitcoin_balance() { tokio::time::sleep(Duration::from_secs(3)).await; let client = WsClientBuilder::default().build(&url).await.unwrap(); - let response: HashMap = client.request("get_bitcoin_balance", rpc_params!["id"]).await.unwrap(); + let response: HashMap = client + .request("get_bitcoin_balance", rpc_params!["id"]) + .await + .unwrap(); assert_eq!(response, HashMap::from([("balance".to_string(), 0)])); ctx.shutdown.send(()); @@ -113,7 +119,8 @@ pub async fn get_history() { let client = WsClientBuilder::default().build(&url).await.unwrap(); let mut params = ObjectParams::new(); - let response: HashMap> = client.request("get_history", params).await.unwrap(); + let response: HashMap> = + client.request("get_history", params).await.unwrap(); let swaps: Vec<(Uuid, String)> = Vec::new(); assert_eq!(response, HashMap::from([("swaps".to_string(), swaps)])); @@ -136,9 +143,13 @@ pub async fn get_raw_history() { let mut params = ObjectParams::new(); let raw_history: HashMap = HashMap::new(); - let response: HashMap> = client.request("get_raw_history", params).await.unwrap(); + let response: HashMap> = + client.request("get_raw_history", params).await.unwrap(); - assert_eq!(response, HashMap::from([("raw_history".to_string(), raw_history)])); + assert_eq!( + response, + HashMap::from([("raw_history".to_string(), raw_history)]) + ); ctx.shutdown.send(()); } @@ -159,7 +170,8 @@ pub async fn get_seller() { let response: Result, _> = client.request("get_seller", params).await; - // We should ideally match the expected error and panic if it's different one, but the request returns a custom error (to investigate) + // We should ideally match the expected error and panic if it's different one, + // but the request returns a custom error (to investigate) // Err(jsonrpsee_core::Error::Call(CallError::InvalidParams(e))) => (), // Err(e) => panic!("ErrorType was not ParseError but {e:?}"), @@ -185,7 +197,10 @@ pub async fn get_seller() { match response { Ok(hash) => (), - Err(e) => panic!("Expected a HashMap with correct params, got an error: {}", e), + Err(e) => panic!( + "Expected a HashMap with correct params, got an error: {}", + e + ), } ctx.shutdown.send(()); } @@ -205,7 +220,8 @@ pub async fn get_swap_start_date() { let client = WsClientBuilder::default().build(&url).await.unwrap(); let mut params = ObjectParams::new(); - let response: Result, _> = client.request("get_swap_start_date", params).await; + let response: Result, _> = + client.request("get_swap_start_date", params).await; match response { Err(e) => (), @@ -215,7 +231,8 @@ pub async fn get_swap_start_date() { let mut params = ObjectParams::new(); params.insert("swap_id", "invalid_swap"); - let response: Result, _> = client.request("get_swap_start_date", params).await; + let response: Result, _> = + client.request("get_swap_start_date", params).await; match response { Err(e) => (), @@ -225,7 +242,8 @@ pub async fn get_swap_start_date() { let mut params = ObjectParams::new(); params.insert("swap_id", SWAP_ID); - let response: Result, _> = client.request("get_swap_start_date", params).await; + let response: Result, _> = + client.request("get_swap_start_date", params).await; match response { Ok(hash) => (), @@ -249,7 +267,8 @@ pub async fn resume_swap() { let client = WsClientBuilder::default().build(&url).await.unwrap(); let mut params = ObjectParams::new(); - let response: Result, _> = client.request("get_swap_start_date", params).await; + let response: Result, _> = + client.request("get_swap_start_date", params).await; match response { Err(e) => (), @@ -259,7 +278,8 @@ pub async fn resume_swap() { let mut params = ObjectParams::new(); params.insert("swap_id", "invalid_swap"); - let response: Result, _> = client.request("get_swap_start_date", params).await; + let response: Result, _> = + client.request("get_swap_start_date", params).await; match response { Err(e) => (), @@ -269,7 +289,8 @@ pub async fn resume_swap() { let mut params = ObjectParams::new(); params.insert("swap_id", SWAP_ID); - let response: Result, _> = client.request("get_swap_start_date", params).await; + let response: Result, _> = + client.request("get_swap_start_date", params).await; match response { Ok(hash) => (),