|
|
|
@ -45,12 +45,12 @@ pub enum AliceState {
|
|
|
|
|
state0: State0,
|
|
|
|
|
},
|
|
|
|
|
Negotiated {
|
|
|
|
|
channel: ResponseChannel<AliceToBob>,
|
|
|
|
|
channel: Option<ResponseChannel<AliceToBob>>,
|
|
|
|
|
amounts: SwapAmounts,
|
|
|
|
|
state3: State3,
|
|
|
|
|
},
|
|
|
|
|
BtcLocked {
|
|
|
|
|
channel: ResponseChannel<AliceToBob>,
|
|
|
|
|
channel: Option<ResponseChannel<AliceToBob>>,
|
|
|
|
|
amounts: SwapAmounts,
|
|
|
|
|
state3: State3,
|
|
|
|
|
},
|
|
|
|
@ -159,7 +159,7 @@ pub async fn run_until(
|
|
|
|
|
|
|
|
|
|
run_until(
|
|
|
|
|
AliceState::Negotiated {
|
|
|
|
|
channel,
|
|
|
|
|
channel: Some(channel),
|
|
|
|
|
amounts,
|
|
|
|
|
state3,
|
|
|
|
|
},
|
|
|
|
@ -176,13 +176,18 @@ pub async fn run_until(
|
|
|
|
|
channel,
|
|
|
|
|
amounts,
|
|
|
|
|
} => {
|
|
|
|
|
let _ =
|
|
|
|
|
wait_for_locked_bitcoin(state3.tx_lock.txid(), bitcoin_wallet.clone(), config)
|
|
|
|
|
match channel {
|
|
|
|
|
Some(channel) => {
|
|
|
|
|
let _ = wait_for_locked_bitcoin(
|
|
|
|
|
state3.tx_lock.txid(),
|
|
|
|
|
bitcoin_wallet.clone(),
|
|
|
|
|
config,
|
|
|
|
|
)
|
|
|
|
|
.await?;
|
|
|
|
|
|
|
|
|
|
run_until(
|
|
|
|
|
AliceState::BtcLocked {
|
|
|
|
|
channel,
|
|
|
|
|
channel: Some(channel),
|
|
|
|
|
amounts,
|
|
|
|
|
state3,
|
|
|
|
|
},
|
|
|
|
@ -194,11 +199,28 @@ pub async fn run_until(
|
|
|
|
|
)
|
|
|
|
|
.await
|
|
|
|
|
}
|
|
|
|
|
None => {
|
|
|
|
|
tracing::info!("Cannot resume swap from negotiated state, aborting");
|
|
|
|
|
|
|
|
|
|
// Alice did not lock Xmr yet
|
|
|
|
|
run_until(
|
|
|
|
|
AliceState::SafelyAborted,
|
|
|
|
|
is_target_state,
|
|
|
|
|
event_loop_handle,
|
|
|
|
|
bitcoin_wallet,
|
|
|
|
|
monero_wallet,
|
|
|
|
|
config,
|
|
|
|
|
)
|
|
|
|
|
.await
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
AliceState::BtcLocked {
|
|
|
|
|
channel,
|
|
|
|
|
amounts,
|
|
|
|
|
state3,
|
|
|
|
|
} => {
|
|
|
|
|
} => match channel {
|
|
|
|
|
Some(channel) => {
|
|
|
|
|
lock_xmr(
|
|
|
|
|
channel,
|
|
|
|
|
amounts,
|
|
|
|
@ -218,6 +240,20 @@ pub async fn run_until(
|
|
|
|
|
)
|
|
|
|
|
.await
|
|
|
|
|
}
|
|
|
|
|
None => {
|
|
|
|
|
tracing::info!("Cannot resume swap from BTC locked state, aborting");
|
|
|
|
|
|
|
|
|
|
// Alice did not lock Xmr yet
|
|
|
|
|
swap(
|
|
|
|
|
AliceState::SafelyAborted,
|
|
|
|
|
event_loop_handle,
|
|
|
|
|
bitcoin_wallet,
|
|
|
|
|
monero_wallet,
|
|
|
|
|
config,
|
|
|
|
|
)
|
|
|
|
|
.await
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
AliceState::XmrLocked { state3 } => {
|
|
|
|
|
// todo: match statement and wait for t1 can probably be expressed more cleanly
|
|
|
|
|
match state3.current_epoch(bitcoin_wallet.as_ref()).await? {
|
|
|
|
|