lnwallet/btcwallet: add lightning addr scope before wallet start

In this commit, we add the lightning address scope before the wallet
starts to prevent a race condition between the wallet syncing and adding
the scope itself. This became more apparent with the recent btcwallet
fixes, as several database transactions now occur between the wallet
being started and it syncing.
This commit is contained in:
Wilmer Paulino 2018-11-13 20:07:54 -08:00
parent f9b15e97f3
commit b1860a95e0
No known key found for this signature in database
GPG Key ID: 6DF57B9F9514972F

@ -153,26 +153,13 @@ func (b *BtcWallet) InternalWallet() *base.Wallet {
// //
// This is a part of the WalletController interface. // This is a part of the WalletController interface.
func (b *BtcWallet) Start() error { func (b *BtcWallet) Start() error {
// Establish an RPC connection in addition to starting the goroutines // We'll start by unlocking the wallet and ensuring that the KeyScope:
// in the underlying wallet. // (1017, 1) exists within the internal waddrmgr. We'll need this in
if err := b.chain.Start(); err != nil { // order to properly generate the keys required for signing various
return err // contracts.
}
// Start the underlying btcwallet core.
b.wallet.Start()
// Pass the rpc client into the wallet so it can sync up to the
// current main chain.
b.wallet.SynchronizeRPC(b.chain)
if err := b.wallet.Unlock(b.cfg.PrivatePass, nil); err != nil { if err := b.wallet.Unlock(b.cfg.PrivatePass, nil); err != nil {
return err return err
} }
// We'll now ensure that the KeyScope: (1017, 1) exists within the
// internal waddrmgr. We'll need this in order to properly generate the
// keys required for signing various contracts.
_, err := b.wallet.Manager.FetchScopedKeyManager(b.chainKeyScope) _, err := b.wallet.Manager.FetchScopedKeyManager(b.chainKeyScope)
if err != nil { if err != nil {
// If the scope hasn't yet been created (it wouldn't been // If the scope hasn't yet been created (it wouldn't been
@ -191,6 +178,19 @@ func (b *BtcWallet) Start() error {
} }
} }
// Establish an RPC connection in addition to starting the goroutines
// in the underlying wallet.
if err := b.chain.Start(); err != nil {
return err
}
// Start the underlying btcwallet core.
b.wallet.Start()
// Pass the rpc client into the wallet so it can sync up to the
// current main chain.
b.wallet.SynchronizeRPC(b.chain)
return nil return nil
} }