Skip to content

Commit

Permalink
review: add SAVED_SWAP_V for new version fields in TakerSavedSwap and…
Browse files Browse the repository at this point in the history
… MakerSavedSwap
  • Loading branch information
laruh committed Sep 29, 2024
1 parent 0661ee2 commit 5ce137f
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 29 deletions.
4 changes: 4 additions & 0 deletions mm2src/mm2_main/src/lp_swap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,10 @@ const NEGOTIATE_SEND_INTERVAL: f64 = 30.;
/// If a certain P2P message is not received, swap will be aborted after this time expires.
const NEGOTIATION_TIMEOUT_SEC: u64 = 90;

/// `MakerPaymentSpendConfirmed` and `MakerPaymentSpendConfirmFailed` events were added to Taker Swap.
/// Nothing has been changed on Maker Swap side.
const SAVED_SWAP_V: u8 = 1;

cfg_wasm32! {
use mm2_db::indexed_db::{ConstructibleDb, DbLocked};
use saved_swap::migrate_swaps_data;
Expand Down
6 changes: 5 additions & 1 deletion mm2src/mm2_main/src/lp_swap/maker_swap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ use super::{broadcast_my_swap_status, broadcast_p2p_tx_msg, broadcast_swap_msg_e
wait_for_maker_payment_conf_until, AtomicSwap, LockedAmount, MySwapInfo, NegotiationDataMsg,
NegotiationDataV2, NegotiationDataV3, RecoveredSwap, RecoveredSwapAction, SavedSwap, SavedSwapIo,
SavedTradeFee, SecretHashAlgo, SwapConfirmationsSettings, SwapError, SwapMsg, SwapPubkeys, SwapTxDataMsg,
SwapsContext, TransactionIdentifier, INCLUDE_REFUND_FEE, NO_REFUND_FEE, WAIT_CONFIRM_INTERVAL_SEC};
SwapsContext, TransactionIdentifier, INCLUDE_REFUND_FEE, NO_REFUND_FEE, SAVED_SWAP_V,
WAIT_CONFIRM_INTERVAL_SEC};
use crate::lp_dispatcher::{DispatcherContext, LpEvents};
use crate::lp_network::subscribe_to_topic;
use crate::lp_ordermatch::MakerOrderBuilder;
Expand Down Expand Up @@ -101,6 +102,7 @@ async fn save_my_maker_swap_event(ctx: &MmArc, swap: &MakerSwap, event: MakerSav
events: vec![],
success_events: MAKER_SUCCESS_EVENTS.iter().map(|event| event.to_string()).collect(),
error_events: MAKER_ERROR_EVENTS.iter().map(|event| event.to_string()).collect(),
version: Some(SAVED_SWAP_V),
}),
Err(e) => return ERR!("{}", e),
};
Expand Down Expand Up @@ -1806,6 +1808,7 @@ pub struct MakerSavedSwap {
pub mm_version: Option<String>,
pub success_events: Vec<String>,
pub error_events: Vec<String>,
pub version: Option<u8>,
}

#[cfg(test)]
Expand Down Expand Up @@ -1862,6 +1865,7 @@ impl MakerSavedSwap {
mm_version: None,
success_events: vec![],
error_events: vec![],
version: None,
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions mm2src/mm2_main/src/lp_swap/recreate_swap_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ fn recreate_maker_swap(ctx: MmArc, taker_swap: TakerSavedSwap) -> RecreateSwapRe
mm_version: Some(ctx.mm_version.clone()),
success_events: MAKER_SUCCESS_EVENTS.iter().map(|event| event.to_string()).collect(),
error_events: MAKER_ERROR_EVENTS.iter().map(|event| event.to_string()).collect(),
version: taker_swap.version,
};

let mut event_it = taker_swap.events.into_iter();
Expand Down Expand Up @@ -297,6 +298,7 @@ async fn recreate_taker_swap(ctx: MmArc, maker_swap: MakerSavedSwap) -> Recreate
mm_version: Some(ctx.mm_version.clone()),
success_events: TAKER_SUCCESS_EVENTS.iter().map(|event| event.to_string()).collect(),
error_events: TAKER_ERROR_EVENTS.iter().map(|event| event.to_string()).collect(),
version: maker_swap.version,
};

