Commit Graph

7791 Commits

Author SHA1 Message Date
378e0558c5 htlcswitch/hop: move hop.Exit and hop.Source to hop pkg 2019-09-05 01:35:23 -07:00
fc0e4be4d8 htlcswitch+hop: move ForwardingInfo to hop.ForwaringInfo 2019-09-05 01:35:23 -07:00
83d2112e8b htlcswitch/hop: move NetworkHop to hop.Network 2019-09-05 01:35:20 -07:00
866867a4b0 Merge pull request #3401 from wpaulino/channel-initiator-max-fee
htlcswitch: avoid proposing fee updates exceeding max fee allowed
2019-09-04 20:38:52 -07:00
b43a9f2e20 Merge pull request #1583 from halseth/multibackend-integration-test
[itests] Bitcoind integration test
2019-09-04 20:12:26 -07:00
00682584aa Merge pull request #3441 from cfromknecht/truncated-sid
htlcswitch+routing: omit next_hop_id in final hop payload
2019-09-04 19:55:38 -07:00
7eca7b02a6 Merge pull request #3390 from joostjager/invoice-circuits
channeldb+cnct+invoices: track invoice htlcs
2019-09-04 19:51:37 -07:00
947cc50c13 routing/route/route: prevent modification of hop.TLVRecords
Currently the underlying array backing the hop's TLVRecords is modified
when combining custom records with the primitive forwarding info. This
commit uses a fresh slice to prevent modifications from mutating the
hop itself.
2019-09-04 14:14:34 -07:00
38c64b2030 Merge pull request #3433 from halseth/atpl-nodescore-tracelogs
[autopilot] Add trace logging during node scoring
2019-09-04 13:04:10 -07:00
d1a4fe7e2e Merge pull request #2088 from wpaulino/lower-mempool-spend-check-timeout
chainntnfs/interface_test: lower mempool spend check timeout
2019-09-04 12:08:06 -07:00
278e10a2fd routing/route/route: omit next_hop_id for final hop
BOLT04 says to omit this field for final hops, but must be present on
all other hops.
2019-09-04 12:05:10 -07:00
1b2c9a02b5 record+tlv/onion_types: move type constants to route/hop 2019-09-04 12:05:10 -07:00
dc0f429271 htlcswitch+routing: use TLV hop constructors 2019-09-04 12:05:09 -07:00
495f80e0bc record/hop: add primitive hop TLV record constructors 2019-09-04 12:05:09 -07:00
45cd76e9eb lnrpc+invoicesrpc: report invoice htlcs 2019-09-04 19:20:33 +02:00
d6d9ec6aa5 invoices: replay awareness
Previously the invoice registry wasn't aware of replayed htlcs. This was
dealt with by keeping the invoice accept/settle logic idempotent, so
that a replay wouldn't have an effect.

This mechanism has two limitations:

1. No accurate tracking of the total amount paid to an invoice. The total
amount couldn't just be increased with every htlc received, because it
could be a replay which would lead to counting the htlc amount multiple
times. Therefore the total amount was set to the amount of the first
htlc that was received, even though there may have been multiple htlcs
paying to the invoice.

2. Impossible to check htlc expiry consistently for hodl invoices. When
an htlc is new, its expiry needs to be checked against the invoice cltv
delta. But for a replay, that check must be skipped. The htlc was
accepted in time, the invoice was moved to the accepted state and a
replay some blocks later shouldn't lead to that htlc being cancelled.
Because the invoice registry couldn't recognize replays, it stopped
checking htlc expiry heights when the invoice reached the accepted
state. This prevents hold htlcs from being cancelled after a restart.
But unfortunately this also caused additional htlcs to be accepted on an
already accepted invoice without their expiry being checked.

In this commit, the invoice registry starts to persistently track htlcs
so that replays can be recognized. For replays, an htlc resolution
action is returned early. This fixes both limitations mentioned above.
2019-09-04 19:20:31 +02:00
53eea09b63 channeldb: add now function
Needed for time control in unit tests.
2019-09-04 19:20:29 +02:00
c8fa51f865 invoices: refactor invoice update callback
This commit refactors the invoice registry accept/settle logic so that
it doesn't rely anymore on a set of error values to indirectly
communicate from the update callback to the main function what action is
required on the htlc.
2019-09-04 19:20:27 +02:00
144856757d channeldb+invoices: move invoice cancel logic into registry
This commit is a continuation of the centralization of invoice state
transition logic in the invoice registry.
2019-09-04 19:20:25 +02:00
416bc8c68c channeldb+invoices: move hold invoice settle logic into registry
This commit is a continuation of the centralization of invoice state
transition logic in the invoice registry.
2019-09-04 19:20:23 +02:00
ad3522f1a6 channeldb+invoices: move invoice accept or settle logic into registry
As the logic around invoice mutations gets more complex, the friction
caused by having this logic split between invoice registry and channeldb
becomes more apparent. This commit brings a clearer separation of
concerns by centralizing the accept/settle logic in the invoice
registry.

