From 2681699da22b839b48ceacbdbbbf33df96f95626 Mon Sep 17 00:00:00 2001 From: yse Date: Mon, 3 Mar 2025 00:17:21 +0100 Subject: [PATCH] fix: ensure wallet and chain service tips are within leeway --- lib/core/src/recover/recoverer.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/core/src/recover/recoverer.rs b/lib/core/src/recover/recoverer.rs index 4472aa5..300f53c 100644 --- a/lib/core/src/recover/recoverer.rs +++ b/lib/core/src/recover/recoverer.rs @@ -23,6 +23,8 @@ use crate::{ utils, }; +const LIQUID_TIP_LEEWAY: u32 = 3; + pub(crate) struct Recoverer { master_blinding_key: MasterBlindingKey, swapper: Arc, @@ -171,6 +173,14 @@ impl Recoverer { &self, swaps: &mut [Swap], ) -> Result> { + let wallet_tip = self.onchain_wallet.tip().await.height(); + let liquid_tip = self.liquid_chain_service.tip().await?; + if wallet_tip.abs_diff(liquid_tip) > LIQUID_TIP_LEEWAY { + let msg = format!("Skipping recovery: wallet and liquid chain service tips are too far apart - chain_service_tip {liquid_tip} wallet_tip {wallet_tip}"); + log::debug!("{msg}"); + anyhow::bail!(msg) + } + let recovery_started_at = utils::now(); let raw_tx_map = self.onchain_wallet.transactions_by_tx_id().await?;