Commit graph

5050 commits

Author SHA1 Message Date
Jeffrey Czyz
e15044b889
Refactor InvoiceRequestContents fields into a sub-struct
InvoiceRequestBuilder has a field containing InvoiceRequestContents.
When deriving the payer_id from the remaining fields, a struct is needed
without payer_id as it not optional. Refactor InvoiceRequestContents to
have an inner struct without the payer_id such that
InvoiceRequestBuilder can use it instead.
2023-04-19 21:31:06 -05:00
Jeffrey Czyz
dd2ccd2322
Stateless verification of InvoiceRequest
Verify that an InvoiceRequest was produced from an Offer constructed by
the recipient using the Offer metadata reflected in the InvoiceRequest.
The Offer metadata consists of a 128-bit encrypted nonce and possibly a
256-bit HMAC over the nonce and Offer TLV records (excluding the signing
pubkey) using an ExpandedKey.

Thus, the HMAC can be reproduced from the offer bytes using the nonce
and the original ExpandedKey, and then checked against the metadata. If
metadata does not contain an HMAC, then the reproduced HMAC was used to
form the signing keys, and thus can be checked against the signing
pubkey.
2023-04-19 21:30:40 -05:00
Jeffrey Czyz
b2e87ff25b
TlvStream range iterator
Add an iterator that yields TlvRecords over a range of a TlvStream.
Useful for verifying that, e.g., an InvoiceRequest was sent in response
to an Offer constructed by the intended recipient.
2023-04-19 21:08:05 -05:00
Jeffrey Czyz
1cad430e14
Offer metadata and signing pubkey derivation
Add support for deriving a transient signing pubkey for each Offer from
an ExpandedKey and a nonce. This facilitates recipient privacy by not
tying any Offer to any other nor to the recipient's node id.

