From d2be2ea49aae1b954ff0ab4c3078563e230823a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Granh=C3=A3o?= Date: Thu, 26 Dec 2024 10:52:08 +0000 Subject: [PATCH] Prevent recovering state from WaitingFeeAcceptance to Pending --- lib/core/src/recover/recoverer.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/core/src/recover/recoverer.rs b/lib/core/src/recover/recoverer.rs index 9efc3c6..7eca643 100644 --- a/lib/core/src/recover/recoverer.rs +++ b/lib/core/src/recover/recoverer.rs @@ -12,6 +12,8 @@ use lwk_wollet::hashes::{sha256, Hash as _}; use lwk_wollet::WalletTx; use tokio::sync::Mutex; +use super::model::*; +use crate::model::PaymentState; use crate::prelude::{Direction, Swap}; use crate::wallet::OnchainWallet; use crate::{ @@ -19,8 +21,6 @@ use crate::{ recover::model::{BtcScript, HistoryTxId, LBtcScript}, }; -use super::model::*; - pub(crate) struct Recoverer { master_blinding_key: MasterBlindingKey, onchain_wallet: Arc, @@ -215,10 +215,15 @@ impl Recoverer { }; let is_expired = bitcoin_height >= chain_swap.timeout_block_height; let min_lockup_amount_sat = chain_swap.payer_amount_sat; + let is_waiting_fee_acceptance = + chain_swap.state == PaymentState::WaitingFeeAcceptance; if let Some(new_state) = recovered_data.derive_partial_state(min_lockup_amount_sat, is_expired) { - chain_swap.state = new_state; + // When local state is WaitingFeeAcceptance do not change to Pending + if !(new_state == PaymentState::Pending && is_waiting_fee_acceptance) { + chain_swap.state = new_state; + } } chain_swap.server_lockup_tx_id = recovered_data .lbtc_server_lockup_tx_id