Commit graph

5509 commits

Author SHA1 Message Date
Elias Rohrer
9c6c9abb0e
rustfmt: Run on util/logger.rs 2024-09-19 09:34:17 +02:00
Elias Rohrer
f26001f2ea
rustfmt: Run on util/indexed_map.rs 2024-09-19 09:33:57 +02:00
Elias Rohrer
8fb3c3f16e
rustfmt: Run on util/fuzz_wrappers.rs 2024-09-19 09:33:34 +02:00
Elias Rohrer
32b55bb85d
rustfmt: Run on util/errors.rs 2024-09-19 09:33:13 +02:00
Elias Rohrer
fff097a476
rustfmt: Run on util/config.rs 2024-09-19 09:32:38 +02:00
Elias Rohrer
8e506301ca
rustfmt: Run on util/byte_utils.rs 2024-09-19 09:32:24 +02:00
Elias Rohrer
8e2c0e22de
rustfmt: Run on util/base32.rs 2024-09-19 09:31:49 +02:00
Elias Rohrer
95fd1f7bc7
rustfmt: Run on util/atomic_counter.rs 2024-09-19 09:31:21 +02:00
Matt Corallo
cdd1298a38
Merge pull request #3289 from tnull/2024-09-fix-rgs-bp-builds
Fix builds of `lightning-rapid-gossip-sync` and `lightning-background-processor` crates
2024-09-18 14:31:18 +00:00
Elias Rohrer
545b037827
Drop no-std feature
We drop the `lightning/no-std` feature and just take
`hashbrown`,`possiblyrandom` and `libm` as required dependencies.
2024-09-18 09:07:58 +02:00
Valentine Wallace
487d6a09a7
Fix silent rebase conflict that broke tests
429cbe1a06 merged a PR that renamed
Offer::signing_pubkey to Offer::issuer_signing_pubkey. However, there was a
silent rebase conflict and a test added as part of
1059f5ffc5 did not get the memo and used the old
method name, breaking the test build.
2024-09-17 17:24:42 -04:00
Matt Corallo
815d255aa8
Merge pull request #3319 from tnull/2024-09-rustfmt-sync
`rustfmt`: Run on `lightning/src/sync/*`
2024-09-17 19:37:51 +00:00
Matt Corallo
866cedf17a
Merge pull request #3313 from valentinewallace/2024-09-fix-offer-double-pay
Don't pay a duplicate BOLT 12 invoice if `ChannelManager` is stale
2024-09-17 17:38:04 +00:00
Valentine Wallace
fbb3ab2704
Fix bug where we double-pay an offer due to stale manager
This fixes the following bug:
- An outbound payment is AwaitingInvoice
- We receive an invoice and lock the HTLCs into the relevant ChannelMonitors
- The monitors are successfully persisted, but the ChannelManager fails to
  persist, so the outbound payment remains AwaitingInvoice
- We restart, causing the channels to close due to a stale ChannelManager
- We receive a duplicate invoice, and attempt to pay it again due to the
  payment still being AwaitingInvoice in the stale ChannelManager

After the fix for this, we will notice that the payment is already locked into
the monitor on startup and transition the incorrectly-AwaitingInvoice payment
to Retryable, which prevents double-paying on duplicate invoice receipt.
2024-09-17 09:52:49 -04:00
Elias Rohrer
8746a80977
rustfmt: Run on sync/mod.rs 2024-09-17 13:07:28 +02:00
Elias Rohrer
6f1949b0d6
rustfmt: Run on sync/test_lockorder_checks.rs 2024-09-17 13:06:29 +02:00
Elias Rohrer
e3fb566e05
rustfmt: Run on sync/nostd_sync.rs 2024-09-17 13:05:40 +02:00
Elias Rohrer
2cb1664cf6
rustfmt: Run on sync/fairrwlock.rs 2024-09-17 13:04:35 +02:00
Elias Rohrer
9962e4b497
rustfmt: Run on sync/debug_sync.rs 2024-09-17 13:03:25 +02:00
Jeffrey Czyz
e11025f94d
Rename Refund::payer_id
For consistency with Offer::issuer_signing_pubkey, rename
Refund::payer_id to use "signing_pubkey" instead of "id".
2024-09-16 13:56:47 -05:00
Jeffrey Czyz
dd8f744257
Rename InvoiceRequest::payer_id
For consistency with Offer::issuer_signing_pubkey, rename
InvoiceRequest::payer_id to use "signing_pubkey" instead of "id".
2024-09-16 13:56:46 -05:00
Jeffrey Czyz
de29295bb4
Update offer test vectors from latest spec changes 2024-09-16 13:56:46 -05:00
Jeffrey Czyz
cfe84305cd
Use unsigned invoice types in docs 2024-09-16 13:56:46 -05:00
Jeffrey Czyz
a466f2e2f4
Add issuer_signing_pubkey to Bolt12Invoice
Useful for determining if the signing_pubkey is the
issuer_signing_pubkey or is from a blinded path.
2024-09-16 13:56:46 -05:00
Jeffrey Czyz
73512709e7
Re-write Offer::issuer_signing_pubkey documentation 2024-09-16 13:56:46 -05:00
Jeffrey Czyz
df58f26ada
Rename Offer::signing_pubkey to Offer::issuer_signing_pubkey
The spec was recently changed to use offer_issuer_id instead of
offer_node_id. LDK always used signing_pubkey to avoid confusion with a
node_id. Rename it to issuer_signing_pubkey now as InvoiceRequest and
Bolt12Invoice will have similarly named methods in upcoming commits.
2024-09-16 13:56:41 -05:00
Valentine Wallace
3c2da4147c
Move monitor<>outbound_payments startup htlc syncing code.
Move the code that ensures that HTLCs locked into ChannelMonitors are
synchronized with the ChannelManager's OutboundPayments store to the
outbound_payments module.

