lnd.xprv/lnwallet
Olaoluwa Osuntokun 5f0fad85be multi: address lingering TODO by no longer wiping out local HTLCs on remote close
In this commit, we fix a lingering TOOD statement in the channel arb.
Before this commitment, we would simply wipe our our local HTLC set of
the HTLC set that was on the remote commitment transaction on force
close. This was incorrect as if our commitment transaction had an HTLC
that the remote commitment didn't, then we would fail to cancel that
back, and cause both channels to time out on chain.

In order to remedy this, we introduce a new `HtlcSetKey` struct to track
all 3 possible in-flight set of HTLCs: ours, theirs, and their pending.

We also we start to tack on additional data to all the unilateral close
messages we send to subscribers. This new data is the CommitSet, or the
set of valid commitments at channel closure time. This new information
will be used by the channel arb in an upcoming commit to ensure it will
cancel back HTLCs in the case of split commitment state.

Finally, we start to thread through an optional *CommitSet to the
advanceState method. This additional information will give the channel
arb addition information it needs to ensure it properly cancels back
HTLCs that are about to time out or may time out depending on which
commitment is played.

Within the htlcswitch pakage, we modify the `SignNextCommitment` method
to return the new set of pending HTLCs for the remote party's commitment
transaction and `ReceiveRevocation` to return the latest set of
commitment transactions on the remote party's commitment as well. This
is a preparatory change which is part of a larger change to address a
lingering TODO in the cnct.

Additionally, rather than just send of the set of HTLCs after the we
revoke, we'll also send of the set of HTLCs after the remote party
revokes, and we create a pending commitment state for it.
2019-05-27 14:34:13 -07:00
..
btcwallet lnwallet/btcwallet: provide cancel chan as neutrino QuitChan option 2019-05-09 14:44:52 +02:00
channel_test.go multi: address lingering TODO by no longer wiping out local HTLCs on remote close 2019-05-27 14:34:13 -07:00
channel.go multi: address lingering TODO by no longer wiping out local HTLCs on remote close 2019-05-27 14:34:13 -07:00
config.go multi: move Input interface and related code 2019-01-31 13:25:33 +01:00
errors.go Revert "funding+lnwallet: ensure max_htlc_value_in_flight smaller than capacity" 2019-01-29 17:58:04 -08:00
fee_estimator_test.go lnwallet: add new WebApiFeeEstimator for API fee estimation. 2019-04-16 14:16:53 -07:00
fee_estimator.go lnwallet: add new WebApiFeeEstimator for API fee estimation. 2019-04-16 14:16:53 -07:00
interface_test.go lnwallet+chainregistry: remove unused FeeEstimator from wallet cfg 2019-04-16 14:16:56 -07:00
interface.go channel+cnct: remove preimage from channel and resolution 2019-05-15 14:41:49 +02:00
log.go multi: init subsystem loggers via build pkg 2018-10-05 13:04:45 +09:00
parameters.go multi: move Input interface and related code 2019-01-31 13:25:33 +01:00
README.md multi: fix typos in comments 2018-04-17 19:03:27 -07:00
reservation.go Typo corrections in various comments 2019-05-10 17:15:54 +02:00
sigpool.go multi: move Input interface and related code 2019-01-31 13:25:33 +01:00
size_test.go multi: move Input interface and related code 2019-01-31 13:25:33 +01:00
test_utils.go multi: address lingering TODO by no longer wiping out local HTLCs on remote close 2019-05-27 14:34:13 -07:00
transactions_test.go channel+cnct: remove preimage from channel and resolution 2019-05-15 14:41:49 +02:00
transactions.go multi: move Input interface and related code 2019-01-31 13:25:33 +01:00
wallet.go lnwallet/wallet: add missing error handling 2019-05-09 14:44:53 +02:00

lnwallet

Build Status MIT licensed GoDoc

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