The original AcceptOrSettle method is renamed to UpdateInvoice because
the update to perform is controlled by the callback.
2019-09-04 19:20:21 +02:00
c1345a4117 multi: use separate cltv expiry field from invoice
Now that the Invoice struct contains the decoded final cltv delta value,
the decoding of payment requests can be removed from the invoice
registry.
2019-09-04 19:20:19 +02:00
4105142c96 channeldb+invoices: add invoice htlcs
This commit adds a set of htlcs to the Invoice struct and
serializes/deserializes this set to/from disk. It is a preparation for
accurate invoice accounting across restarts of lnd.

A migration is added for the invoice htlcs.

In addition to these changes, separate final cltv delta and expiry
invoice fields are created and populated. Previously it was required
to decode this from the stored payment request. The reason to create
a combined commit is to prevent multiple migrations.
2019-09-04 19:20:17 +02:00
061b34b924 channeldb: add int64 to codec 2019-09-04 19:20:15 +02:00
05e6b62cb2 cnct+htlcswitch+invoices: report circuit key to invoice registry
Currently the invoice registry cannot tell apart the htlcs that pay to
an invoice. Because htlcs may also be replayed on startup, it isn't
possible to determine the total amount paid to an invoice.

This commit is a first step towards fixing that. It reports the circuit
keys of htlcs to the invoice registry, which forms the basis for
accurate invoice accounting.
2019-09-04 19:20:13 +02:00
5871d69bde cnct: convert supplement functions to methods 2019-09-04 19:20:11 +02:00
4fe846af6e invoices/test: extend hodl invoice test
Add logic to specifically exercise the replay behavior of invoice
registry for hodl invoices.
2019-09-04 19:20:09 +02:00
43bad4af9f invoices: always check htlc amt with invoice amount
Previously a check was made for accepted and settled invoices against
the paid amount. This opens up a probe vector where an attacker can pay
to an invoice with an amt that is higher than the invoice amount and
find out if the invoice is already paid or not.
2019-09-04 19:20:07 +02:00
762609a169 channeldb: fix suppressed error 2019-09-04 19:20:05 +02:00
d98a22879f invoices/test: clarify test parameters 2019-09-04 19:20:04 +02:00
c397a2ea78 Merge pull request #3438 from alrs/fix-cmd-error
cmd/lncli: Fix dropped error
2019-09-03 19:59:30 -07:00
78c1c4930e Merge pull request #3455 from wpaulino/cli-missing-chan-backup
cmd/lncli: return error upon missing channel backup when parsing
2019-09-03 19:39:12 -07:00
b592760eee Merge pull request #3456 from wpaulino/pending-waiting-close-channel-fields
rpc: populate missing fields for waiting close channels
2019-09-03 19:35:49 -07:00
d8dd6b3245 htlcswitch: cap fee updates to max fee allocation
In this commit, we begin to enforce a maximum channel commitment fee for
channel initiators when attempting to update their commitment fee. Now,
if the new commitment fee happens to exceed their maximum, then a fee
update of the maximum fee allocation will be proposed instead if needed.

A default of up to 50% of the channel initiator's balance is enforced
for the maximum channel commitment fee. It can be modified through the
`--max-channel-fee-allocation` CLI flag.
2019-09-03 16:49:59 -07:00
047d5b173c htlcswitch: refactor TestChannelLinkUpdateCommitFee common code into closure 2019-09-03 16:49:56 -07:00
59d19e0ca9 lnwallet: add MaxFeeRate method to LightningChannel 2019-09-03 16:49:54 -07:00
d7364d0f28 rpc: populate missing fields for waiting close channels 2019-09-03 14:25:03 -07:00
06f544a78c cmd/lncli: return error upon missing channel backup when parsing 2019-09-03 14:04:38 -07:00
686fee57ee cmd/lncli: Fix dropped error 2019-09-03 12:29:26 -07:00
d7f0372fa2 lntest/itest: use timeout constants in rejectHTLC test
The local timeout could be too short for certain backends.
2019-09-02 12:05:51 +02:00
2f1aad257c autopilot/agent: trace log skipped nodes during scoring 2019-09-02 10:41:00 +02:00
d5ab95546e autopilot/combinedattach: trace log scoring process from sub heuristics 2019-09-02 10:40:59 +02:00
b2560b4ad2 autopilot/externalscoreattach: trace log scoring process 2019-09-02 10:40:59 +02:00
bad9f4b685 autopilot/prefattach: trace log score process 2019-09-02 10:40:58 +02:00
2dbc4fe973 autopilot/agent: move expensive graph lookup after channel size check 2019-09-02 10:35:14 +02:00
c3480c6066 lntest/bitcoind: set debug loglevel
Co-authored-by: Wilmer Paulino <wilmer.paulino@gmail.com>
2019-09-02 09:37:41 +02:00
168fc4e1ab lntest/itest: cleanup force closed channel in testSendUpdateDisableChannel
Otherwise following tests would be flaky because of unexpected sweep transaction in the mempool.
2019-09-02 09:37:37 +02:00
857a2c3e65 make+travis: enable bitcoind itests on travis 2019-09-02 09:37:37 +02:00
a57b3de7f9 lntest: compile time check btcd and neutrino BackendCfg interface 2019-09-02 09:37:37 +02:00
45d41dce17 lntest: add BitcoindBackendCfg 2019-09-02 09:37:33 +02:00