This is useful both because ChannelManager::read is very long/confusing method,
so it's nice to encapsulate some of its functionality, and because we need to
fix an existing bug in this logic where we may risk double-paying an offer due
to outbound_payments being stale on startup. See the next commit for this
bugfix.
2024-09-16 13:34:03 -04:00
Valentine Wallace
8c356d8658
Test utils: use full import path in reload_node macro. 2024-09-16 13:34:03 -04:00
Elias Rohrer
802f5a65b4
rustfmt: Run on crypto/mod.rs 2024-09-16 12:38:51 +02:00
Elias Rohrer
3fea0c2cac
rustfmt: Run on crypto/utils.rs 2024-09-16 12:38:51 +02:00
Elias Rohrer
22d8beb529
rustfmt: Run on crypto/streams.rs 2024-09-16 12:38:51 +02:00
Elias Rohrer
bc8066bf9d
rustfmt: Run on crypto/poly1305.rs 2024-09-16 12:38:50 +02:00
Elias Rohrer
93756a8d26
rustfmt: Run on crypto/chacha20poly1305rfc.rs 2024-09-16 12:38:50 +02:00
Elias Rohrer
03d8cff673
rustfmt: Run on crypto/chacha20.rs 2024-09-16 12:38:46 +02:00
Matt Corallo
22146a98df
Merge pull request #3140 from valentinewallace/2024-06-pay-static-invoice
Support paying static invoices
2024-09-15 16:58:46 +00:00
Valentine Wallace
6e27aecb40
Remove payment_release_secret from async payments messages.
This field isn't necessary because we already authenticate the messages via the
blinded reply paths payment_id, nonce and HMAC.
2024-09-13 10:40:06 -04:00
Valentine Wallace
4bcf53e597
Document PendingOutboundPayment::{Static}InvoiceReceived semantics.
While these variants may sound similar, they are very different. One is so
temporary it's never even persisted to disk, the other is a state we will stay
in for hours or days. See added docs for more info.
2024-09-13 10:40:06 -04:00
Valentine Wallace
26d1582c3b
Add new Bolt12PaymentError for failed blinded path creation.
Currently used when initiating an async payment via held_htlc_available OM. This
OM needs a reply path back to us, so use this error for our invoice_error OM if
we fail to create said reply path.
2024-09-13 10:40:06 -04:00
Valentine Wallace
615eefb543
Verify inbound ReleaseHeldHtlc messages via hmac.
See AsyncPaymentsContext::hmac, but this prevents the recipient from
deanonymizing us. Without this, if they are able to guess the correct payment
id, then they could create a blinded path to us and confirm our identity.

We also move the PAYMENT_HASH_HMAC_INPUT const to use &[7; 16], which is safe
because this const was added since the last release. This ordering reads more
smoothly.
2024-09-13 10:40:06 -04:00
Valentine Wallace
5a7f52313b
Rename Payment{Hash,Id} hmac creation/verification methods for offers.
We want to specify that these methods are only to be used in an outbound offers
payment context, because we'll be adding similar methods for the outbound async
payments context in upcoming commits.
2024-09-13 10:40:06 -04:00
Valentine Wallace
c4f3e2567b
Don't trigger manager persistence on unexpected release_htlc message.
If someone sends us an unexpected or duplicate release_held_htlc onion message,
we should simply ignore it and not persist the entire ChannelManager in
response.
2024-09-13 10:40:06 -04:00
Valentine Wallace
7dd178738d
Correct docs on payment id in RecentPaymentDetails. 2024-09-13 10:40:06 -04:00
Valentine Wallace
6d415b15c2
Support abandoning pending outbound async payments.
Async payments may have very high expires because we may be waiting for days
for the recipient to come online, so it's important that users be able to
abandon these payments early if needed.
2024-09-13 10:40:06 -04:00
Valentine Wallace
985e6ac14a
Timeout expired outbound async payments. 2024-09-13 10:40:06 -04:00
Valentine Wallace
0297a1e4ee
Support sending async payments as an always-online sender.
Async receive is not yet supported.

Here we process inbound release_htlc onion messages, check that they actually
correspond to one of our outbound payments, and actually forward the HTLCs.
Valid release_htlc receipt indicates that the recipient has now come online to
receive.
2024-09-13 10:40:06 -04:00
Valentine Wallace
69356e7686
Split off send_payment_for_bolt12_invoice_internal util.
This new util will be able to send to both static and non-static BOLT 12
invoices.
2024-09-13 10:40:06 -04:00
Valentine Wallace
8569830eb0
Set max path len on receipt of static invoice.
Because we may receive a static invoice to pay days before the recipient
actually comes back online to receive the payment, it's good to do as many
checks as we can up-front. Here we ensure that the blinded paths provided
in the invoice won't cause us to exceed the maximum onion packet size.
2024-09-13 10:40:06 -04:00
Valentine Wallace
e4d7681cba
Error on static invoice with unknown required features. 2024-09-13 10:40:06 -04:00
Valentine Wallace
28269a7879
DRY handling when initiating payment to BOLT 12 invoice. 2024-09-13 10:40:05 -04:00
Valentine Wallace
b6f44798fc
Support initiating an async payment to a static invoice.
Supported when the sender is an always-online node. Here we send the initial
held_htlc_available onion message upon receipt of a static invoice, next we'll
need to actually send HTLCs upon getting a response to said OM.
2024-09-13 10:40:05 -04:00