Additionally, support stateless Offer verification by setting its
metadata using an HMAC over the nonce and the remaining TLV records,
which will be later verified when receiving an InvoiceRequest.
2023-04-19 21:06:37 -05:00
Jeffrey Czyz
336fc023ed
Add another ExpandedKey derivation for Offers
To support transient signing pubkeys and payer ids for Offers, add
another key derivation to ExpandedKey. Also useful for constructing
metadata for stateless message authentication.
2023-04-18 13:30:32 -05:00
Jeffrey Czyz
fd426a0018
Add missing UnknownRequiredFeatures tests 2023-04-18 13:30:32 -05:00
Jeffrey Czyz
ce7a02d1e0
Common offers test_utils module
Move utility functions used across all offers modules into a common
module. Avoids duplicating larger utilities such as payment_path across
more than one module.
2023-04-18 13:30:10 -05:00
Matt Corallo
a332bfcdc2
Merge pull request #2198 from TheBlueMatt/2023-04-fewer-disables
Only disable channels ~10 min after disconnect, rather than one
2023-04-18 15:56:58 +00:00
Matt Corallo
89e063b793 Only disable channels ~10 min after disconnect, rather than one
We correctly send out a gossip channel disable update after one
full time tick being down (1-2 minutes). This is pretty nice in
that it avoids nodes trying to route through our nodes too often
if they're down. Other nodes have a much longer time window,
causing them to have much less aggressive channel disables. Sadly,
at one minute it's not super uncommon for tor nodes to get disabled
(once a day or so on two nodes I looked at), and this causes the
lightning terminal scorer to consider the LDK node unstable (even
though it's the one doing the disabling - so is online). This
causes user frustration and makes LDK look bad (even though it's
probably failing fewer payments).

Given this, and future switches to block-based `channel_update`
timestamp fields, it makes sense to go ahead and switch to delaying
channel disable announcements for 10 minutes. This puts us more in
line with other implementations and reduces gossip spam, at the
cost of less reliable payments.

Fixes #2175, at least the currently visible parts.
2023-04-18 04:31:52 +00:00
Matt Corallo
6e7000c5e7 Set channel_update disable bit based on staged even for onions
When generating a `channel_update` either in response to a fee
configuration change or an HTLC failure, we currently poll the
channel to check if the peer's connected when setting the disabled
bit in the `channel_update`. This could cause cases where we set
the disable bit even though the peer *just* disconnected, and don't
generate a followup broadcast `channel_update` with the disabled
bit unset.

While a node generally shouldn't rebroadcast a `channel_update` it
received in an onion, there's nothing inherently stopping them from
doing so. Obviously in the fee-update case we expect the message to
propagate.

Luckily, since we already "stage" disable-changed updates, we can
check the staged state and use that to set the disabled bit in all
`channel_update` cases.
2023-04-18 04:20:10 +00:00
Matt Corallo
2ebbe6f304
Merge pull request #2138 from swilliamson5/replace-our-max-htlcs-constant
Replace `OUR_MAX_HTLCS` with config knob
2023-04-17 21:58:07 +00:00
Matt Corallo
68149a204f
Merge pull request #2196 from wpaulino/ci-ignore-master-cancel-prev
Prevent unnecessary CI workflow runs
2023-04-17 21:54:55 +00:00
Matt Corallo
bd25a8192f
Merge pull request #2195 from TheBlueMatt/2023-04-115-bindings-upstream 2023-04-17 21:25:37 +00:00
Wilmer Paulino
d63006dcc0
Cancel in-progress jobs on updated push
At times, PRs can go through multiple pushes in a short amount of time,
spawning a workflow run for each. Most of the time, there's no need to
let the previous jobs running if the code itself has changed (e.g., via
a force push), and we'd benefit from having those slots be used by other
PRs/branches instead.
2023-04-17 11:32:53 -07:00
Wilmer Paulino
f471a1b9da
Ignore workflow runs on master branch
This master branch is just an alias to the main branch for legacy
reasons, so there's no need to run workflows on both branches.
2023-04-17 11:30:30 -07:00
Matt Corallo
b709bb3e35 Mark the invoice Network getter no-export
...as it is redundant with the `currency` getter if we're not using
the rust-bitcoin types natively.
2023-04-17 17:44:19 +00:00
Wilmer Paulino
15050895fd
Merge pull request #2177 from TheBlueMatt/2023-04-test-function-generics
Genericize Test Functions
2023-04-17 09:56:18 -07:00
Matt Corallo
c977def259
Merge pull request #2191 from TheBlueMatt/2023-04-fix-bucket-deser
Fix deserialization of u16 arrays
2023-04-17 15:11:53 +00:00
Matt Corallo
ac004a91aa
Merge pull request #2187 from benthecarman/invoice-serde-no-std 2023-04-17 13:28:49 +00:00
Steven Williamson
f65660945d
Replace OUR_MAX_HTLCS constant with config knob
holder_max_accepted_htlcs. Set upper bound of 483

Writes an even TLV if the value isn't 50
2023-04-16 19:28:49 -04:00
Matt Corallo
7775356c39 Fix deserialization of u16 arrays
u16 arrays are used in the historical liquidity range tracker.
Previously, we read them without applying the stride multiple,
reading bytes repeatedly and at an offset, corrupting data as we
go.

This applies the correct stride multiplayer fixing the issue.
2023-04-16 21:59:35 +00:00
benthecarman
36f610c4cf
Add CI test for compile no-std serde lightning-invoice 2023-04-16 13:44:14 -05:00
benthecarman
778c752a0b
Fix compiling lightning-invoice for no-std + serde 2023-04-15 15:38:53 -05:00
Matt Corallo
e1e38196e2
Merge pull request #2172 from TheBlueMatt/2023-04-fix-panicy-debug-assert
Remove a race-y debug assertion in new channel update handling
2023-04-14 15:00:12 +00:00
Matt Corallo
accfdae541
Merge pull request #2180 from benthecarman/impl-pk-to-node-id
Implement to and from for PublicKey and NodeId
2023-04-14 14:56:51 +00:00
benthecarman
7a37e2cd23
Impl FromStr for NodeId 2023-04-13 14:53:23 -05:00
Matt Corallo
b3ab1cb801
Merge pull request #2179 from benthecarman/use-node-alias-type
Use NodeAlias type in NodeAnnouncement
2023-04-13 19:46:30 +00:00
Matt Corallo
cfb9eb9639 Move some additional test macros into functions
This marginally reduces the quantity of code compiled in tests
further.
2023-04-13 18:40:46 +00:00
Matt Corallo
d55623601f Introduce traits to make test utils generic across the CM Holder
In our test utilities, we generally refer to a `Node` struct which
holds a `ChannelManager` and a number of other structs. However, we
use the same utilities in benchmarking, where we have a different
`Node`-like struct. This made moving from macros to functions
entirely impossible, as we end up needing multiple types in a given
context.

Thus, here, we take the pain and introduce some wrapper traits
which encapsulte what we need from `Node`, swapping some of our
macros to functions.
2023-04-13 18:40:46 +00:00
benthecarman
f78e6b956c
Use NodeAlias type in NodeAnnouncement 2023-04-13 13:09:03 -05:00
benthecarman
5ed6732b87
Implement to and from for PublicKey and NodeId 2023-04-13 12:59:42 -05:00
Matt Corallo
fb86fc2744 DRY the event handling in ChannelManager
In the coming commits we'll add some additional complexity to the
event handling flows, so best to DRY them up before we get there.
2023-04-12 17:01:45 +00:00
valentinewallace
157af6ec1c
Merge pull request #2142 from alecchendev/2023-03-expose-fail-reason-in-payment-failure
Expose a failure reason in `PaymentFailed`
2023-04-11 17:26:16 -04:00
Alec Chen
23c70642b8 Add reason to Event::PaymentFailed
This includes adding a reason to `PendingOutboundPayment::Abandoned` and
using that reason when pushing an `Event::PaymentFailed`.
2023-04-10 17:13:47 -05:00
valentinewallace
34686692e9
Merge pull request #2173 from benthecarman/convert-currency-to-netowkr
Convert Network to and from Currency
2023-04-10 12:21:16 -04:00
benthecarman
841dd1ea3a
Convert Network to and from Currency 2023-04-08 21:24:17 -05:00
Matt Corallo
29f80269b5 Remove a race-y debug assertion in new channel update handling
In 6090d9e6a8 we swapped out old
debug assertions that checked that a lock was `try_lock`able to
test that certain locks weren't held when we needed to be able to
take them in some near branch. However, another slipped in after in
the `ChannelMonitorUpdate` handling rework, which is replaced with
the new debug assertions here.
2023-04-09 01:43:39 +00:00
Arik
74328bd6e7
Merge pull request #2161 from benthecarman/prune-stale-channels-rgs
Prune stale channels from network graph after RGS sync.
2023-04-07 23:26:19 -07:00
valentinewallace
186cd047f8
Merge pull request #2158 from TheBlueMatt/2023-04-handle_err_more-check
Test for extra locks held in `handle_error` unconditionally
2023-04-07 16:19:27 -04:00
Jeffrey Czyz
1ceb41e08b
Merge pull request #2023 from futurepaul/fallback-to-address
add `Fallback` getter that returns `Address`
2023-04-07 14:39:32 -05:00
Alec Chen
432f0e678e Create PaymentFailureReason enum 2023-04-07 13:45:11 -05:00
Matt Corallo
f30dc859e7
Merge pull request #2170 from TheBlueMatt/2023-04-silent-merge-conflict
Fix silent merge conflict between new test and payment refactor
2023-04-07 18:27:33 +00:00
Wilmer Paulino
a5ecb85171
Merge pull request #2162 from jkczyz/2023-04-invoice-hash 2023-04-07 10:11:36 -07:00
Matt Corallo
8a743693ba Fix silent merge conflict between new test and payment refactor 2023-04-07 16:30:25 +00:00
Matt Corallo
568a20b832
Merge pull request #2148 from TheBlueMatt/2023-04-claim-from-closed
Allow claiming a payment if a channel with an HTLC has closed
2023-04-07 16:17:25 +00:00
Matt Corallo
1016e1f605
Merge pull request #2139 from TheBlueMatt/2023-03-metadata-prefactors
Add a new `RecipientOnionFields` and replace `PaymentSecret` with it
2023-04-07 16:14:30 +00:00
Matt Corallo
c8441d2f2d
Merge pull request #2165 from wpaulino/fix-bp-channel-pending-panic-flake
Use signal for handling ChannelPending in test_background_event_handling
2023-04-07 16:08:34 +00:00
Matt Corallo
9e6e20ff61 Split up comically long error return 2023-04-07 04:54:07 +00:00
Jeffrey Czyz
39befa16b4
Expose a BOLT 12 Invoice's signable_hash
This is useful as an identifier for downstream clients like VLS.
2023-04-06 23:15:31 -05:00
Jeffrey Czyz
821c79da98
Expose a BOLT 11 Invoice's signable_hash
Otherwise, an Invoice must first be converted to a SignedRawInvoice to
obtain the hash.
2023-04-06 23:15:25 -05:00