btcwallet: return chain best timestamp while backend is syncing

A while back, changes were made to the wallet such that it waits for the
backend to be synced before beginning to store the latest 10,000 blocks
of the chain. This inherently broke sync progress implementations based
on the best_header_timestamp result from the GetInfo RPC for
neutrino-based nodes as the wallet is no longer tracking all blocks in
the chain. To work around this, we now make sure to return the backend's
best header timestamp instead of the wallet's, allowing said sync
progress implementations to work again.
This commit is contained in:
Wilmer Paulino 2020-10-19 13:57:30 -07:00
parent d12f76fd6d
commit 1ad0dbade9
No known key found for this signature in database
GPG Key ID: 6DF57B9F9514972F

@ -875,9 +875,19 @@ func (b *BtcWallet) IsSynced() (bool, int64, error) {
return false, 0, err
}
// Make sure the backing chain has been considered synced first.
if !b.wallet.ChainSynced() {
bestHeader, err := b.cfg.ChainSource.GetBlockHeader(bestHash)
if err != nil {
return false, 0, err
}
bestTimestamp = bestHeader.Timestamp.Unix()
return false, bestTimestamp, nil
}
// If the wallet hasn't yet fully synced to the node's best chain tip,
// then we're not yet fully synced.
if syncState.Height < bestHeight || !b.wallet.ChainSynced() {
if syncState.Height < bestHeight {
return false, bestTimestamp, nil
}