From 06bf42c746ae1b1e59b06a70be0d1d4f22806c97 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Tue, 12 Mar 2019 18:30:35 -0700 Subject: [PATCH] wallet: use last synced block as birthday in development environments In this commit, we address an issue with chains that are not current, like in the often case of regtest and simnet chains. Syncing the wallet would fail due to the chain not being current and not finding a suitable birthday block. We fix this by just using the last synced block as the birthday block to ensure we can properly sync to the chain. --- wallet/wallet.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/wallet/wallet.go b/wallet/wallet.go index e1304ee..4a9236c 100644 --- a/wallet/wallet.go +++ b/wallet/wallet.go @@ -612,13 +612,26 @@ func (w *Wallet) syncToBirthday() (*waddrmgr.BlockStamp, error) { } // If a birthday stamp has yet to be found, we'll return an error - // indicating so. - if birthdayStamp == nil { + // indicating so, but only if this is a live chain like it is the case + // with testnet and mainnet. + if birthdayStamp == nil && !w.isDevEnv() { tx.Rollback() return nil, fmt.Errorf("did not find a suitable birthday "+ "block with a timestamp greater than %v", birthday) } + // Otherwise, if we're in a development environment and we've yet to + // find a birthday block due to the chain not being current, we'll + // use the last block we've synced to as our birthday to proceed. + if birthdayStamp == nil { + syncedTo := w.Manager.SyncedTo() + err := w.Manager.SetBirthdayBlock(ns, syncedTo, true) + if err != nil { + return nil, err + } + birthdayStamp = &syncedTo + } + if err := tx.Commit(); err != nil { tx.Rollback() return nil, err