]> git.bitcoin.ninja Git - rust-lightning/log
rust-lightning
2 weeks agoSupport sending async payments as an always-online sender.
Valentine Wallace [Wed, 4 Sep 2024 19:24:26 +0000 (15:24 -0400)]
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.

2 weeks agoSplit off send_payment_for_bolt12_invoice_internal util.
Valentine Wallace [Wed, 4 Sep 2024 19:00:38 +0000 (15:00 -0400)]
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.

2 weeks agoSet max path len on receipt of static invoice.
Valentine Wallace [Thu, 29 Aug 2024 19:12:41 +0000 (15:12 -0400)]
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.

2 weeks agoError on static invoice with unknown required features.
Valentine Wallace [Thu, 29 Aug 2024 19:00:08 +0000 (15:00 -0400)]
Error on static invoice with unknown required features.

2 weeks agoDRY handling when initiating payment to BOLT 12 invoice.
Valentine Wallace [Thu, 29 Aug 2024 18:53:12 +0000 (14:53 -0400)]
DRY handling when initiating payment to BOLT 12 invoice.

2 weeks agoSupport initiating an async payment to a static invoice.
Valentine Wallace [Thu, 29 Aug 2024 18:37:45 +0000 (14:37 -0400)]
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.

2 weeks agoRelease pending async payments to PeerManager.
Valentine Wallace [Thu, 29 Aug 2024 18:25:40 +0000 (14:25 -0400)]
Release pending async payments to PeerManager.

2 weeks agoPass full message context into ChanMan blinded path util.
Valentine Wallace [Wed, 10 Jul 2024 18:58:11 +0000 (14:58 -0400)]
Pass full message context into ChanMan blinded path util.

Allows us to repurpose this util to create blinded paths in an async payments
message context while maintaining support for the offers context.

2 weeks agoStore async payment data in PendingOutboundPayment.
Valentine Wallace [Wed, 10 Jul 2024 18:55:34 +0000 (14:55 -0400)]
Store async payment data in PendingOutboundPayment.

Adds a pending outbound payment variant for async payments, which indicates
that we have received a static invoice to pay and have generated a keysend preimage
for the eventual payment. When the recipient comes back online, we'll
transition from this new state to Retryable and actually forward the HTLCs.

2 weeks agoSupport creating PaymentParameters from static invoices.
Valentine Wallace [Thu, 13 Jun 2024 21:12:03 +0000 (17:12 -0400)]
Support creating PaymentParameters from static invoices.

2 weeks agoSupport checking that a static invoice matches an outbound invreq.
Valentine Wallace [Thu, 13 Jun 2024 20:16:47 +0000 (16:16 -0400)]
Support checking that a static invoice matches an outbound invreq.

Useful for ensuring that an inbound static invoice matches one of our outbound
invreqs, otherwise it is an unexpected invoice and should be ignored and not
paid.

2 weeks agoStore AsyncPaymentsMessages for later sending
Valentine Wallace [Thu, 13 Jun 2024 15:25:20 +0000 (11:25 -0400)]
Store AsyncPaymentsMessages for later sending

Upcoming commits will support sending and receiving held_htlc_available and
release_held_htlc messages. These messages need to be enqueued so that they can
be released in ChannelManager's implementation of AsyncPaymentsMessageHandler
to OnionMessenger for sending.

2 weeks agoPass context into held_htlc_available message handling.
Valentine Wallace [Wed, 10 Jul 2024 17:58:53 +0000 (13:58 -0400)]
Pass context into held_htlc_available message handling.

Useful for using the payment_id within to look up the corresponding outbound
async payment so we know we can safely release the HTLCs to the now-onlinen
recipient.

2 weeks agoAdd MessageContext for async payments.
Valentine Wallace [Wed, 10 Jul 2024 17:54:05 +0000 (13:54 -0400)]
Add MessageContext for async payments.

This context will be used in reply paths for outbound held_htlc_available
messages, so we can authenticate the corresponding release_held_htlc messages.

2 weeks agoTweak debug_assert message for parsed onion messages.
Valentine Wallace [Fri, 12 Jul 2024 20:19:53 +0000 (16:19 -0400)]
Tweak debug_assert message for parsed onion messages.

More specific.

2 weeks agoMerge pull request #3010 from shaavan/issue2836
Matt Corallo [Thu, 12 Sep 2024 15:12:39 +0000 (15:12 +0000)]
Merge pull request #3010 from shaavan/issue2836

Introduce Retry InvoiceRequest Flow

2 weeks agoIntroduce handle_message_received test
shaavan [Thu, 11 Jul 2024 14:55:32 +0000 (20:25 +0530)]
Introduce handle_message_received test

- Add a test to verify the functionality of the handle_message_received
  function.
- Ensure the test covers scenarios where InvoiceRequest messages are retried
  for PendingOutboundPayments after a simulated connection loss.

