diff --git a/swap/src/asb/command.rs b/swap/src/asb/command.rs index c29ad9d5..56ab2f64 100644 --- a/swap/src/asb/command.rs +++ b/swap/src/asb/command.rs @@ -1,5 +1,5 @@ -use crate::monero::Amount; -use anyhow::Result; +use crate::bitcoin::Amount; +use bitcoin::{util::amount::ParseAmountError, Denomination}; use std::path::PathBuf; #[derive(structopt::StructOpt, Debug)] @@ -19,13 +19,12 @@ pub struct Arguments { #[structopt(name = "xmr_btc-swap", about = "XMR BTC atomic swap")] pub enum Command { Start { - #[structopt(long = "max-sell-xmr", help = "The maximum amount of XMR the ASB is willing to sell.", default_value="0.5", parse(try_from_str = parse_xmr))] - max_sell: Amount, + #[structopt(long = "max-buy-btc", help = "The maximum amount of BTC the ASB is willing to buy.", default_value="0.005", parse(try_from_str = parse_btc))] + max_buy: Amount, }, History, } -fn parse_xmr(str: &str) -> Result { - let amount = Amount::parse_monero(str)?; - Ok(amount) +fn parse_btc(s: &str) -> Result { + Amount::from_str_in(s, Denomination::Bitcoin) } diff --git a/swap/src/bin/asb.rs b/swap/src/bin/asb.rs index 488aade3..90451fdd 100644 --- a/swap/src/bin/asb.rs +++ b/swap/src/bin/asb.rs @@ -80,7 +80,7 @@ async fn main() -> Result<()> { let wallet_data_dir = config.data.dir.join("wallet"); match opt.cmd { - Command::Start { max_sell } => { + Command::Start { max_buy } => { let seed = Seed::from_file_or_generate(&config.data.dir) .expect("Could not retrieve/initialize seed"); @@ -108,7 +108,7 @@ async fn main() -> Result<()> { Arc::new(monero_wallet), Arc::new(db), rate_service, - max_sell, + max_buy, ) .unwrap(); diff --git a/swap/src/protocol/alice/event_loop.rs b/swap/src/protocol/alice/event_loop.rs index a188930f..9201c594 100644 --- a/swap/src/protocol/alice/event_loop.rs +++ b/swap/src/protocol/alice/event_loop.rs @@ -4,7 +4,7 @@ use crate::{ database::Database, execution_params::ExecutionParams, monero, - monero::{Amount, BalanceTooLow}, + monero::BalanceTooLow, network::{transport, TokioExecutor}, protocol::{ alice, @@ -86,7 +86,7 @@ pub struct EventLoop { monero_wallet: Arc, db: Arc, rate_service: RS, - max_sell: Amount, + max_buy: bitcoin::Amount, recv_encrypted_signature: broadcast::Sender, send_transfer_proof: mpsc::Receiver<(PeerId, TransferProof)>, @@ -110,7 +110,7 @@ where monero_wallet: Arc, db: Arc, rate_service: RS, - max_sell: Amount, + max_buy: bitcoin::Amount, ) -> Result<(Self, mpsc::Receiver>>)> { let identity = seed.derive_libp2p_identity(); let behaviour = Behaviour::default(); @@ -142,7 +142,7 @@ where send_transfer_proof: send_transfer_proof.receiver, send_transfer_proof_sender: send_transfer_proof.sender, swap_handle_sender: swap_handle.sender, - max_sell, + max_buy, }; Ok((event_loop, swap_handle.receiver)) } @@ -215,17 +215,17 @@ where .context("Failed to get latest rate")?; let btc_amount = quote_request.btc_amount; - let xmr_amount = rate.sell_quote(btc_amount)?; - if xmr_amount > self.max_sell { - bail!(MaximumSellAmountExceeded { - actual: xmr_amount, - max_sell: self.max_sell + if btc_amount > self.max_buy { + bail!(MaximumBuyAmountExceeded { + actual: btc_amount, + max: self.max_buy }) } let xmr_balance = monero_wallet.get_balance().await?; let xmr_lock_fees = monero_wallet.static_tx_fee_estimate(); + let xmr_amount = rate.sell_quote(btc_amount)?; if xmr_balance < xmr_amount + xmr_lock_fees { bail!(BalanceTooLow { @@ -299,8 +299,8 @@ where } #[derive(Debug, Clone, Copy, thiserror::Error)] -#[error("The amount {actual} exceeds the configured maximum sell amount of {max_sell} XMR")] -pub struct MaximumSellAmountExceeded { - pub max_sell: Amount, - pub actual: Amount, +#[error("Refusing to buy {actual} because the maximum configured limit is {max}")] +pub struct MaximumBuyAmountExceeded { + pub max: bitcoin::Amount, + pub actual: bitcoin::Amount, } diff --git a/swap/tests/testutils/mod.rs b/swap/tests/testutils/mod.rs index 61cd01db..058cf5d4 100644 --- a/swap/tests/testutils/mod.rs +++ b/swap/tests/testutils/mod.rs @@ -394,7 +394,7 @@ where alice_monero_wallet.clone(), alice_db, fixed_rate::RateService::default(), - alice_starting_balances.xmr, + bitcoin::Amount::ONE_BTC, ) .unwrap();