lnd/lnwallet
Olaoluwa Osuntokun 3b94e5df4d
lnwallet: introduce distinct HTLC counter+index on top of updateLog
In this commit, we fix an existing derivation from the commitment state
machine as defined within the specification. Before this commit, we
only kept a single counter which both HTLC adds and fails/settles would
share. This was valid in the prior pre-spec iteration of the state
machine. However in the current draft of the spec, only a distinct
counter for HTLCs are used throughout.

This would cause an incompatibility, as if we mixed adds and settles
during an exchange, then our counter values would differ with other
implementations. To remedy this, we now introduce a distinct HTLC
counter and index within the updateLog.

Each Add will increment both the log counter, and the HTLC counter.
Each Settle/Fail will only increment the log counter. Inbound
Settle/Fails will index into the HTLC index as to target the proper
HTLC. The PaymentDescriptor type has been extended with an additional
field (HltcIndex) which itself tracks the index of an incoming/outgoing
HTLC.
2017-10-22 18:36:57 -07:00
..
btcwallet lnwallet: export btcwallet.NetworkDir 2017-10-19 19:17:35 -07:00
channel_test.go lnwallet: introduce distinct HTLC counter+index on top of updateLog 2017-10-22 18:36:57 -07:00
channel.go lnwallet: introduce distinct HTLC counter+index on top of updateLog 2017-10-22 18:36:57 -07:00
config.go lnwallet: flesh out the Config struct, wallet constructor now takes 2017-07-30 17:49:41 -07:00
interface_test.go lnwallet: add reorg test 2017-10-19 21:26:31 -07:00
interface.go lnwallet: Extend Utxo struct with AddressType. 2017-10-19 17:37:53 -07:00
log.go lnwallet: don't attach the rpcclient to the lnwallet logging instance 2017-08-30 20:32:37 -07:00
parameters.go fundingmanager+lnwallet: add HTLC dust limit logic 2016-12-13 11:01:57 -08:00
README.md multi: fix formatting issues in packge README's 2017-03-27 16:25:25 -07:00
reservation.go lnwallet: add new methods to ChannelReservation for dealing w/ chan constraints 2017-09-12 17:41:55 +02:00
script_utils_test.go lnwallet: Pass around key ring instead of individual keys. 2017-10-19 22:23:14 -07:00
script_utils.go lnwallet: Split tx generation code out of fetchCommitmentView. 2017-10-19 22:23:14 -07:00
signdescriptor_test.go lnwallet: move latest SignDescriptor + serialization 2017-08-25 17:56:50 -07:00
signdescriptor.go lnwallet/signdesc: increases max witness parsing length 2017-09-19 19:18:21 -07:00
sigpool.go lnwallet: replace sort.Sort with sort.Slice in channel.go 2017-10-02 23:13:47 -07:00
size_test.go lnwallet: Add TxWeightEstimator support for nested pay-to-witness. 2017-10-19 17:37:53 -07:00
size.go lnwallet: Add TxWeightEstimator support for nested pay-to-witness. 2017-10-19 17:37:53 -07:00
txout_test.go lnwallet: move txout serialization out of lnwire 2017-09-14 13:56:25 +02:00
txout.go lnwallet: move txout serialization out of lnwire 2017-09-14 13:56:25 +02:00
wallet.go lnwallet: Pass around key ring instead of individual keys. 2017-10-19 22:23:14 -07:00
witnessgen.go lnwallet/witnessgen: adds htlc offered+accepted revoke witness type 2017-09-19 19:18:21 -07: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 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