Commit graph

1268 commits

Author SHA1 Message Date
Matt Corallo
d62edd58ab Move node_id signing of ChannelAnnouncement into Signer
This removes one more place where we directly access the node_id
secret key in `ChannelManager`, slowly marching towards allowing
the node_id secret key to be offline in the signer.

More importantly, it allows more ChannelAnnouncement logic to move
into the `Channel` without having to pass the node secret key
around, avoiding the announcement logic being split across two
files.
2022-01-25 18:25:56 +00:00
Devrandom
6e19d1f523 Provide preimages to signer 2022-01-24 21:53:03 +01:00
Devrandom
9aa786cfbb Keep track of preimage in OutboundHTLCState on success 2022-01-24 21:53:03 +01:00
valentinewallace
35d4ebb208
Merge pull request #1272 from lightning-signer/2022-01-sign-invoice-api
Improve KeysInterface::sign_invoice API
2022-01-24 11:39:58 -05:00
valentinewallace
b19c56b78a
Merge pull request #1271 from tnull/rename_payee_struct
Rename `Payee` to `PaymentParameters`
2022-01-24 11:34:48 -05:00
Devrandom
803d6b6e2f Improve KeysInterface::sign_invoice API
split hrp from invoice data, to allow parsing, since there is no delimiter between the two parts
2022-01-24 09:48:56 +01:00
vss96
2f01d68148 Sanity check for ChannelManager and KeysInterface
Fix build errors

Create script using p2wsh for comparison

Using p2wpkh for generating the payment script

spendable_outputs sanity check

Return err in spendable_outputs

Doc updates in keysinterface
2022-01-22 10:12:42 +05:30
Elias Rohrer
808477a5ce Rename Payee to PaymentParameters 2022-01-21 10:39:01 +01:00
Matt Corallo
34cdca91ba
Merge pull request #1238 from TheBlueMatt/2022-01-lockorder-checks
Fix and test lockorder
2022-01-14 16:59:42 +00:00
Matt Corallo
89cbb6d74b
Merge pull request #1229 from lightning-signer/2021-12-htlc-anchor-sighashtype
anchors: Fix SigHashType and weight calculations for anchors
2022-01-14 04:10:14 +00:00
Ken Sedgwick
bee00124d2
Set opt_anchors for calls to CommitmentTransaction::new_with_auxiliary_htlc_data 2022-01-13 15:01:31 -08:00
Ken Sedgwick
299b6657d5
Add anchor tests to outbound_commitment_test 2022-01-13 15:01:30 -08:00
Ken Sedgwick
35a6e00b03
Debit funder's output to cover anchors 2022-01-13 15:01:29 -08:00
Ken Sedgwick
557a83096f
Convert HTLC_{SUCCESS,TIMEOUT}_TX_WEIGHT to anchor-aware functions 2022-01-13 15:01:21 -08:00
Ken Sedgwick
9566795c97
Convert COMMITMENT_TX_BASE_WEIGHT to anchor-aware function 2022-01-13 14:59:28 -08:00
Ken Sedgwick
8f09e5a7ff
Set the SigHashType of remote htlc signatures w/ anchors to SinglePlusAnyoneCanPay 2022-01-13 14:37:03 -08:00
Matt Corallo
feb203d3b1 Fix some (non-bug) lock-order-inversions in tests 2022-01-13 01:51:51 +00:00
Matt Corallo
6ccd07bc2d Make lockorder consistent in channelmanager
This resolves a lockorder inversion in
`ChannelManager::finalize_claims` where `pending_outbound_payments`
is locked after `pending_events`, opposite of, for example, the
lockorder in `ChannelManager::fail_htlc_backwards_internal` where
`pending_outbound_payments` is locked at the top of the
`HTLCSource::OutboundRoute` handling and then `pending_events` is
locked at the end.
2022-01-12 21:17:49 +00:00
Matt Corallo
a82067d359
Merge pull request #1013 from TheBlueMatt/2021-07-warning-msgs 2022-01-11 22:52:44 +00:00
Matt Corallo
d786bfaef2 Rely on Error/Warning message data lengths being correct
In https://github.com/lightning/bolts/pull/950, the (somewhat
strange) requirement that error messages be handled even if the
length field is set larger than the size of the package was
removed. Here we change the code to drop the special handling for
this, opting to just fail to read the message if the length is
incorrect.
2022-01-11 20:25:24 +00:00
Matt Corallo
2d7b06e619 Send warning instead of error when we incounter bogus gossip 2022-01-11 19:48:20 +00:00
Matt Corallo
26fe0f753d Convert shutdown invalid script checks to warning messages
As required by the warning messages PR, we should simply warn our
counterparty in this case and let them try again, continuing to try
to use the channel until they tell us otherwise.
2022-01-11 19:48:20 +00:00
Matt Corallo
e137cfb3c4 Send warning messages when appropriate in gossip handling pipeline 2022-01-11 19:48:20 +00:00
Matt Corallo
1b3249a192 Handle sending and receiving warning messages 2022-01-11 19:48:20 +00:00
Matt Corallo
f676f5585f Add a new WarningMessage message to send and receive warnings 2022-01-11 19:48:20 +00:00
Matt Corallo
b62b244c3c
Merge pull request #1223 from lightning-signer/2021-12-invoice-nostd
Adapt lightning-invoice to no_std
2022-01-06 19:25:36 +00:00
Devrandom
01915810d4 Adapt lightning-invoice to no_std 2022-01-05 23:18:03 +01:00
hackerrdave
d46c2a20e1 update repo name to use lightningdevkit 2021-12-26 22:53:16 -05:00
Valentine Wallace
41cfd833f1
inbound_payment: Add utility to get payment preimage given hash/secret
User-requested feature
2021-12-16 18:11:14 -08:00
Valentine Wallace
d734ad814e
inbound_payment: DRY verify method for use in getting preimage
in the next commit(s)
2021-12-16 16:29:11 -08:00
Valentine Wallace
d20239bbeb
create_inbound_payment: warn about dup hashes
Leftover feedback from #1177
2021-12-16 16:27:13 -08:00
Valentine Wallace
6e0820ca19
Salt inbound payment ExpandedKey
Leftover feedback from #1177
2021-12-16 16:24:24 -08:00
Valentine Wallace
8464875555
Drop need to store pending inbound payments
and replace payment_secret with encrypted metadata

