lnd.xprv/lnwallet
Christopher Jämthagen 9083007ece lnwallet: fix bug that retrieves incorrect pkScript in toChannelDelta()
Description of bug:
When calling ReceiveNewCommitment() we will progress through methods
fetchCommitmentView and addHTLC which will add HTLC outputs to the
commitment transaction in the local commitment chain and save the
pkScript to the relevant PaymentDescriptor which resides in the
corresponding updateLog. Finally the local commitment will be added
to the local commitment chain.

When the same user next calls SignNextCommitment we will again
progress through fetchCommitmentView and addHTLC. In addHTLC we will
now overwrite the pkScripts in the PaymentDescriptors with the
pkScript from the context of the remote commitment. When we later
call RevokeCurrentCommitment and proceed into toChannelDelta, we
will not be able to find the correct pkScript in the PaymentDescriptor
to match it against the outputs in the commitment transaction.
This will lead to the nested function locateOutputIndex returning
incorrect values.

Fixing the bug:
We introduce three new fields in PaymentDescriptor:
* ourPkScript
* theirPkScript
* theirPrevPkScript

ourPkScript will include the pkScript for the HTLC from the context
of the local commitment.

theirPkScript will take the value of the latest pkScript for the HTLC
from the context of the remote commitment.

theirPrevPkScript will take the second-latest pkScript for the HTLC
from the context of the remote commitment. This is the value we use
in toChannelDelta when we save a revoked commitment from our peer.

The appropriate value of these fields are set in the addHTLC method.

Additionally we pass a boolean value to toChannelDelta so we know
whether we are operating on a local or remote commitment and grab
the correct pkScript in locateUpdateIndex.
2017-03-21 21:21:46 -07:00
..
btcwallet lnd: fix golint warning which requires to add additional comments 2017-03-13 16:30:23 -07:00
channel_test.go lnd+lnwallet+glide: replace last lingering instances of fastsha256 2017-03-16 19:40:29 -07:00
channel.go lnwallet: fix bug that retrieves incorrect pkScript in toChannelDelta() 2017-03-21 21:21:46 -07:00
config.go config: add --pendingchannel lnd flag 2016-10-22 02:11:18 +03:00
interface_test.go lnd: partially fix golint warnings 2017-03-13 16:30:23 -07:00
interface.go lnd: partially fix golint warnings 2017-03-13 16:30:23 -07:00
log.go lnwallet: correct comment for logging object 2016-12-27 16:43:07 -08:00
parameters.go fundingmanager+lnwallet: add HTLC dust limit logic 2016-12-13 11:01:57 -08:00
README.md multi: add link to LICENSE in README license badges (#100) 2017-01-12 16:31:08 -08:00
reservation.go lnd: partially fix golint warnings 2017-03-13 16:30:23 -07:00
script_utils_test.go multi: replace usage of fastsha256 with crypto/sha256 2017-03-15 18:56:41 -07:00
script_utils.go multi: replace usage of fastsha256 with crypto/sha256 2017-03-15 18:56:41 -07:00
size.go lnd: partially fix golint warnings 2017-03-13 16:30:23 -07:00
wallet.go multi: replace usage of fastsha256 with crypto/sha256 2017-03-15 18:56:41 -07:00

lnwallet

[Build Status] (https://travis-ci.org/lightningnetwork/lnd) [MIT licensed] (https://github.com/lightningnetwork/lnd/blob/master/LICENSE) [GoDoc] (http://godoc.org/github.com/lightningnetwork/lnd/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 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