let mut event_it = maker_swap.events.into_iter();
Expand Down
55 changes: 27 additions & 28 deletions mm2src/mm2_main/src/lp_swap/taker_swap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ use super::{broadcast_my_swap_status, broadcast_swap_message, broadcast_swap_msg
recv_swap_msg, swap_topic, wait_for_maker_payment_conf_until, AtomicSwap, LockedAmount, MySwapInfo,
NegotiationDataMsg, NegotiationDataV2, NegotiationDataV3, RecoveredSwap, RecoveredSwapAction, SavedSwap,
SavedSwapIo, SavedTradeFee, SwapConfirmationsSettings, SwapError, SwapMsg, SwapPubkeys, SwapTxDataMsg,
SwapsContext, TransactionIdentifier, INCLUDE_REFUND_FEE, NO_REFUND_FEE, WAIT_CONFIRM_INTERVAL_SEC};
SwapsContext, TransactionIdentifier, INCLUDE_REFUND_FEE, NO_REFUND_FEE, SAVED_SWAP_V,
WAIT_CONFIRM_INTERVAL_SEC};
use crate::lp_network::subscribe_to_topic;
use crate::lp_ordermatch::TakerOrderBuilder;
use crate::lp_swap::swap_v2_common::mark_swap_as_finished;
Expand Down Expand Up @@ -135,6 +136,7 @@ async fn save_my_taker_swap_event(ctx: &MmArc, swap: &TakerSwap, event: TakerSav
TAKER_SUCCESS_EVENTS.iter().map(<&str>::to_string).collect()
},
error_events: TAKER_ERROR_EVENTS.iter().map(<&str>::to_string).collect(),
version: Some(SAVED_SWAP_V),
}),
Err(e) => return ERR!("{}", e),
};
Expand Down Expand Up @@ -214,6 +216,7 @@ pub struct TakerSavedSwap {
pub mm_version: Option<String>,
pub success_events: Vec<String>,
pub error_events: Vec<String>,
pub version: Option<u8>,
}

impl TakerSavedSwap {
Expand Down Expand Up @@ -264,39 +267,35 @@ impl TakerSavedSwap {
if !self.is_finished() {
return false;
};
let mut maker_payment_spent = false;
let mut maker_payment_spent_by_watcher = false;
let mut maker_payment_spend_confirmed_failed = false;
for event in self.events.iter() {
match event.event {
TakerSwapEvent::StartFailed(_)
| TakerSwapEvent::NegotiateFailed(_)
| TakerSwapEvent::TakerFeeSendFailed(_)
| TakerSwapEvent::MakerPaymentValidateFailed(_)
| TakerSwapEvent::TakerPaymentRefunded(_)
| TakerSwapEvent::TakerPaymentRefundedByWatcher(_)
| TakerSwapEvent::MakerPaymentSpendConfirmed
| TakerSwapEvent::MakerPaymentWaitConfirmFailed(_) => {
return false;
},
TakerSwapEvent::MakerPaymentSpent(_) => {
maker_payment_spent = true;
},
TakerSwapEvent::MakerPaymentSpentByWatcher(_) => {
maker_payment_spent_by_watcher = true;
match &self.version {
Some(SAVED_SWAP_V) => match event.event {
TakerSwapEvent::StartFailed(_)
| TakerSwapEvent::NegotiateFailed(_)
| TakerSwapEvent::TakerFeeSendFailed(_)
| TakerSwapEvent::MakerPaymentValidateFailed(_)
| TakerSwapEvent::TakerPaymentRefunded(_)
| TakerSwapEvent::TakerPaymentRefundedByWatcher(_)
| TakerSwapEvent::MakerPaymentSpendConfirmed
| TakerSwapEvent::MakerPaymentWaitConfirmFailed(_) => return false,
_ => (),
},
TakerSwapEvent::MakerPaymentSpendConfirmFailed(_) => {
maker_payment_spend_confirmed_failed = true;
// original legacy event version
None => match event.event {
TakerSwapEvent::StartFailed(_)
| TakerSwapEvent::NegotiateFailed(_)
| TakerSwapEvent::TakerFeeSendFailed(_)
| TakerSwapEvent::MakerPaymentValidateFailed(_)
| TakerSwapEvent::TakerPaymentRefunded(_)
| TakerSwapEvent::TakerPaymentRefundedByWatcher(_)
| TakerSwapEvent::MakerPaymentSpent(_)
| TakerSwapEvent::MakerPaymentSpentByWatcher(_)
| TakerSwapEvent::MakerPaymentWaitConfirmFailed(_) => return false,
_ => (),
},
_ => (),
}
}
// MakerPaymentSpent or MakerPaymentSpentByWatcher were the last success events but a new step `MakerPaymentSpendConfirmed` was added after them.
// For backward compatibility (old saved swaps) we need to check for MakerPaymentSpent or MakerPaymentSpentByWatcher
// and if there is no MakerPaymentSpendConfirmFailed.
if (maker_payment_spent || maker_payment_spent_by_watcher) && !maker_payment_spend_confirmed_failed {
return false;
}

true
}
Expand Down

0 comments on commit 5ce137f

Please sign in to comment.