wallet: relax initial sync detection logic to speed up sync in case of mid restart
In this commit, we relax the initial sync detection logic a bit. We do this as right now, if a user creates an address during the sync point, if they restart, then we'll fall back to performing a rescan from that height as we'll detect that we aren't performing the initial sync, so won't pick up the birthday timestamp. To fix this, we now declare that if we have no UTXO's, then we're still performing the initial sync. This solves this issue as when the user restarts, we'll continue to wait for the backend to sync, and pick up the proper birthday height before we attempt to scan forward for the rescan. However, the one tradeoff is that we'll now always start the rescan from the birthday height until the wallet has gained it's first UTXO. I don't think this is too bad, as after all, the point of a wallet is to manage utxos.
This commit is contained in:
parent
04340fd158
commit
f7085cf1bf
1 changed files with 5 additions and 3 deletions
|
@ -320,7 +320,6 @@ func (w *Wallet) activeData(dbtx walletdb.ReadTx) ([]btcutil.Address, []wtxmgr.C
|
||||||
// syncWithChain brings the wallet up to date with the current chain server
|
// syncWithChain brings the wallet up to date with the current chain server
|
||||||
// connection. It creates a rescan request and blocks until the rescan has
|
// connection. It creates a rescan request and blocks until the rescan has
|
||||||
// finished.
|
// finished.
|
||||||
//
|
|
||||||
func (w *Wallet) syncWithChain() error {
|
func (w *Wallet) syncWithChain() error {
|
||||||
chainClient, err := w.requireChainClient()
|
chainClient, err := w.requireChainClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -344,9 +343,12 @@ func (w *Wallet) syncWithChain() error {
|
||||||
|
|
||||||
startHeight := w.Manager.SyncedTo().Height
|
startHeight := w.Manager.SyncedTo().Height
|
||||||
|
|
||||||
|
// We'll mark this as our first sync if we don't have any unspent
|
||||||
|
// outputs as known by the wallet. This'll allow us to skip a full
|
||||||
|
// rescan at this height, and instead wait for the backend to catch up.
|
||||||
|
isInitialSync := len(unspent) == 0
|
||||||
|
|
||||||
isRecovery := w.recoveryWindow > 0
|
isRecovery := w.recoveryWindow > 0
|
||||||
isInitialSync := len(addrs) == 0 && len(unspent) == 0 &&
|
|
||||||
startHeight == 0
|
|
||||||
birthday := w.Manager.Birthday()
|
birthday := w.Manager.Birthday()
|
||||||
|
|
||||||
// If an initial sync is attempted, we will try and find the block stamp
|
// If an initial sync is attempted, we will try and find the block stamp
|
||||||
|
|
Loading…
Reference in a new issue