diff --git a/swap/src/cli.rs b/swap/src/cli.rs index 66047dc7..b762edd0 100644 --- a/swap/src/cli.rs +++ b/swap/src/cli.rs @@ -30,7 +30,7 @@ pub enum Command { )] monero_wallet_rpc_url: Url, - #[structopt(long = "p2p-address", default_value = "/ip4/127.0.0.1/tcp/9876")] + #[structopt(long = "p2p-address", default_value = "/ip4/0.0.0.0/tcp/9876")] listen_addr: Multiaddr, #[structopt(long = "send-xmr", help = "Monero amount as floating point nr without denomination (e.g. 125.1)", parse(try_from_str = parse_xmr))] diff --git a/swap/src/config.rs b/swap/src/config.rs index 2161931b..8ef318c2 100644 --- a/swap/src/config.rs +++ b/swap/src/config.rs @@ -9,7 +9,6 @@ pub struct Config { pub bob_time_to_act: Duration, pub bitcoin_finality_confirmations: u32, pub bitcoin_avg_block_time: Duration, - pub monero_max_finality_time: Duration, pub monero_finality_confirmations: u32, pub bitcoin_cancel_timelock: Timelock, pub bitcoin_punish_timelock: Timelock, @@ -23,10 +22,6 @@ impl Config { bob_time_to_act: *mainnet::BOB_TIME_TO_ACT, bitcoin_finality_confirmations: mainnet::BITCOIN_FINALITY_CONFIRMATIONS, bitcoin_avg_block_time: *mainnet::BITCOIN_AVG_BLOCK_TIME, - // We apply a scaling factor (1.5) so that the swap is not aborted when the - // blockchain is slow - monero_max_finality_time: (*mainnet::MONERO_AVG_BLOCK_TIME).mul_f64(1.5) - * mainnet::MONERO_FINALITY_CONFIRMATIONS, monero_finality_confirmations: mainnet::MONERO_FINALITY_CONFIRMATIONS, bitcoin_cancel_timelock: mainnet::BITCOIN_CANCEL_TIMELOCK, bitcoin_punish_timelock: mainnet::BITCOIN_PUNISH_TIMELOCK, @@ -40,10 +35,6 @@ impl Config { bob_time_to_act: *testnet::BOB_TIME_TO_ACT, bitcoin_finality_confirmations: testnet::BITCOIN_FINALITY_CONFIRMATIONS, bitcoin_avg_block_time: *testnet::BITCOIN_AVG_BLOCK_TIME, - // We apply a scaling factor (1.5) so that the swap is not aborted when the - // blockchain is slow - monero_max_finality_time: (*testnet::MONERO_AVG_BLOCK_TIME).mul_f64(1.5) - * testnet::MONERO_FINALITY_CONFIRMATIONS, monero_finality_confirmations: testnet::MONERO_FINALITY_CONFIRMATIONS, bitcoin_cancel_timelock: testnet::BITCOIN_CANCEL_TIMELOCK, bitcoin_punish_timelock: testnet::BITCOIN_PUNISH_TIMELOCK, @@ -57,10 +48,6 @@ impl Config { bob_time_to_act: *regtest::BOB_TIME_TO_ACT, bitcoin_finality_confirmations: regtest::BITCOIN_FINALITY_CONFIRMATIONS, bitcoin_avg_block_time: *regtest::BITCOIN_AVG_BLOCK_TIME, - // We apply a scaling factor (1.5) so that the swap is not aborted when the - // blockchain is slow - monero_max_finality_time: (*regtest::MONERO_AVG_BLOCK_TIME).mul_f64(1.5) - * regtest::MONERO_FINALITY_CONFIRMATIONS, monero_finality_confirmations: regtest::MONERO_FINALITY_CONFIRMATIONS, bitcoin_cancel_timelock: regtest::BITCOIN_CANCEL_TIMELOCK, bitcoin_punish_timelock: regtest::BITCOIN_PUNISH_TIMELOCK, @@ -82,8 +69,6 @@ mod mainnet { pub static MONERO_FINALITY_CONFIRMATIONS: u32 = 15; - pub static MONERO_AVG_BLOCK_TIME: Lazy = Lazy::new(|| Duration::from_secs(2 * 60)); - // Set to 12 hours, arbitrary value to be reviewed properly pub static BITCOIN_CANCEL_TIMELOCK: Timelock = Timelock::new(72); pub static BITCOIN_PUNISH_TIMELOCK: Timelock = Timelock::new(72); @@ -92,7 +77,7 @@ mod mainnet { mod testnet { use super::*; - pub static BOB_TIME_TO_ACT: Lazy = Lazy::new(|| Duration::from_secs(5 * 60)); + pub static BOB_TIME_TO_ACT: Lazy = Lazy::new(|| Duration::from_secs(60 * 60)); // This does not reflect recommended values for mainnet! pub static BITCOIN_FINALITY_CONFIRMATIONS: u32 = 1; @@ -102,12 +87,8 @@ mod testnet { // This does not reflect recommended values for mainnet! pub static MONERO_FINALITY_CONFIRMATIONS: u32 = 5; - // The average blocktime on Monero stagenet is not as constant as on mainnet, - // hence 4 minutes it set - pub static MONERO_AVG_BLOCK_TIME: Lazy = Lazy::new(|| Duration::from_secs(4 * 60)); - // This does not reflect recommended values for mainnet! - pub static BITCOIN_CANCEL_TIMELOCK: Timelock = Timelock::new(6); + pub static BITCOIN_CANCEL_TIMELOCK: Timelock = Timelock::new(12); pub static BITCOIN_PUNISH_TIMELOCK: Timelock = Timelock::new(6); } @@ -123,8 +104,6 @@ mod regtest { pub static MONERO_FINALITY_CONFIRMATIONS: u32 = 1; - pub static MONERO_AVG_BLOCK_TIME: Lazy = Lazy::new(|| Duration::from_secs(60)); - pub static BITCOIN_CANCEL_TIMELOCK: Timelock = Timelock::new(50); pub static BITCOIN_PUNISH_TIMELOCK: Timelock = Timelock::new(50); diff --git a/swap/src/main.rs b/swap/src/main.rs index 2d4a2f98..ece38ff7 100644 --- a/swap/src/main.rs +++ b/swap/src/main.rs @@ -39,7 +39,7 @@ extern crate prettytable; #[tokio::main] async fn main() -> Result<()> { - init_tracing(LevelFilter::Info).expect("initialize tracing"); + init_tracing(LevelFilter::Trace).expect("initialize tracing"); let opt = Options::from_args(); let config = Config::testnet(); diff --git a/swap/src/protocol/alice/state.rs b/swap/src/protocol/alice/state.rs index 292fe03d..40512799 100644 --- a/swap/src/protocol/alice/state.rs +++ b/swap/src/protocol/alice/state.rs @@ -1,4 +1,4 @@ -use anyhow::{anyhow, Result}; +use anyhow::{anyhow, Context, Result}; use ecdsa_fun::{ adaptor::{Adaptor, EncryptedSignature}, nonce::Deterministic, @@ -254,10 +254,12 @@ impl State2 { pub fn receive(self, msg: bob::Message2) -> Result { let tx_cancel = bitcoin::TxCancel::new(&self.tx_lock, self.cancel_timelock, self.a.public(), self.B); - bitcoin::verify_sig(&self.B, &tx_cancel.digest(), &msg.tx_cancel_sig)?; + bitcoin::verify_sig(&self.B, &tx_cancel.digest(), &msg.tx_cancel_sig) + .context("Failed to verify cancel transaction")?; let tx_punish = bitcoin::TxPunish::new(&tx_cancel, &self.punish_address, self.punish_timelock); - bitcoin::verify_sig(&self.B, &tx_punish.digest(), &msg.tx_punish_sig)?; + bitcoin::verify_sig(&self.B, &tx_punish.digest(), &msg.tx_punish_sig) + .context("Failed to verify punish transaction")?; Ok(State3 { a: self.a, diff --git a/swap/src/protocol/alice/steps.rs b/swap/src/protocol/alice/steps.rs index 9afc6bb0..568e4b8b 100644 --- a/swap/src/protocol/alice/steps.rs +++ b/swap/src/protocol/alice/steps.rs @@ -7,7 +7,7 @@ use futures::{ use libp2p::request_response::ResponseChannel; use rand::rngs::OsRng; use sha2::Sha256; -use std::{sync::Arc, time::Duration}; +use std::sync::Arc; use tokio::time::timeout; use tracing::{info, trace}; @@ -147,11 +147,11 @@ where pub async fn wait_for_bitcoin_encrypted_signature( event_loop_handle: &mut EventLoopHandle, - timeout_duration: Duration, ) -> Result { - let msg3 = timeout(timeout_duration, event_loop_handle.recv_message3()) + let msg3 = event_loop_handle + .recv_message3() .await - .context("Failed to receive Bitcoin encrypted signature from Bob")??; + .context("Failed to receive Bitcoin encrypted signature from Bob")?; Ok(msg3.tx_redeem_encsig) } diff --git a/swap/src/protocol/alice/swap.rs b/swap/src/protocol/alice/swap.rs index 4afaa682..78ab1a72 100644 --- a/swap/src/protocol/alice/swap.rs +++ b/swap/src/protocol/alice/swap.rs @@ -214,10 +214,8 @@ pub async fn run_until( // expressed more cleanly let state = match state3.expired_timelocks(bitcoin_wallet.as_ref()).await? { ExpiredTimelocks::None => { - let wait_for_enc_sig = wait_for_bitcoin_encrypted_signature( - &mut event_loop_handle, - config.monero_max_finality_time, - ); + let wait_for_enc_sig = + wait_for_bitcoin_encrypted_signature(&mut event_loop_handle); let state3_clone = state3.clone(); let cancel_timelock_expires = state3_clone .wait_for_cancel_timelock_to_expire(bitcoin_wallet.as_ref());