diff --git a/swap/src/bin/swap.rs b/swap/src/bin/swap.rs index 3d7d3f5a..e60bbb9b 100644 --- a/swap/src/bin/swap.rs +++ b/swap/src/bin/swap.rs @@ -23,7 +23,7 @@ use swap::{ alice::swap::AliceState, bitcoin, bob, bob::swap::BobState, - cli::{Command, Options}, + cli::{Command, Options, Resume}, monero, network::transport::build, storage::Database, @@ -173,58 +173,65 @@ async fn main() -> Result<()> { // Print the table to stdout table.printstd(); } - Command::Resume { + Command::Resume(Resume::SellXmr { swap_id, bitcoind_url, bitcoin_wallet_name, monero_wallet_rpc_url, listen_addr, - alice_peer_id, - alice_addr, - } => { + }) => { let db_swap = db.get_state(swap_id)?; - if let Ok(alice_state) = AliceState::try_from(db_swap.clone()) { - let (bitcoin_wallet, monero_wallet) = setup_wallets( - bitcoind_url, - bitcoin_wallet_name.as_str(), - monero_wallet_rpc_url, - config, - ) - .await?; - alice_swap( - swap_id, - alice_state, - listen_addr, - bitcoin_wallet, - monero_wallet, - config, - db, - ) - .await?; - } else if let Ok(bob_state) = BobState::try_from(db_swap) { - let (bitcoin_wallet, monero_wallet) = setup_wallets( - bitcoind_url, - bitcoin_wallet_name.as_str(), - monero_wallet_rpc_url, - config, - ) - .await?; - bob_swap( - swap_id, - bob_state, - bitcoin_wallet, - monero_wallet, - db, - alice_peer_id, - alice_addr, - ) - .await?; - } else { - anyhow::bail!("Unable to construct swap state for swap with id {}") - } + let alice_state = AliceState::try_from(db_swap.clone())?; + let (bitcoin_wallet, monero_wallet) = setup_wallets( + bitcoind_url, + bitcoin_wallet_name.as_str(), + monero_wallet_rpc_url, + config, + ) + .await?; + alice_swap( + swap_id, + alice_state, + listen_addr, + bitcoin_wallet, + monero_wallet, + config, + db, + ) + .await?; } - } + Command::Resume(Resume::BuyXmr { + swap_id, + bitcoind_url, + bitcoin_wallet_name, + monero_wallet_rpc_url, + alice_peer_id, + alice_addr, + }) => { + let db_swap = db.get_state(swap_id)?; + + let bob_state = BobState::try_from(db_swap)?; + + let (bitcoin_wallet, monero_wallet) = setup_wallets( + bitcoind_url, + bitcoin_wallet_name.as_str(), + monero_wallet_rpc_url, + config, + ) + .await?; + bob_swap( + swap_id, + bob_state, + bitcoin_wallet, + monero_wallet, + db, + alice_peer_id, + alice_addr, + ) + .await?; + } + }; Ok(()) } diff --git a/swap/src/cli.rs b/swap/src/cli.rs index 6961e1a1..c8b274e2 100644 --- a/swap/src/cli.rs +++ b/swap/src/cli.rs @@ -60,16 +60,15 @@ pub enum Command { receive_monero: xmr_btc::monero::Amount, }, History, - Resume { + Resume(Resume), +} + +#[derive(structopt::StructOpt, Debug)] +pub enum Resume { + SellXmr { #[structopt(long = "swap-id")] swap_id: Uuid, - #[structopt(long = "connect-peer-id")] - alice_peer_id: PeerId, - - #[structopt(long = "connect-addr")] - alice_addr: Multiaddr, - #[structopt(long = "bitcoind-rpc", default_value = "http://127.0.0.1:8332")] bitcoind_url: Url, @@ -82,11 +81,31 @@ pub enum Command { )] monero_wallet_rpc_url: Url, - // TODO: The listen address is only relevant for Alice, but should be role independent - // see: https://github.com/comit-network/xmr-btc-swap/issues/77 - #[structopt(long = "p2p-address", default_value = "/ip4/127.0.0.1/tcp/9876")] + #[structopt(long = "listen-address", default_value = "/ip4/127.0.0.1/tcp/9876")] listen_addr: Multiaddr, }, + BuyXmr { + #[structopt(long = "swap-id")] + swap_id: Uuid, + + #[structopt(long = "counterpart-peer-id")] + alice_peer_id: PeerId, + + #[structopt(long = "counterpart-addr")] + alice_addr: Multiaddr, + + #[structopt(long = "bitcoind-rpc", default_value = "http://127.0.0.1:8332")] + bitcoind_url: Url, + + #[structopt(long = "bitcoin-wallet-name")] + bitcoin_wallet_name: String, + + #[structopt( + long = "monero-wallet-rpc", + default_value = "http://127.0.0.1:18083/json_rpc" + )] + monero_wallet_rpc_url: Url, + }, } fn parse_btc(str: &str) -> anyhow::Result {