In this commit, we fix an existing bug that would cause us to be unable to derive the very first key in a key family if the wallet hadn't already derived it in the past. This can happen if a user keeps their same `channel.db`, but restores their wallet resulting in fresh `wallet.db` state. This is an existing issue due to the fact that we don't properly distinguish between an empty key locator, and the very first key in a `KeyFamily`: `(0, 0)`. Atm, `KeyLoactor{0, 0}.IsEmpty() == True`, causing us to be unable to retrieve this key in certain cases since we fall through and attempt address based derivation. In order to remedy this, we add a new special case (until we upgrade `KeyLoactor` formats, but needed for legacy reasons) to _try_ a regular `KeyLoactor` based derivation if we fail to derive via address, and this is an "empty" key loc. This has been tested in the field and shown to work, with the one downside that in this "hot swap restoration" case, we'll hit the database twice to derive the key. |
||
---|---|---|
.. | ||
btcwallet | ||
channel_test.go | ||
channel.go | ||
commit_sort_test.go | ||
commit_sort.go | ||
config.go | ||
errors.go | ||
fee_estimator_test.go | ||
fee_estimator.go | ||
interface_test.go | ||
interface.go | ||
log.go | ||
parameters.go | ||
README.md | ||
reservation.go | ||
sigpool.go | ||
size_test.go | ||
test_utils.go | ||
transactions_test.go | ||
transactions.go | ||
wallet.go |
lnwallet
The lnwallet package implements an abstracted wallet controller that is able to drive channel funding workflows, a number of script utilities, witness generation functions for the various Lightning scripts, revocation key derivation, and the commitment update state machine.
The package is used within lnd
as the core wallet of the daemon. The wallet
itself is composed of several distinct interfaces that decouple the
implementation of things like signing and blockchain access. This separation
allows new WalletController
implementations to be easily dropped into
lnd
without disrupting the code base. A series of integration tests at the
interface level are also in place to ensure conformance of the implementation
with the interface.
Installation and Updating
$ go get -u github.com/lightningnetwork/lnd/lnwallet