Skip to content

Commit

Permalink
fix(asb): Accept cooperative redeem request in both AliceState::BtcPu…
Browse files Browse the repository at this point in the history
…nishable and AliceState::BtcPunished (#156)

Alice will accept a cooperative redeem request in both `AliceState::BtcPunishable` and `AliceState::BtcPunished` states. This allows Bob to request a cooperative redeem even if `tx_punish` has not been confirmed yet.
  • Loading branch information
binarybaron authored Nov 13, 2024
1 parent 65e8c89 commit f1fabcf
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion swap/src/asb/event_loop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,7 @@ where
let swap_peer = self.db.get_peer_id(swap_id).await;
let swap_state = self.db.get_state(swap_id).await;

// If we do not find the swap in the database, or we do not have a peer-id for it, reject
let (swap_peer, swap_state) = match (swap_peer, swap_state) {
(Ok(peer), Ok(state)) => (peer, state),
_ => {
Expand All @@ -343,6 +344,7 @@ where
}
};

// If the peer is not the one associated with the swap, reject
if swap_peer != peer {
tracing::warn!(
swap_id = %swap_id,
Expand All @@ -357,7 +359,10 @@ where
continue;
}

let State::Alice (AliceState::BtcPunished { state3 }) = swap_state else {
// If we are in either of these states, the punish timelock has expired
// Bob cannot refund the Bitcoin anymore. We can publish tx_punish to redeem the Bitcoin.
// Therefore it is safe to reveal s_a to let him redeem the Monero
let State::Alice (AliceState::BtcPunished { state3 } | AliceState::BtcPunishable { state3, .. }) = swap_state else {
tracing::warn!(
swap_id = %swap_id,
reason = "swap is in invalid state",
Expand Down

0 comments on commit f1fabcf

Please sign in to comment.