From 06463724d4c69dc3e09f2191de442f5635e9c606 Mon Sep 17 00:00:00 2001 From: JoeGruff Date: Tue, 25 Feb 2025 17:13:23 +0900 Subject: [PATCH] waddrmgr: Put client request first in recovery. --- wallet/wallet.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/wallet/wallet.go b/wallet/wallet.go index d3bfe9811b..7eab31ad4c 100644 --- a/wallet/wallet.go +++ b/wallet/wallet.go @@ -790,16 +790,25 @@ func (w *Wallet) recovery(chainClient chain.Interface, if len(recoveryBatch) == recoveryBatchSize || height == bestHeight { err := walletdb.Update(w.db, func(tx walletdb.ReadWriteTx) error { ns := tx.ReadWriteBucket(waddrmgrNamespaceKey) + err := w.recoverScopedAddresses( + chainClient, tx, ns, recoveryBatch, + recoveryMgr.State(), scopedMgrs, + ) + if err != nil { + return err + } + // TODO: Any error here will roll back this + // entire tx. This may cause the in memory sync + // point to become desyncronized. Refactor so + // that this cannot happen. for _, block := range blocks { err := w.Manager.SetSyncedTo(ns, block) if err != nil { return err } } - return w.recoverScopedAddresses( - chainClient, tx, ns, recoveryBatch, - recoveryMgr.State(), scopedMgrs, - ) + + return nil }) if err != nil { return err