See docs on `inbound_payment::verify` for details

Also add min_value checks to all create_inbound_payment* methods
2021-12-16 15:32:21 -08:00
Valentine Wallace
063b7583c1
Macro-ize checking that the total value of an MPP's parts is sane
This DRY-ed code will be used in upcoming commits when we stop storing inbound
payment data
2021-12-16 15:30:52 -08:00
Valentine Wallace
6dd1ec1fed
Add get_inbound_payment_key_material to KeysInterface
This will allow us to retrieve key material for encrypting/decrypting inbound
payment info, in upcoming commits
2021-12-16 15:30:52 -08:00
Matt Corallo
c575429639 Drop allow_wallclock_use feature in favor of simply using std
Fixes #1147.
2021-12-16 18:33:24 +00:00
Matt Corallo
064d709910
Merge pull request #1148 from dunxen/2021-11-new-onion-errors
Add mpp_timeout and invalid_onion_payload descriptions
2021-12-15 23:32:30 +00:00
Matt Corallo
54114c9d85
Merge pull request #1202 from TheBlueMatt/2021-12-fix-retries-races
Fix payment retry races and inform users when a payment fails
2021-12-15 04:58:46 +00:00
Matt Corallo
05d7a33a58 Make attempting to retry a succeeded payment an APIError, not Route
This is symmetric with the new failure once a payment is abandoned.
2021-12-15 03:57:13 +00:00
Matt Corallo
7782d0a1ef Expose an event when a payment has failed and retries complete
When a payment fails, a payer needs to know when they can consider
a payment as fully-failed, and when only some of the HTLCs in the
payment have failed. This isn't possible with the current event
scheme, as discovered recently and as described in the previous
commit.

This adds a new event which describes when a payment is fully and
irrevocably failed, generating it only after the payment has
expired or been marked as expired with
`ChannelManager::mark_retries_exceeded` *and* all HTLCs for it
have failed. With this, a payer can more simply deduce when a
payment has failed and use that to remove payment state or
finalize a payment failure.
2021-12-15 03:57:13 +00:00
Matt Corallo
0b3240ee6a Add a variant to PendingOutboundPayment for retries-exceeded
When a payer gives up trying to retry a payment, they don't know
for sure what the current state of the event queue is.
Specifically, they cannot be sure that there are not multiple
additional `PaymentPathFailed` or even `PaymentSuccess` events
pending which they will see later. Thus, they have a very hard
time identifying whether a payment has truly failed (and informing
the UI of that fact) or if it is still pending. See [1] for more
information.

In order to avoid this mess, we will resolve it here by having the
payer give `ChannelManager` a bit more information - when they
have given up on a payment - and using that to generate a
`PaymentFailed` event when all paths have failed.

This commit adds the neccessary storage and changes for the new
state inside `ChannelManager` and a public method to mark a payment
as failed, the next few commits will add the new `Event` and use
the new features in our `PaymentRetrier`.

[1] https://github.com/lightningdevkit/rust-lightning/issues/1164
2021-12-15 03:57:13 +00:00
Matt Corallo
8c9615e8d6 DRY up payment failure macros in functional_test_utils
... with a more extensible expectation-checking framework for them.
2021-12-15 03:55:55 +00:00
Duncan Dean
e88c7210f8
Add mpp_timeout and invalid_onion_payload descriptions & handling 2021-12-14 21:11:32 +02:00
Matt Corallo
09714e6fe2
Merge pull request #1169 from TheBlueMatt/2021-11-fix-update-announcements
Fix announcements of our own gossip
2021-12-09 18:21:55 +00:00
Matt Corallo
61518f9721
Merge pull request #1203 from lightning-signer/2021-12-value-to-self
Getter for the total channel balance
2021-12-08 02:24:32 +00:00
Matt Corallo
cd4dc39a8c
Merge pull request #1208 from TheBlueMatt/2021-12-less-force-close
Reduce force-closures with user fee estimators which round poorly
2021-12-07 20:11:47 +00:00
Matt Corallo
cd9cd47f68
Merge pull request #1205 from TheBlueMatt/2021-12-new-feature-bit
Support the channel_type feature bit.
2021-12-07 19:28:29 +00:00
Matt Corallo
d5e70ad185 Reduce force-closures with user fee estimators which round poorly
See comment for more
2021-12-07 18:49:05 +00:00
Matt Corallo
8f4a22fe31 Support the channel_type feature bit.
Note that this feature bit does absolutely nothing. We signal it
(as we already support channel type negotiation), but do not bother
to look to see if peers support it, as we don't care - we simply
look for the TLV entry and deduce if a peer supports channel type
negotiation from that.

The only behavioral change at all here is that we don't barf if a
peer sets channel type negotiation to required via the feature bit
(instead of failing the channel at open-time), but of course no
implementations do this, and likely won't for some time (if ever -
you can simply fail channels with unknown types later, and there's
no reason to refuse connections, really).

As defined in https://github.com/lightning/bolts/pull/906
2021-12-07 18:05:29 +00:00
Devrandom
02a9f92ea4 Getter for the total channel balance
The existing balance getters subtract reserve, this one does not.
2021-12-07 15:06:22 +01:00