Address PR feedback

Add context to logging statements. Use amount type for monero in tests. Remove stale
code and comments.
This commit is contained in:
rishflab 2020-12-07 13:55:13 +11:00
parent 282997c105
commit 8592ef5f79
4 changed files with 37 additions and 92 deletions

View File

@ -125,7 +125,6 @@ pub async fn swap(
.await .await
} }
// TODO: use macro or generics
pub fn is_complete(state: &AliceState) -> bool { pub fn is_complete(state: &AliceState) -> bool {
matches!( matches!(
state, state,
@ -153,7 +152,7 @@ pub async fn run_until(
monero_wallet: Arc<crate::monero::Wallet>, monero_wallet: Arc<crate::monero::Wallet>,
config: Config, config: Config,
) -> Result<(AliceState, Swarm)> { ) -> Result<(AliceState, Swarm)> {
info!("{}", state); info!("Current state:{}", state);
if is_target_state(&state) { if is_target_state(&state) {
Ok((state, swarm)) Ok((state, swarm))
} else { } else {

View File

@ -76,7 +76,6 @@ where
.await .await
} }
// TODO: use macro or generics
pub fn is_complete(state: &BobState) -> bool { pub fn is_complete(state: &BobState) -> bool {
matches!( matches!(
state, state,
@ -111,7 +110,7 @@ pub async fn run_until<R>(
where where
R: RngCore + CryptoRng + Send, R: RngCore + CryptoRng + Send,
{ {
info!("{}", state); info!("Current state: {}", state);
if is_target_state(&state) { if is_target_state(&state) {
Ok(state) Ok(state)
} else { } else {
@ -303,62 +302,3 @@ where
} }
} }
} }
// // State machine driver for recovery execution
// #[async_recursion]
// pub async fn abort(state: BobState, io: Io) -> Result<BobState> {
// 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") {
// // Bob publishes TxCancel
// abort(BobState::Cancelled, io).await
// } else {
// // >t2
// // submit TxCancel
// abort(BobState::Punished, io).await
// }
// }
// BobState::Cancelled => {
// // Bob has cancelled the swap
// // If <t2 Bob refunds
// if unimplemented!("<t2") {
// // Submit TxRefund
// abort(BobState::BtcRefunded, io).await
// } else {
// // Bob failed to refund in time and has been punished
// abort(BobState::Punished, io).await
// }
// }
// BobState::BtcRedeemed => {
// // 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),
// }
// }

View File

@ -26,15 +26,15 @@ async fn happy_path() {
.await .await
.unwrap(); .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_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 * // this xmr value matches the logic of alice::calculate_amounts i.e. btc *
// 10_000 * 100 // 10_000 * 100
let xmr = 1_000_000_000_000; let xmr_to_swap = xmr_btc::monero::Amount::from_piconero(1_000_000_000_000);
let xmr_alice = xmr * 10; let xmr_alice = xmr_to_swap * xmr_btc::monero::Amount::from_piconero(10);
let xmr_bob = 0; let xmr_bob = xmr_btc::monero::Amount::from_piconero(0);
let alice_multiaddr: Multiaddr = "/ip4/127.0.0.1/tcp/9876" let alice_multiaddr: Multiaddr = "/ip4/127.0.0.1/tcp/9876"
.parse() .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( let (alice_state, alice_swarm, alice_btc_wallet, alice_xmr_wallet, alice_peer_id) = init_alice(
&bitcoind, &bitcoind,
&monero, &monero,
btc, btc_to_swap,
btc_alice, btc_alice,
xmr, xmr_to_swap,
xmr_alice, xmr_alice,
alice_multiaddr.clone(), alice_multiaddr.clone(),
) )
@ -56,9 +56,9 @@ async fn happy_path() {
alice_peer_id, alice_peer_id,
&bitcoind, &bitcoind,
&monero, &monero,
btc, btc_to_swap,
btc_bob, btc_bob,
xmr, xmr_to_swap,
xmr_bob, xmr_bob,
) )
.await; .await;
@ -93,12 +93,12 @@ async fn happy_path() {
assert_eq!( assert_eq!(
btc_alice_final, 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!(xmr_alice_final <= xmr_alice - xmr_to_swap);
assert_eq!(xmr_bob_final.as_piconero(), xmr_bob + xmr); 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 /// 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(); .unwrap();
let btc_to_swap = bitcoin::Amount::from_sat(1_000_000); 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_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_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" let alice_multiaddr: Multiaddr = "/ip4/127.0.0.1/tcp/9877"
.parse() .parse()
@ -197,8 +197,8 @@ async fn init_alice(
monero: &Monero, monero: &Monero,
btc_to_swap: bitcoin::Amount, btc_to_swap: bitcoin::Amount,
_btc_starting_balance: bitcoin::Amount, _btc_starting_balance: bitcoin::Amount,
xmr_to_swap: u64, xmr_to_swap: xmr_btc::monero::Amount,
xmr_starting_balance: u64, xmr_starting_balance: xmr_btc::monero::Amount,
alice_multiaddr: Multiaddr, alice_multiaddr: Multiaddr,
) -> ( ) -> (
AliceState, AliceState,
@ -208,7 +208,7 @@ async fn init_alice(
PeerId, PeerId,
) { ) {
monero monero
.init(vec![("alice", xmr_starting_balance)]) .init(vec![("alice", xmr_starting_balance.as_piconero())])
.await .await
.unwrap(); .unwrap();
@ -224,7 +224,7 @@ async fn init_alice(
let amounts = SwapAmounts { let amounts = SwapAmounts {
btc: btc_to_swap, btc: btc_to_swap,
xmr: xmr_btc::monero::Amount::from_piconero(xmr_to_swap), xmr: xmr_to_swap,
}; };
let alice_behaviour = alice::Behaviour::default(); let alice_behaviour = alice::Behaviour::default();
@ -262,8 +262,8 @@ async fn init_bob(
monero: &Monero, monero: &Monero,
btc_to_swap: bitcoin::Amount, btc_to_swap: bitcoin::Amount,
btc_starting_balance: bitcoin::Amount, btc_starting_balance: bitcoin::Amount,
xmr_to_swap: u64, xmr_to_swap: xmr_btc::monero::Amount,
xmr_stating_balance: u64, xmr_stating_balance: xmr_btc::monero::Amount,
) -> ( ) -> (
BobState, BobState,
bob::Swarm, bob::Swarm,
@ -285,7 +285,7 @@ async fn init_bob(
.unwrap(); .unwrap();
monero monero
.init(vec![("bob", xmr_stating_balance)]) .init(vec![("bob", xmr_stating_balance.as_piconero())])
.await .await
.unwrap(); .unwrap();
@ -293,11 +293,9 @@ async fn init_bob(
let amounts = SwapAmounts { let amounts = SwapAmounts {
btc: btc_to_swap, 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_dir = tempdir().unwrap();
let bob_db = Database::open(bob_db_dir.path()).unwrap(); let bob_db = Database::open(bob_db_dir.path()).unwrap();
let bob_behaviour = bob::Behaviour::default(); 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 refund_address = bob_btc_wallet.new_address().await.unwrap();
let state0 = xmr_btc::bob::State0::new( let state0 = xmr_btc::bob::State0::new(
rng, &mut OsRng,
btc_to_swap, btc_to_swap,
xmr_btc::monero::Amount::from_piconero(xmr_to_swap), xmr_to_swap,
REFUND_TIMELOCK, REFUND_TIMELOCK,
PUNISH_TIMELOCK, PUNISH_TIMELOCK,
refund_address, refund_address,

View File

@ -3,7 +3,7 @@ use anyhow::Result;
use async_trait::async_trait; use async_trait::async_trait;
use rand::{CryptoRng, RngCore}; use rand::{CryptoRng, RngCore};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::ops::{Add, Sub}; use std::ops::{Add, Mul, Sub};
pub use curve25519_dalek::scalar::Scalar; pub use curve25519_dalek::scalar::Scalar;
pub use monero::*; 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<Amount> for u64 { impl From<Amount> for u64 {
fn from(from: Amount) -> u64 { fn from(from: Amount) -> u64 {
from.0 from.0