lnd/lnwallet/btcwallet
Olaoluwa Osuntokun d6524ea517
keychain+lnwallet: when fetching priv keys or signing try to use cache
In this commit, we start to optimistically use the new private key cache
that was added to btcwallet. As is, btcwallet will cache the decrypted
account keys for each scope in memory. However, the existing methods
to derive a child key from those account keys requires a write database
transaction, and will re-derive the private key using BIP-32 each time.

The newly added `DeriveFromKeyPathCache` lets us skip all this and
directly use a cache assuming the account info is already cached. The
new logic will try to use this method, but if it fails fall back to the
existing `DeriveFromKeyPath` method. All calls after this will use this
new cached key.

Fixes https://github.com/lightningnetwork/lnd/issues/5125.

Basic benchmark before the btcwallet change and after:
```
benchmark                    old ns/op     new ns/op     delta
BenchmarkDerivePrivKey-8     22840583      125           -100.00%

benchmark                    old allocs     new allocs     delta
BenchmarkDerivePrivKey-8     89             2              -97.75%

benchmark                    old bytes     new bytes     delta
BenchmarkDerivePrivKey-8     10225         24            -99.77%
```
2021-08-25 18:55:22 -07:00
..
blockchain.go btcwallet: lock blockcache for Neutrino GetBlock 2021-04-28 09:46:11 +02:00
btcwallet_rpctest.go make: use low-scrypt to speed up unit-race 2020-12-10 17:42:26 -08:00
btcwallet.go Merge pull request #5333 from wpaulino/incompatible-account-addr-type 2021-05-27 19:06:13 -07:00
config.go lnwallet+kvdb: remove duplicate bdb backend imports 2021-07-22 09:47:36 +02:00
driver.go btcwallet: make blockcache available to BtcWallet 2021-04-28 09:46:11 +02:00
signer.go keychain+lnwallet: when fetching priv keys or signing try to use cache 2021-08-25 18:55:22 -07:00