@ -23,12 +23,12 @@ use structopt::StructOpt;
use swap ::bitcoin ::{ Amount , TxLock } ;
use swap ::cli ::command ::{ AliceConnectParams , Arguments , Command , Data , MoneroParams } ;
use swap ::database ::Database ;
use swap ::e xecution_params::{ ExecutionParams , GetExecutionParams } ;
use swap ::e nv::{ Config , GetConfig } ;
use swap ::network ::quote ::BidQuote ;
use swap ::protocol ::bob ;
use swap ::protocol ::bob ::{ Builder , EventLoop } ;
use swap ::seed ::Seed ;
use swap ::{ bitcoin , e xecution_params , monero } ;
use swap ::{ bitcoin , e nv , monero } ;
use tracing ::{ debug , error , info , warn , Level } ;
use tracing_subscriber ::FmtSubscriber ;
use url ::Url ;
@ -76,10 +76,7 @@ async fn main() -> Result<()> {
let seed =
Seed ::from_file_or_generate ( data_dir . as_path ( ) ) . context ( "Failed to read in seed file" ) ? ;
// hardcode to testnet/stagenet
let bitcoin_network = bitcoin ::Network ::Testnet ;
let monero_network = monero ::Network ::Stagenet ;
let execution_params = execution_params ::Testnet ::get_execution_params ( ) ;
let env_config = env ::Testnet ::get_config ( ) ;
match args . cmd {
Command ::BuyXmr {
@ -95,29 +92,18 @@ async fn main() -> Result<()> {
} ,
electrum_rpc_url ,
} = > {
if receive_monero_address . network ! = monero_network {
if receive_monero_address . network ! = env_config. monero_network {
bail ! (
"Given monero address is on network {:?}, expected address on network {:?}" ,
receive_monero_address . network ,
monero_network
env_config. monero_network
)
}
let bitcoin_wallet = init_bitcoin_wallet (
bitcoin_network ,
electrum_rpc_url ,
seed ,
data_dir . clone ( ) ,
execution_params ,
)
. await ? ;
let ( monero_wallet , _process ) = init_monero_wallet (
monero_network ,
data_dir ,
monero_daemon_host ,
execution_params ,
)
. await ? ;
let bitcoin_wallet =
init_bitcoin_wallet ( electrum_rpc_url , seed , data_dir . clone ( ) , env_config ) . await ? ;
let ( monero_wallet , _process ) =
init_monero_wallet ( data_dir , monero_daemon_host , env_config ) . await ? ;
let bitcoin_wallet = Arc ::new ( bitcoin_wallet ) ;
let ( event_loop , mut event_loop_handle ) = EventLoop ::new (
& seed . derive_libp2p_identity ( ) ,
@ -149,7 +135,7 @@ async fn main() -> Result<()> {
Uuid ::new_v4 ( ) ,
bitcoin_wallet . clone ( ) ,
Arc ::new ( monero_wallet ) ,
e xecution_params ,
e nv_config ,
event_loop_handle ,
receive_monero_address ,
)
@ -192,25 +178,14 @@ async fn main() -> Result<()> {
} ,
electrum_rpc_url ,
} = > {
if receive_monero_address . network ! = monero_network {
bail ! ( "The given monero address is on network {:?}, expected address of network {:?}." , receive_monero_address . network , monero_network)
if receive_monero_address . network ! = env_config. monero_network {
bail ! ( "The given monero address is on network {:?}, expected address of network {:?}." , receive_monero_address . network , env_config. monero_network)
}
let bitcoin_wallet = init_bitcoin_wallet (
bitcoin_network ,
electrum_rpc_url ,
seed ,
data_dir . clone ( ) ,
execution_params ,
)
. await ? ;
let ( monero_wallet , _process ) = init_monero_wallet (
monero_network ,
data_dir ,
monero_daemon_host ,
execution_params ,
)
. await ? ;
let bitcoin_wallet =
init_bitcoin_wallet ( electrum_rpc_url , seed , data_dir . clone ( ) , env_config ) . await ? ;
let ( monero_wallet , _process ) =
init_monero_wallet ( data_dir , monero_daemon_host , env_config ) . await ? ;
let bitcoin_wallet = Arc ::new ( bitcoin_wallet ) ;
let ( event_loop , event_loop_handle ) = EventLoop ::new (
@ -226,7 +201,7 @@ async fn main() -> Result<()> {
swap_id ,
bitcoin_wallet . clone ( ) ,
Arc ::new ( monero_wallet ) ,
e xecution_params ,
e nv_config ,
event_loop_handle ,
receive_monero_address ,
)
@ -247,14 +222,8 @@ async fn main() -> Result<()> {
force ,
electrum_rpc_url ,
} = > {
let bitcoin_wallet = init_bitcoin_wallet (
bitcoin_network ,
electrum_rpc_url ,
seed ,
data_dir ,
execution_params ,
)
. await ? ;
let bitcoin_wallet =
init_bitcoin_wallet ( electrum_rpc_url , seed , data_dir , env_config ) . await ? ;
let resume_state = db . get_state ( swap_id ) ? . try_into_bob ( ) ? . into ( ) ;
let cancel =
@ -278,14 +247,8 @@ async fn main() -> Result<()> {
force ,
electrum_rpc_url ,
} = > {
let bitcoin_wallet = init_bitcoin_wallet (
bitcoin_network ,
electrum_rpc_url ,
seed ,
data_dir ,
execution_params ,
)
. await ? ;
let bitcoin_wallet =
init_bitcoin_wallet ( electrum_rpc_url , seed , data_dir , env_config ) . await ? ;
let resume_state = db . get_state ( swap_id ) ? . try_into_bob ( ) ? . into ( ) ;
@ -296,20 +259,18 @@ async fn main() -> Result<()> {
}
async fn init_bitcoin_wallet (
network : bitcoin ::Network ,
electrum_rpc_url : Url ,
seed : Seed ,
data_dir : PathBuf ,
e xecution_params: ExecutionParams ,
e nv_config: Config ,
) -> Result < bitcoin ::Wallet > {
let wallet_dir = data_dir . join ( "wallet" ) ;
let wallet = bitcoin ::Wallet ::new (
electrum_rpc_url . clone ( ) ,
network ,
execution_params . bitcoin_finality_confirmations ,
& wallet_dir ,
seed . derive_extended_private_key ( network ) ? ,
seed . derive_extended_private_key ( env_config . bitcoin_network ) ? ,
env_config ,
)
. await
. context ( "Failed to initialize Bitcoin wallet" ) ? ;
@ -320,24 +281,24 @@ async fn init_bitcoin_wallet(
}
async fn init_monero_wallet (
monero_network : monero ::Network ,
data_dir : PathBuf ,
monero_daemon_host : String ,
e xecution_params: ExecutionParams ,
e nv_config: Config ,
) -> Result < ( monero ::Wallet , monero ::WalletRpcProcess ) > {
let network = env_config . monero_network ;
const MONERO_BLOCKCHAIN_MONITORING_WALLET_NAME : & str = "swap-tool-blockchain-monitoring-wallet" ;
let monero_wallet_rpc = monero ::WalletRpc ::new ( data_dir . join ( "monero" ) ) . await ? ;
let monero_wallet_rpc_process = monero_wallet_rpc
. run ( monero_ network, monero_daemon_host . as_str ( ) )
. run ( network, monero_daemon_host . as_str ( ) )
. await ? ;
let monero_wallet = monero ::Wallet ::new (
monero_wallet_rpc_process . endpoint ( ) ,
monero_network ,
MONERO_BLOCKCHAIN_MONITORING_WALLET_NAME . to_string ( ) ,
e xecution_params. monero_avg_block_time ,
e nv_config ,
) ;
monero_wallet . open_or_create ( ) . await ? ;