2 weeks agoIntroduce message_received in ChannelMessageHandler
shaavan [Mon, 10 Jun 2024 11:46:08 +0000 (17:16 +0530)]
Introduce message_received in ChannelMessageHandler

- Introduce the `message_received` function to manage the
  behavior when a message is received from any peer.
- This function is used within `ChannelManager` to retry `InvoiceRequest`
  messages if we haven't received the corresponding invoice yet.
- This change makes the offer communication robust against sudden
  connection drops where the initial attempt to send the message
  might have failed.

2 weeks agoIntroduce enqueue_invoice_request Function
shaavan [Thu, 25 Jul 2024 10:09:26 +0000 (15:39 +0530)]
Introduce enqueue_invoice_request Function

1. Separate the logic of forming `invoice_request` messages from
   `invoice_request` and `reply_paths` and enqueueing them into a
   separate function.
2. This logic will be reused in the following commit when reforming
   `invoice_request` messages for retrying.

2 weeks agoIntroduce RetryableInvoiceRequest in AwaitingInvoice
shaavan [Mon, 10 Jun 2024 11:52:09 +0000 (17:22 +0530)]
Introduce RetryableInvoiceRequest in AwaitingInvoice

1. To enable the retry of the Invoice Request message, it's necessary
   to store the essential data required to recreate the message.
2. A new struct is introduced to manage this data, ensuring the
   InvoiceRequest message can be reliably recreated for retries.
3. The addition of an `awaiting_invoice` flag allows tracking of
   retryable invoice requests, preventing the need to lock the
   `pending_outbound_payment` mutex.

2 weeks agoMerge pull request #3291 from tnull/2024-09-add-their-node-id-routing-msg-handler
Matt Corallo [Wed, 11 Sep 2024 22:25:41 +0000 (22:25 +0000)]
Merge pull request #3291 from tnull/2024-09-add-their-node-id-routing-msg-handler

Add node id to remaining `RoutingMessageHandler::handle_` methods

2 weeks agoMerge pull request #3163 from shaavan/invoice_reply_path
Matt Corallo [Wed, 11 Sep 2024 20:17:54 +0000 (20:17 +0000)]
Merge pull request #3163 from shaavan/invoice_reply_path

Introduce Reply Paths for BOLT12 Invoice in Offers Flow.

2 weeks agoRefactor: Take `their_node_id` by value across all handler interfaces
Elias Rohrer [Wed, 11 Sep 2024 14:06:44 +0000 (16:06 +0200)]
Refactor: Take `their_node_id` by value across all handler interfaces

In order to maintain interface consistency, we refactor all message
handler interfaces to take `PublicKey` rather than `&PublicKey`, as the
difference in efficiency should be negigible and the former is easier to
handle in binding languages.

Over time, we also want to move (no pun intended) towards all messaging
interfaces using move semantics, so dropping the reference for
`PublicKey` is the first step in this direction.

2 weeks agoAdd node id to remaining `RoutingMessageHandler::handle_` methods
Elias Rohrer [Wed, 4 Sep 2024 13:39:20 +0000 (15:39 +0200)]
Add node id to remaining `RoutingMessageHandler::handle_` methods

