wallet: accept 0 bestHeight in developer environments
In this commit, we fix a regression in the wallet when attempting to sync new developer test chains such as regtest and simnet. The wallet would block syncing until a block was mined, but in order to mine a block, an address must be generated by the wallet first. This address generation would block as the syncing logic was already holding the database's mutex.
This commit is contained in:
parent
8c64a08971
commit
ea7c6c3ed9
1 changed files with 17 additions and 4 deletions
|
@ -450,6 +450,18 @@ func (w *Wallet) syncWithChain(birthdayStamp *waddrmgr.BlockStamp) error {
|
||||||
return w.rescanWithTarget(addrs, unspent, nil)
|
return w.rescanWithTarget(addrs, unspent, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// isDevEnv determines whether the wallet is currently under a local developer
|
||||||
|
// environment, e.g. simnet or regtest.
|
||||||
|
func (w *Wallet) isDevEnv() bool {
|
||||||
|
switch uint32(w.ChainParams().Net) {
|
||||||
|
case uint32(chaincfg.RegressionNetParams.Net):
|
||||||
|
case uint32(chaincfg.SimNetParams.Net):
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// scanChain is a helper method that scans the chain from the starting height
|
// scanChain is a helper method that scans the chain from the starting height
|
||||||
// until the tip of the chain. The onBlock callback can be used to perform
|
// until the tip of the chain. The onBlock callback can be used to perform
|
||||||
// certain operations for every block that we process as we scan the chain.
|
// certain operations for every block that we process as we scan the chain.
|
||||||
|
@ -463,7 +475,7 @@ func (w *Wallet) scanChain(startHeight int32,
|
||||||
|
|
||||||
// isCurrent is a helper function that we'll use to determine if the
|
// isCurrent is a helper function that we'll use to determine if the
|
||||||
// chain backend is currently synced. When running with a btcd or
|
// chain backend is currently synced. When running with a btcd or
|
||||||
// bitcoind backend, It will use the height of the latest checkpoint as
|
// bitcoind backend, it will use the height of the latest checkpoint as
|
||||||
// its lower bound.
|
// its lower bound.
|
||||||
var latestCheckptHeight int32
|
var latestCheckptHeight int32
|
||||||
if len(w.chainParams.Checkpoints) > 0 {
|
if len(w.chainParams.Checkpoints) > 0 {
|
||||||
|
@ -471,9 +483,10 @@ func (w *Wallet) scanChain(startHeight int32,
|
||||||
Checkpoints[len(w.chainParams.Checkpoints)-1].Height
|
Checkpoints[len(w.chainParams.Checkpoints)-1].Height
|
||||||
}
|
}
|
||||||
isCurrent := func(bestHeight int32) bool {
|
isCurrent := func(bestHeight int32) bool {
|
||||||
// If the best height is zero, we assume the chain backend
|
// If the best height is zero, we assume the chain backend is
|
||||||
// still is looking for peers to sync to.
|
// still looking for peers to sync to in the case of a global
|
||||||
if bestHeight == 0 {
|
// network, e.g., testnet and mainnet.
|
||||||
|
if bestHeight == 0 && !w.isDevEnv() {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue