From 8592ef5f791e2e4c05708d3ac2c5b5f7257e3caf Mon Sep 17 00:00:00 2001 From: rishflab Date: Mon, 7 Dec 2020 13:55:13 +1100 Subject: [PATCH] Address PR feedback Add context to logging statements. Use amount type for monero in tests. Remove stale code and comments. --- swap/src/alice/swap.rs | 3 +- swap/src/bob/swap.rs | 62 +----------------------------------------- swap/tests/e2e.rs | 54 ++++++++++++++++++------------------ xmr-btc/src/monero.rs | 10 ++++++- 4 files changed, 37 insertions(+), 92 deletions(-) diff --git a/swap/src/alice/swap.rs b/swap/src/alice/swap.rs index b96117ba..8cac8e6b 100644 --- a/swap/src/alice/swap.rs +++ b/swap/src/alice/swap.rs @@ -125,7 +125,6 @@ pub async fn swap( .await } -// TODO: use macro or generics pub fn is_complete(state: &AliceState) -> bool { matches!( state, @@ -153,7 +152,7 @@ pub async fn run_until( monero_wallet: Arc, config: Config, ) -> Result<(AliceState, Swarm)> { - info!("{}", state); + info!("Current state:{}", state); if is_target_state(&state) { Ok((state, swarm)) } else { diff --git a/swap/src/bob/swap.rs b/swap/src/bob/swap.rs index 443a86af..38e2a7f7 100644 --- a/swap/src/bob/swap.rs +++ b/swap/src/bob/swap.rs @@ -76,7 +76,6 @@ where .await } -// TODO: use macro or generics pub fn is_complete(state: &BobState) -> bool { matches!( state, @@ -111,7 +110,7 @@ pub async fn run_until( where R: RngCore + CryptoRng + Send, { - info!("{}", state); + info!("Current state: {}", state); if is_target_state(&state) { Ok(state) } else { @@ -303,62 +302,3 @@ where } } } - -// // State machine driver for recovery execution -// #[async_recursion] -// pub async fn abort(state: BobState, io: Io) -> Result { -// match state { -// BobState::Started => { -// // Nothing has been commited by either party, abort swap. -// abort(BobState::SafelyAborted, io).await -// } -// BobState::Negotiated => { -// // Nothing has been commited by either party, abort swap. -// abort(BobState::SafelyAborted, io).await -// } -// BobState::BtcLocked => { -// // Bob has locked BTC and must refund it -// // Bob waits for alice to publish TxRedeem or t1 -// if unimplemented!("TxRedeemSeen") { -// // Alice has redeemed revealing s_a -// abort(BobState::BtcRedeemed, io).await -// } else if unimplemented!("T1Elapsed") { -// // publish TxCancel or see if it has been published -// abort(BobState::Cancelled, io).await -// } else { -// Err(unimplemented!()) -// } -// } -// BobState::XmrLocked => { -// // Alice has locked Xmr -// // Wait until t1 -// if unimplemented!(">t1 and t2 -// // submit TxCancel -// abort(BobState::Punished, io).await -// } -// } -// BobState::Cancelled => { -// // Bob has cancelled the swap -// // If { -// // Bob uses revealed s_a to redeem XMR -// abort(BobState::XmrRedeemed, io).await -// } -// BobState::BtcRefunded => Ok(BobState::BtcRefunded), -// BobState::Punished => Ok(BobState::Punished), -// BobState::SafelyAborted => Ok(BobState::SafelyAborted), -// BobState::XmrRedeemed => Ok(BobState::XmrRedeemed), -// } -// } diff --git a/swap/tests/e2e.rs b/swap/tests/e2e.rs index d7cdc950..d60ceb80 100644 --- a/swap/tests/e2e.rs +++ b/swap/tests/e2e.rs @@ -26,15 +26,15 @@ async fn happy_path() { .await .unwrap(); - let btc = bitcoin::Amount::from_sat(1_000_000); + let btc_to_swap = bitcoin::Amount::from_sat(1_000_000); let btc_alice = bitcoin::Amount::ZERO; - let btc_bob = btc * 10; + let btc_bob = btc_to_swap * 10; // this xmr value matches the logic of alice::calculate_amounts i.e. btc * // 10_000 * 100 - let xmr = 1_000_000_000_000; - let xmr_alice = xmr * 10; - let xmr_bob = 0; + let xmr_to_swap = xmr_btc::monero::Amount::from_piconero(1_000_000_000_000); + let xmr_alice = xmr_to_swap * xmr_btc::monero::Amount::from_piconero(10); + let xmr_bob = xmr_btc::monero::Amount::from_piconero(0); let alice_multiaddr: Multiaddr = "/ip4/127.0.0.1/tcp/9876" .parse() @@ -43,9 +43,9 @@ async fn happy_path() { let (alice_state, alice_swarm, alice_btc_wallet, alice_xmr_wallet, alice_peer_id) = init_alice( &bitcoind, &monero, - btc, + btc_to_swap, btc_alice, - xmr, + xmr_to_swap, xmr_alice, alice_multiaddr.clone(), ) @@ -56,9 +56,9 @@ async fn happy_path() { alice_peer_id, &bitcoind, &monero, - btc, + btc_to_swap, btc_bob, - xmr, + xmr_to_swap, xmr_bob, ) .await; @@ -93,12 +93,12 @@ async fn happy_path() { assert_eq!( btc_alice_final, - btc_alice + btc - bitcoin::Amount::from_sat(bitcoin::TX_FEE) + btc_alice + btc_to_swap - bitcoin::Amount::from_sat(bitcoin::TX_FEE) ); - assert!(btc_bob_final <= btc_bob - btc); + assert!(btc_bob_final <= btc_bob - btc_to_swap); - assert!(xmr_alice_final.as_piconero() <= xmr_alice - xmr); - assert_eq!(xmr_bob_final.as_piconero(), xmr_bob + xmr); + assert!(xmr_alice_final <= xmr_alice - xmr_to_swap); + assert_eq!(xmr_bob_final, xmr_bob + xmr_to_swap); } /// Bob locks Btc and Alice locks Xmr. Bob does not act; he fails to send Alice @@ -115,13 +115,13 @@ async fn alice_punishes_if_bob_never_acts_after_fund() { .unwrap(); let btc_to_swap = bitcoin::Amount::from_sat(1_000_000); - let xmr_to_swap = 1_000_000_000_000; + let xmr_to_swap = xmr_btc::monero::Amount::from_piconero(1_000_000_000_000); let bob_btc_starting_balance = btc_to_swap * 10; - let bob_xmr_starting_balance = 0; + let bob_xmr_starting_balance = xmr_btc::monero::Amount::from_piconero(0); let alice_btc_starting_balance = bitcoin::Amount::ZERO; - let alice_xmr_starting_balance = xmr_to_swap * 10; + let alice_xmr_starting_balance = xmr_to_swap * xmr_btc::monero::Amount::from_piconero(10); let alice_multiaddr: Multiaddr = "/ip4/127.0.0.1/tcp/9877" .parse() @@ -197,8 +197,8 @@ async fn init_alice( monero: &Monero, btc_to_swap: bitcoin::Amount, _btc_starting_balance: bitcoin::Amount, - xmr_to_swap: u64, - xmr_starting_balance: u64, + xmr_to_swap: xmr_btc::monero::Amount, + xmr_starting_balance: xmr_btc::monero::Amount, alice_multiaddr: Multiaddr, ) -> ( AliceState, @@ -208,7 +208,7 @@ async fn init_alice( PeerId, ) { monero - .init(vec![("alice", xmr_starting_balance)]) + .init(vec![("alice", xmr_starting_balance.as_piconero())]) .await .unwrap(); @@ -224,7 +224,7 @@ async fn init_alice( let amounts = SwapAmounts { btc: btc_to_swap, - xmr: xmr_btc::monero::Amount::from_piconero(xmr_to_swap), + xmr: xmr_to_swap, }; let alice_behaviour = alice::Behaviour::default(); @@ -262,8 +262,8 @@ async fn init_bob( monero: &Monero, btc_to_swap: bitcoin::Amount, btc_starting_balance: bitcoin::Amount, - xmr_to_swap: u64, - xmr_stating_balance: u64, + xmr_to_swap: xmr_btc::monero::Amount, + xmr_stating_balance: xmr_btc::monero::Amount, ) -> ( BobState, bob::Swarm, @@ -285,7 +285,7 @@ async fn init_bob( .unwrap(); monero - .init(vec![("bob", xmr_stating_balance)]) + .init(vec![("bob", xmr_stating_balance.as_piconero())]) .await .unwrap(); @@ -293,11 +293,9 @@ async fn init_bob( let amounts = SwapAmounts { btc: btc_to_swap, - xmr: xmr_btc::monero::Amount::from_piconero(xmr_to_swap), + xmr: xmr_to_swap, }; - let rng = &mut OsRng; - let bob_db_dir = tempdir().unwrap(); let bob_db = Database::open(bob_db_dir.path()).unwrap(); let bob_behaviour = bob::Behaviour::default(); @@ -305,9 +303,9 @@ async fn init_bob( let refund_address = bob_btc_wallet.new_address().await.unwrap(); let state0 = xmr_btc::bob::State0::new( - rng, + &mut OsRng, btc_to_swap, - xmr_btc::monero::Amount::from_piconero(xmr_to_swap), + xmr_to_swap, REFUND_TIMELOCK, PUNISH_TIMELOCK, refund_address, diff --git a/xmr-btc/src/monero.rs b/xmr-btc/src/monero.rs index 643c4d32..7196afc4 100644 --- a/xmr-btc/src/monero.rs +++ b/xmr-btc/src/monero.rs @@ -3,7 +3,7 @@ use anyhow::Result; use async_trait::async_trait; use rand::{CryptoRng, RngCore}; use serde::{Deserialize, Serialize}; -use std::ops::{Add, Sub}; +use std::ops::{Add, Mul, Sub}; pub use curve25519_dalek::scalar::Scalar; pub use monero::*; @@ -97,6 +97,14 @@ impl Sub for Amount { } } +impl Mul for Amount { + type Output = Amount; + + fn mul(self, rhs: Self) -> Self::Output { + Self(self.0 * rhs.0) + } +} + impl From for u64 { fn from(from: Amount) -> u64 { from.0