Previously, some `RoutingMessageHandler::handle_` methods (in particular
the ones handling node and channel announcements, as well as channel
updates, omitted the `their_node_id` argument. This didn't allow
implementors to discern *who* sent a particular method.

Here, we add `their_node_id: Option<&PublicKey>` to have them learn who
sent a message, and set `None` if our own node it the originator of a
broadcast operation.

2 weeks agoUpdate Offers Test to Verify BOLT12 Invoice Reply Paths
shaavan [Thu, 29 Aug 2024 11:36:18 +0000 (17:06 +0530)]
Update Offers Test to Verify BOLT12 Invoice Reply Paths

1. Updated the Offers Test to check the reply paths in BOLT12 Invoices.
2. Changed the `extract_invoice` return type from `Option<BlindedMessagePath>`
   to `BlindedMessagePath` since all BOLT12Invoices now have a corresponding
   reply path by default.

2 weeks agoAdd reply_path to BOLT12Invoices in Offers Flow
shaavan [Fri, 6 Sep 2024 12:21:37 +0000 (17:51 +0530)]
Add reply_path to BOLT12Invoices in Offers Flow

1. Introduced reply_path in BOLT12Invoices to address a gap in error handling.
   Previously, if a BOLT12Invoice sent in the offers flow generated an Invoice Error,
   the payer had no way to send this error back to the payee.
2. By adding a reply_path to the Invoice Message, the payer can now communicate
   any errors back to the payee, ensuring better error handling and communication
   within the offers flow.

2 weeks agoAdd HMAC, and nonce to OffersContext::InboundPayment
shaavan [Fri, 6 Sep 2024 12:01:13 +0000 (17:31 +0530)]
Add HMAC, and nonce to OffersContext::InboundPayment

Introduce HMAC and nonce calculation when sending Invoice with
reply path, so that if we receive InvoiceError back for the
corresponding Invoice we can verify the payment hash before logging it.

2 weeks agoMerge pull request #3309 from TheBlueMatt/2024-09-always-print-why
Matt Corallo [Tue, 10 Sep 2024 19:47:15 +0000 (19:47 +0000)]
Merge pull request #3309 from TheBlueMatt/2024-09-always-print-why

Always print why we disconnect explicitly

2 weeks agoMerge pull request #3305 from TheBlueMatt/2024-09-no-redundant-gossip-validation
valentinewallace [Tue, 10 Sep 2024 16:49:06 +0000 (12:49 -0400)]
Merge pull request #3305 from TheBlueMatt/2024-09-no-redundant-gossip-validation

Avoid redundant `{channel,node}_announcement` signature checks

2 weeks agoAlways print why we disconnect explicitly 2024-09-always-print-why
Matt Corallo [Tue, 10 Sep 2024 14:26:57 +0000 (14:26 +0000)]
Always print why we disconnect explicitly

...and drop the old, confusing, "protocol error" message when we
get a duplicate connection from a peer.

This should slightly further disambiguate disconnection reasons,
which are a key debugging tool for assigning blame.

2 weeks agoMerge pull request #3306 from TheBlueMatt/2024-09-chan-id-hex
Elias Rohrer [Tue, 10 Sep 2024 10:33:38 +0000 (12:33 +0200)]
Merge pull request #3306 from TheBlueMatt/2024-09-chan-id-hex

Write ChannelIds out as hex in Debug output

2 weeks agoIntroduce Verification trait.
shaavan [Tue, 10 Sep 2024 10:07:10 +0000 (15:37 +0530)]
Introduce Verification trait.

- The trait defines the public method one may define for creating and
  verifying the HMAC.
- Using a pub trait to define these method allows the flexibility for
  other `OffersMessageHandler` construct to construct the HMAC and
authenticate the message.

2 weeks agoMerge pull request #3296 from alecchendev/2024-09-async-close-sign-followup
Matt Corallo [Mon, 9 Sep 2024 23:59:25 +0000 (23:59 +0000)]
Merge pull request #3296 from alecchendev/2024-09-async-close-sign-followup

Finish closing channel after async closing signed

2 weeks agoAvoid redundant `{channel,node}_announcement` signature checks 2024-09-no-redundant-gossip-validation
Matt Corallo [Sun, 8 Sep 2024 22:33:57 +0000 (22:33 +0000)]
Avoid redundant `{channel,node}_announcement` signature checks

If we receive `{channel,node}_announcement` messages which we
already have, we first validate their signatures and then look in
our graph and discover that we should discard the messages. This
avoids a second lock in `node_announcement` handling but does not
impact our locking in `channel_announcement` handling. It also
avoids lock contention in cases where the signatures are invalid,
but that should be exceedingly rare.

For nodes with relatively few peers, this is a fine state to be in,
however for nodes with many peers, we may see the same messages
hundreds of times. This causes a rather substantial waste of CPU
resources validating gossip messages.

Instead, here, we change to checking our network graph first and
then validate the signatures only if we don't already have the
message.

2 weeks agoFinish closing channel after async closing signed
Alec Chen [Thu, 5 Sep 2024 23:58:01 +0000 (18:58 -0500)]
Finish closing channel after async closing signed

In addressing a followup to test reconnection during closing negotation
with async signing, we change things to only return a `ShutdownResult`
when we actually finish shutting down the channel, i.e. we have the
signature ready to send the final closing signed. This slightly
simplifies the logic where we would shutdown our channel
prematurely before we got the final signature. This also means
that we don't push multiple `ChannelClosed` events if we receive closing
signed, reconnect, and receive closing signed again.

2 weeks agoClean up imports in `lightning-types` 2024-09-chan-id-hex
Matt Corallo [Mon, 9 Sep 2024 15:32:12 +0000 (15:32 +0000)]
Clean up imports in `lightning-types`

To remove the now-redundant `hex_conservative` explicit dependency.

2 weeks agoWrite `ChannelId`s out as hex in `Debug` output
Matt Corallo [Mon, 9 Sep 2024 15:30:54 +0000 (15:30 +0000)]
Write `ChannelId`s out as hex in `Debug` output

`ChannelId`s are almost always referenced as hex, so having debug
output print the raw bytes is somewhat annoying. Instead, we should
dump them as hex the same way we do for `Display`.

This uses the `hex_conservative` `impl_fmt_macros` which does all
the work for us, like we use for `lightning_types`.

2 weeks agoimpl `Borrow<[u8]>` for `ChannelId`
Matt Corallo [Mon, 9 Sep 2024 15:30:09 +0000 (15:30 +0000)]
impl `Borrow<[u8]>` for `ChannelId`

We do this for `Payment*` in `lightning-types` and its needed for
the `hex_conservaitve` `impl_fmt_traits` macro which we'll use in
the next commit.

2 weeks agoMerge pull request #3304 from TheBlueMatt/2024-09-tokio-util-msrv
Matt Corallo [Mon, 9 Sep 2024 13:38:44 +0000 (13:38 +0000)]
Merge pull request #3304 from TheBlueMatt/2024-09-tokio-util-msrv

Fix MSRV builds of `lightning-transaction-sync` in CI

3 weeks agoReduce features on `lightning-transaction-sync`'s `tokio` dev-dep 2024-09-tokio-util-msrv
Matt Corallo [Sun, 8 Sep 2024 21:41:51 +0000 (21:41 +0000)]
Reduce features on `lightning-transaction-sync`'s `tokio` dev-dep

This should marginally reduce the chance of MSRV or other issues in
the future, and is just good practice.

3 weeks agoTest `lightning-transaction-sync` in our no-dev-deps MSRV test
Matt Corallo [Sun, 8 Sep 2024 21:14:13 +0000 (21:14 +0000)]
Test `lightning-transaction-sync` in our no-dev-deps MSRV test

Now that `lightning-transaction-sync` is in the workspace and
covered by our MSRV we should be testing it in our
`msrv-no-dev-deps-check` test crate.

3 weeks agoFix MSRV test of `lightning-transaction-sync` with `esplora-async`
Matt Corallo [Sun, 8 Sep 2024 21:09:20 +0000 (21:09 +0000)]
Fix MSRV test of `lightning-transaction-sync` with `esplora-async`

`lightning-transaction-sync`'s `esplora-async` dependency
indirectly depends on `tokio-util`, which, like tokio, recently
bumped its MSRV.

Here we update `ci/ci-tests.sh` to pin `tokio-util` to make MSRV
builds pass.

3 weeks agoHMAC Construction and Verification for PaymentHash
shaavan [Fri, 6 Sep 2024 12:01:08 +0000 (17:31 +0530)]
HMAC Construction and Verification for PaymentHash

When a InvoiceError is received for a sent BOLT12Invoice, the
corresponding PaymentHash is to be logged. Introduce hmac construction
and verification function for PaymentHash for this purpose.

3 weeks agoMerge pull request #3290 from tnull/2024-09-add-tx-sync-copyright
Matt Corallo [Wed, 4 Sep 2024 14:13:37 +0000 (14:13 +0000)]
Merge pull request #3290 from tnull/2024-09-add-tx-sync-copyright

Add copyright notices to `lightning-transaction-sync` modules

3 weeks agoAdd copyright notices to `lightning-transaction-sync` modules
Elias Rohrer [Wed, 4 Sep 2024 11:02:45 +0000 (13:02 +0200)]
Add copyright notices to `lightning-transaction-sync` modules

3 weeks agoMerge pull request #3278 from TheBlueMatt/2024-08-124-relnotes v0.0.124
Matt Corallo [Tue, 3 Sep 2024 18:35:17 +0000 (18:35 +0000)]
Merge pull request #3278 from TheBlueMatt/2024-08-124-relnotes

Add an 0.0.124 CHANGELOG entry

3 weeks agoUpdate versions to 0.0.124 and invoice 0.32 types 0.1 release 2024-08-124-relnotes
Matt Corallo [Fri, 30 Aug 2024 15:05:24 +0000 (15:05 +0000)]
Update versions to 0.0.124 and invoice 0.32 types 0.1 release

3 weeks agoAdd an 0.0.124 CHANGELOG entry
Matt Corallo [Wed, 28 Aug 2024 15:32:59 +0000 (15:32 +0000)]
Add an 0.0.124 CHANGELOG entry

3 weeks agoMerge pull request #3285 from TheBlueMatt/2024-08-tx-too-small
Matt Corallo [Tue, 3 Sep 2024 17:53:08 +0000 (17:53 +0000)]
Merge pull request #3285 from TheBlueMatt/2024-08-tx-too-small

Correct handling of added `OP_RETURN` outputs

3 weeks agoMerge pull request #3284 from TheBlueMatt/2024-08-bindings-imports-suck
Matt Corallo [Tue, 3 Sep 2024 15:20:16 +0000 (15:20 +0000)]
Merge pull request #3284 from TheBlueMatt/2024-08-bindings-imports-suck

3 weeks agoCorrect `ANCHOR_INPUT_WITNESS_WEIGHT` constant 2024-08-tx-too-small
Matt Corallo [Tue, 3 Sep 2024 15:09:32 +0000 (15:09 +0000)]
Correct `ANCHOR_INPUT_WITNESS_WEIGHT` constant

`ANCHOR_INPUT_WITNESS_WEIGHT` is too high by two weight units,
likely it was calculated to include the SegWit marker bytes, but
it is used to describe an `Input::satisfaction_weight`, which does
not expect the marker bytes.

This corrects that oversight, reducing the constant by two and
adding the marker bytes back in our own internal weight
calculations. It also fixes a second issue where the constant was
too low by one when `grind_signatures` is not set, as that may
result in a signature being one byte longer than we expect.

3 weeks agoAdd a test for the past few commits
Matt Corallo [Fri, 30 Aug 2024 03:42:13 +0000 (03:42 +0000)]
Add a test for the past few commits

This adds a single test for coin selection which exercises the
issues fixed in the past three commits.

3 weeks agoDrop bogus debug assertion that we don't overpay on fees
Matt Corallo [Thu, 29 Aug 2024 22:47:32 +0000 (22:47 +0000)]
Drop bogus debug assertion that we don't overpay on fees

We should always select at least as many coins as is required to
meet the feerate target, but its perfectly fine if we overshoot.
Specifically, we may overshoot deliberately if we choose to burn
change to fee instead.

3 weeks agoHandle under-coin-selecting due to an added OP_RETURN output
Matt Corallo [Thu, 29 Aug 2024 20:43:10 +0000 (20:43 +0000)]
Handle under-coin-selecting due to an added OP_RETURN output

When we do coin selection for channel close anchor spends, we may
do coin selection targeting exactly the input values we need.
However, if coin selection does not include a change output, we may
add an OP_RETURN output, which may cause us to end up with less
fee than we wanted on the resulting package.

Here we address this issue by running coin selection twice - first
without seeking the extra weight of the OP_RETURN output, and again
if we find that we under-selected.

3 weeks agoEnsure we never try to broadcast a transaction <= 64 bytes
Matt Corallo [Thu, 22 Aug 2024 15:14:44 +0000 (15:14 +0000)]
Ensure we never try to broadcast a transaction <= 64 bytes

While these are consensus-valid, they have been nonstandard for
quite some time and will not relay nor confirm.

4 weeks agoSpecify imports manually in `types::features::sealed` 2024-08-bindings-imports-suck
Matt Corallo [Sun, 1 Sep 2024 01:08:38 +0000 (01:08 +0000)]
Specify imports manually in `types::features::sealed`

There's not a lot of reason to do this, but sadly the bindings
don't currently resolve wildcard imports at all, and I don't want
to deal with implementing it right now.

4 weeks agoMerge pull request #3282 from TheBlueMatt/2024-08-fix-bench-logging
Matt Corallo [Fri, 30 Aug 2024 21:24:51 +0000 (21:24 +0000)]
Merge pull request #3282 from TheBlueMatt/2024-08-fix-bench-logging

Dont output logs when benchmarking

4 weeks agoDont output logs when benchmarking 2024-08-fix-bench-logging
Matt Corallo [Fri, 30 Aug 2024 17:38:37 +0000 (17:38 +0000)]
Dont output logs when benchmarking

In 11ab302087622b546d116fc9679f601667d18c4d we accidentally removed
the `not(ldk_bench)` bound before outputting logs to stderr, which
we restore here. Instead of simply ignoring logs in benchmarks,
which we did previously, we instead format logs (in a way that LLVM
will not optimize out).

4 weeks agoRemove log level filtering in tests
Matt Corallo [Mon, 19 Aug 2024 21:07:46 +0000 (21:07 +0000)]
Remove log level filtering in tests

There's no reason why we should be filtering our logs during tests.
It seems mostly like the `TestLogger` was written more as a sample
logger than a test logger, but these days we have samples, so we
should just drop the filtering and show everything.

4 weeks agoMerge pull request #3280 from TheBlueMatt/2024-08-124rc v0.0.124-rc1
Matt Corallo [Thu, 29 Aug 2024 20:52:03 +0000 (20:52 +0000)]
Merge pull request #3280 from TheBlueMatt/2024-08-124rc

Bump versions to rc1

4 weeks agoMerge pull request #3279 from TheBlueMatt/2024-08-no-pub-usize
Matt Corallo [Thu, 29 Aug 2024 20:06:28 +0000 (20:06 +0000)]
Merge pull request #3279 from TheBlueMatt/2024-08-no-pub-usize

Use `u64` for `required_unknown_bits_from` indexes, not `usize`

4 weeks agoBump versions to rc1 2024-08-124rc
Matt Corallo [Thu, 29 Aug 2024 19:39:22 +0000 (19:39 +0000)]
Bump versions to rc1

4 weeks agoMerge pull request #3257 from tnull/2024-08-fix-is-public
Matt Corallo [Thu, 29 Aug 2024 19:39:30 +0000 (19:39 +0000)]
Merge pull request #3257 from tnull/2024-08-fix-is-public

Rename instances of `is_public` to `is_announced`

4 weeks agoRename `announced_channel` to `is_announced_for_forwarding`
Elias Rohrer [Thu, 29 Aug 2024 18:16:51 +0000 (20:16 +0200)]
Rename `announced_channel` to `is_announced_for_forwarding`

.. we rename the flag configuring whether we announce a channel or not.

4 weeks agoUse `u64` for `required_unknown_bits_from` indexes, not `usize` 2024-08-no-pub-usize
Matt Corallo [Thu, 29 Aug 2024 16:45:27 +0000 (16:45 +0000)]
Use `u64` for `required_unknown_bits_from` indexes, not `usize`

While `usize` should be fine, we're multiplying the index by 8 so
if we have a jumbo feature bit fitting in a 32-bit size type may
not quite work. More importantly, this would be the first use of a
`usize` in the public API and dealing with it in bindings is
annoying so we just replace with a `u64`.

4 weeks agoMerge pull request #3238 from Mirebella/clippy-checks
Matt Corallo [Thu, 29 Aug 2024 16:06:40 +0000 (16:06 +0000)]
Merge pull request #3238 from Mirebella/clippy-checks

Added clippy ignore rules for all errors and warnings

4 weeks agoMerge pull request #3275 from TheBlueMatt/2024-08-3259-followups
Matt Corallo [Thu, 29 Aug 2024 00:54:19 +0000 (00:54 +0000)]
Merge pull request #3275 from TheBlueMatt/2024-08-3259-followups

#3259 followups

4 weeks agoMerge pull request #3276 from arik-so/arik/2024/08/apply_monitor_updates_on_archive
Matt Corallo [Wed, 28 Aug 2024 21:53:43 +0000 (21:53 +0000)]
Merge pull request #3276 from arik-so/arik/2024/08/apply_monitor_updates_on_archive

Process updates before archiving monitors.

4 weeks agoProcess updates before archiving monitors.
Arik Sosman [Wed, 28 Aug 2024 16:33:14 +0000 (09:33 -0700)]
Process updates before archiving monitors.

Previously, `MonitorUpdatingPersister` was disregarding any unapplied
monitor updates when archiving them. This commit ensures that upon
reading monitors, their corresponding updates are also read and
applied prior to archiving.

4 weeks agoStore Broadcaster and FeeEstimator on MonitorUpdatingPersister.
Arik Sosman [Wed, 28 Aug 2024 16:32:35 +0000 (09:32 -0700)]
Store Broadcaster and FeeEstimator on MonitorUpdatingPersister.

`MonitorUpdatingPersister` does not currently correctly archive
monitors because it neglects any unapplied updates. In order to start
applying these updates, the archiving methods will require access to
instances of `BroadcasterInterface` and `FeeEstimator`.

This commit requires that the `MonitorUpdatingPersister` be
instantiated with those instances, obviating the need for passing
them around, and laying the foundation for the following commit.

4 weeks agoTest manual funding transaction `Event::DiscardFunding` generation 2024-08-3259-followups
Matt Corallo [Wed, 28 Aug 2024 14:50:52 +0000 (14:50 +0000)]
Test manual funding transaction `Event::DiscardFunding` generation

4 weeks agoCorrect manual shutdown detection on channel closure
Matt Corallo [Wed, 28 Aug 2024 14:35:54 +0000 (14:35 +0000)]
Correct manual shutdown detection on channel closure

In 5e874c3dc9cf1606a3cbbccab3a0d25089a97280 we'd intended to not
reveal the dummy funding transaction in `Event::DiscardFunding`.
However, instead of looking at the channel that was just closed,
the logic only looks at any other channels which were funded as a
part of the same batch. Because manually-funded transactions
cannot currently be done for batch funding, this was actually dead
code, preventing the new changes from taking effect.

4 weeks agoAdd additional documentation on `Channel::unbroadcasted_funding`
Matt Corallo [Wed, 28 Aug 2024 13:50:17 +0000 (13:50 +0000)]
Add additional documentation on `Channel::unbroadcasted_funding`

4 weeks agoMerge pull request #3268 from TheBlueMatt/2024-08-moar-feerate-categories
Matt Corallo [Wed, 28 Aug 2024 13:15:13 +0000 (13:15 +0000)]
Merge pull request #3268 from TheBlueMatt/2024-08-moar-feerate-categories

Split up `ConfirmationTarget` even more

4 weeks agoFix CI linting error
Mirebella [Wed, 28 Aug 2024 07:53:51 +0000 (09:53 +0200)]
Fix CI linting error

4 weeks agoAdd clippy ignore rules for all errors and warnings
Mirebella [Tue, 13 Aug 2024 11:41:16 +0000 (13:41 +0200)]
Add clippy ignore rules for all errors and warnings

4 weeks agoTest new `ConfirmationTarget` selection based on HTLC set 2024-08-moar-feerate-categories
Matt Corallo [Tue, 27 Aug 2024 16:47:57 +0000 (16:47 +0000)]
Test new `ConfirmationTarget` selection based on HTLC set

This updates `test_yield_anchors_events` to test both anchor
channels with and without HTLCs, and relies on overriding only the
singular expected `ConfirmationTarget` used, testing the new
`ConfirmationTarget::UrgentOnChainSweep` use.

4 weeks agoDon't ignore events in `test_yield_anchors_events`
Matt Corallo [Tue, 27 Aug 2024 16:44:58 +0000 (16:44 +0000)]
Don't ignore events in `test_yield_anchors_events`

Our tests should never ignore the events generated as they provide
critical context about what's happening in LDK. Here we fix
`test_yield_anchors_events` to avoid doing so.

4 weeks agoAdd a constructor and per-target override to `TestFeeEstimator`
Matt Corallo [Mon, 26 Aug 2024 21:31:27 +0000 (21:31 +0000)]
Add a constructor and per-target override to `TestFeeEstimator`

This will allow us to test `ConfirmationTarget`s used in functional
tests by setting an override on just the target we expect to be
used.

4 weeks agoAdd missing pending changelog for downgrade on unsafe funding
Matt Corallo [Tue, 27 Aug 2024 19:21:09 +0000 (19:21 +0000)]
Add missing pending changelog for downgrade on unsafe funding

4 weeks agoOnly generate an `Event::DiscardFunding` when we need to
Matt Corallo [Tue, 27 Aug 2024 19:17:06 +0000 (19:17 +0000)]
Only generate an `Event::DiscardFunding` when we need to

5e874c3dc9cf1606a3cbbccab3a0d25089a97280 changed
`Event::DiscardFunding` to not include a dummy transaction when we
were funded without a full funding tx, but in doing so started
generating `DiscardFunding` events on every channel closure rather
than only when there's actually still a pending funding broadcast.

This restores the previous behavior to only generate the event when
we should actually discard the funding tx.

4 weeks agoMerge pull request #3259 from vincenzopalazzo/macros/dummy-tx
Matt Corallo [Tue, 27 Aug 2024 19:16:57 +0000 (19:16 +0000)]
Merge pull request #3259 from vincenzopalazzo/macros/dummy-tx

[RFC] event: store the outpoint when is_manual_broadcast

4 weeks agoevent: store the outpoint when is_manual_broadcast
Vincenzo Palazzo [Tue, 27 Aug 2024 08:18:28 +0000 (10:18 +0200)]
event: store the outpoint when is_manual_broadcast

With [1], it's possible to specify `manual_broadcast` for
the channel funding transaction. When `is_manual_broadcast` is
set to true, the transaction in the `DiscardFunding` event is
replaced with a dummy empty transaction.

This commit checks if `is_manual_broadcast` is true and
stores the funding OutPoint in the DiscardFunding event instead.

[1] https://github.com/lightningdevkit/rust-lightning/pull/3024

Link: https://github.com/lightningdevkit/rust-lightning/issues/3164
Suggested-by: TheBlueMatt
Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
4 weeks agoSplit `ConfirmationTarget::OnChainSweep` into urgent and non-urgent
Matt Corallo [Thu, 22 Aug 2024 19:15:34 +0000 (19:15 +0000)]
Split `ConfirmationTarget::OnChainSweep` into urgent and non-urgent

When we force-close a channel, occasionally its due to feerate
disagreements or other non-HTLC-related issues. In those cases,
there's no reason to use a very urgent feerate estimate - we don't
have any timers expiring soon.

Instead, we should give users the information they need to be more
economical on fees in this case, which we do here by splitting
`OnChainSweep` into `UrgentOnChainSweep` and
`NonUrgentOnChainSweep` `ConfirmationTarget`s.

4 weeks agoAdd a new `ConfirmationTarget::MaximumFeeEstimate`
Matt Corallo [Thu, 22 Aug 2024 15:25:56 +0000 (15:25 +0000)]
Add a new `ConfirmationTarget::MaximumFeeEstimate`

When we broke `ConfirmationTarget` out into task-specific names, we
left `MaxDustHTLCExposure::FeeRateMultiplier` as using the "when we
broadcast feerate" as we were mostly concerned about the dust
thresholds on outbound channels where we pick the fee and drive our
own funds to dust.

In 51bf78d604b28fe189171e1b976fe87cbb2614b7, that changed to
include transaction fees on both inbound and outbound channels in
our dust exposure amount, but we continued to use
`ConfirmationTarget::OnChainSweep` for the fee estimator threshold.

While the `MaxDustHTLCExposure::FeeRateMultiplier` value is quite
conservative and shouldn't lead to force-closures unless feerate
estimates disagree by something like 500 sat/vB (with only one HTLC
active in a channel), this happened on Aug 22 when feerates spiked
from 4 sat/vB to over 1000 sat/vB in one block.

To avoid simple feerate estimate horizons causing this in the
future, here we add a new
`ConfirmationTarget::MaximumFeeEstimate` which is used for dust
calculations. This allows users to split out the estimates they use
for checking counterparty feerates from the estimates used for
actual broadcasting.

4 weeks agoMerge pull request #3273 from TheBlueMatt/2024-08-bindings-no-static
Matt Corallo [Tue, 27 Aug 2024 14:14:47 +0000 (14:14 +0000)]
Merge pull request #3273 from TheBlueMatt/2024-08-bindings-no-static

Return owned `String`s for onion message message types

4 weeks agoMerge pull request #3248 from jkczyz/2024-08-blinded-path-utils-refactor
dunxen [Tue, 27 Aug 2024 11:28:43 +0000 (13:28 +0200)]
Merge pull request #3248 from jkczyz/2024-08-blinded-path-utils-refactor

Refactor `BlindedPath` construction utils

4 weeks agoReturn owned `String`s for onion message message types 2024-08-bindings-no-static
Matt Corallo [Mon, 26 Aug 2024 19:25:46 +0000 (19:25 +0000)]
Return owned `String`s for onion message message types

Returning a reference from a trait method is relatively difficult
to map in bindings and is currently handled by storing the object
in the trait instance, returning a reference to the local field.

This is fine when the object we're returning only needs to live as
long as the trait, but when it needs to be `'static` (as is the
case for onion message `msg_type`s), there's not really a good way
to map them at all.

Instead, here, condition on `#[cfg(c_bindings)]` we return a fully
owned `String`. This is obviously relatively less effecient, but
the extra allocation and `memcpy` isn't the end of the world,
especially given it should be released relatively quickly.

Note that this breaks doctests in with `c_bindings`.

4 weeks agoMerge pull request #3272 from TheBlueMatt/2024-08-bindings-hidden
Matt Corallo [Mon, 26 Aug 2024 23:44:14 +0000 (23:44 +0000)]
Merge pull request #3272 from TheBlueMatt/2024-08-bindings-hidden

Mark new `types` `#[doc(hidden)]` methods as bindings no-export

4 weeks agoMark `io::Cursor` as no-export in bindings 2024-08-bindings-hidden
Matt Corallo [Mon, 26 Aug 2024 18:32:28 +0000 (18:32 +0000)]
Mark `io::Cursor` as no-export in bindings

4 weeks agoMark new `types` `#[doc(hidden)]` methods as bindings no-export
Matt Corallo [Mon, 26 Aug 2024 18:28:07 +0000 (18:28 +0000)]
Mark new `types` `#[doc(hidden)]` methods as bindings no-export

4 weeks agoMerge pull request #3153 from alecchendev/2024-07-async-closing-signed
Matt Corallo [Mon, 26 Aug 2024 17:45:05 +0000 (17:45 +0000)]
Merge pull request #3153 from alecchendev/2024-07-async-closing-signed

Allow sending closing tx signatures asynchronously

4 weeks agoMerge pull request #2992 from G8XSU/monitor-update-seq-doc
Matt Corallo [Mon, 26 Aug 2024 14:09:02 +0000 (14:09 +0000)]
Merge pull request #2992 from G8XSU/monitor-update-seq-doc

Doc Clarity: Handling gaps in persisted ChannelMonitorUpdates.

5 weeks agoMerge pull request #3269 from TheBlueMatt/2024-08-this-should-work-bindings
Matt Corallo [Fri, 23 Aug 2024 22:53:24 +0000 (22:53 +0000)]
Merge pull request #3269 from TheBlueMatt/2024-08-this-should-work-bindings

Use the actual type, not the associated type, in trait impls

5 weeks agoTest async sign_closing_transaction
Alec Chen [Tue, 2 Jul 2024 06:08:04 +0000 (23:08 -0700)]
Test async sign_closing_transaction

5 weeks agoAllow sending closing tx signatures asynchronously
Alec Chen [Tue, 2 Jul 2024 06:07:45 +0000 (23:07 -0700)]
Allow sending closing tx signatures asynchronously

5 weeks agoUse the actual type, not the associated type, in trait impls 2024-08-this-should-work-bindings
Matt Corallo [Fri, 23 Aug 2024 15:33:22 +0000 (15:33 +0000)]
Use the actual type, not the associated type, in trait impls

This is equivalent and just easier for the bindings to deal with
(though, really, they should handle it).

5 weeks agoMerge pull request #3266 from optout21/bech32-tests
Matt Corallo [Fri, 23 Aug 2024 14:29:15 +0000 (14:29 +0000)]
Merge pull request #3266 from optout21/bech32-tests

Add invoice serialization tests [TestOnly][Minor]

5 weeks agoAdd invoice serialization tests
optout [Fri, 23 Aug 2024 13:46:22 +0000 (15:46 +0200)]
Add invoice serialization tests

5 weeks agoMerge pull request #3263 from TheBlueMatt/2024-08-bindings-om
Matt Corallo [Fri, 23 Aug 2024 03:04:19 +0000 (03:04 +0000)]
Merge pull request #3263 from TheBlueMatt/2024-08-bindings-om

Remove message type bound on `ResponseInstruction`