rust-lightning
12 months agoMove `channel_reestablish` messages to the `simple` message fuzzer 2023-04-fix-reestablish-msg-fuzz
Matt Corallo [Thu, 4 May 2023 23:26:34 +0000 (23:26 +0000)]
Move `channel_reestablish` messages to the `simple` message fuzzer

In 16d0f2ff4a4dd968f30e1fbbf938a332267ddcf2 the
`ChannelReestablish` messages was converted to the
`impl_writeable_msg` serialization macro which handles a TLV stream
suffix. In the case of our fuzzers, this implies we need to use the
`test_msg_simple` checker rather than the `test_msg` one.

`test_msg` checks that any bytes which were read must be present
when we write the message back out, which is useful for gossip
processing, however if we don't store ignored TLVs we cannot
possibly meet the requirements.

Instead, `test_msg_simple` only ensures that, if we serialized the
message we can round-trip it exactly, i.e. at least the fields we
understand round-trip.

12 months agoMerge pull request #2111 from TheBlueMatt/2023-03-sent-persist-order-prep
Matt Corallo [Thu, 4 May 2023 21:26:44 +0000 (21:26 +0000)]
Merge pull request #2111 from TheBlueMatt/2023-03-sent-persist-order-prep

Setup Support for delaying `ChannelMonitorUpdate` flight until an `Event` completes

12 months agoMerge pull request #2262 from Kixunil/remove-serde-error-allocation
Wilmer Paulino [Thu, 4 May 2023 17:30:32 +0000 (10:30 -0700)]
Merge pull request #2262 from Kixunil/remove-serde-error-allocation

Remove unneeded allocation

12 months agoRemove unneeded allocation
Martin Habovstiak [Thu, 4 May 2023 09:21:04 +0000 (11:21 +0200)]
Remove unneeded allocation

`<E as serde::de::Error>::custom()` accepts any `T: Display`, not just
`String`. Therefore it accepts `Arguments<'_>` too so we can use
`format_args!()` instead of `format!()`.

See https://github.com/lightningdevkit/rust-lightning/pull/2187#discussion_r1168781355

12 months agoMerge pull request #2246 from arik-so/2023-04-sign-module
Matt Corallo [Wed, 3 May 2023 16:53:36 +0000 (16:53 +0000)]
Merge pull request #2246 from arik-so/2023-04-sign-module

Move keysinterface.rs to a directory-level module called sign

12 months agoMerge pull request #2219 from benthecarman/custom-closing-address
Matt Corallo [Wed, 3 May 2023 16:33:57 +0000 (16:33 +0000)]
Merge pull request #2219 from benthecarman/custom-closing-address

Add ability to set shutdown script when closing channel

12 months agoMove keysinterface.rs to a directory-level module called sign.
Arik Sosman [Fri, 28 Apr 2023 19:11:37 +0000 (14:11 -0500)]
Move keysinterface.rs to a directory-level module called sign.

12 months agoMerge pull request #2249 from TheBlueMatt/2023-04-less-pm-bounds
Matt Corallo [Wed, 3 May 2023 01:41:17 +0000 (01:41 +0000)]
Merge pull request #2249 from TheBlueMatt/2023-04-less-pm-bounds

Trivial PeerManager cleanups

12 months agoExpose a trait impl'd for all `PeerManager` for use as a bound 2023-04-less-pm-bounds
Matt Corallo [Sat, 29 Apr 2023 18:45:59 +0000 (18:45 +0000)]
Expose a trait impl'd for all `PeerManager` for use as a bound

A while back, in tests, we added a `AChannelManager` trait, which
is implemented for all `ChannelManager`s, and can be used as a
bound when we need a `ChannelManager`, rather than having to
duplicate all the bounds of `ChannelManager` everywhere.

Here we do the same thing for `PeerManager`, but make it public and
use it to clean up `lightning-net-tokio` and
`lightning-background-processor`.

We should likely do the same for `AChannelManager`, but that's left
as a followup.

12 months agoMerge pull request #2253 from dunxen/2023-05-removeoptionalfield
Matt Corallo [Tue, 2 May 2023 22:02:04 +0000 (22:02 +0000)]
Merge pull request #2253 from dunxen/2023-05-removeoptionalfield

Remove `OptionalField` and make `DataLossProtect` fields mandatory

12 months agoAdd ability to set shutdown script when closing channel
benthecarman [Sun, 23 Apr 2023 07:14:26 +0000 (02:14 -0500)]
Add ability to set shutdown script when closing channel

12 months agoMerge pull request #2244 from benthecarman/signature-size
Wilmer Paulino [Tue, 2 May 2023 19:01:51 +0000 (12:01 -0700)]
Merge pull request #2244 from benthecarman/signature-size

Incorporate low-R values into estimate signature size

12 months agoSet data_loss_protect_required
Duncan Dean [Tue, 2 May 2023 18:26:46 +0000 (20:26 +0200)]
Set data_loss_protect_required

12 months agoStore + process pending `ChannelMonitorUpdate`s in `Channel` 2023-03-sent-persist-order-prep
Matt Corallo [Fri, 17 Mar 2023 04:55:30 +0000 (04:55 +0000)]
Store + process pending `ChannelMonitorUpdate`s in `Channel`

The previous commits set up the ability for us to hold
`ChannelMonitorUpdate`s which are pending until we're ready to pass
them to users and have them be applied. However, if the
`ChannelManager` is persisted while we're waiting to give the user
a `ChannelMonitorUpdate` we'll be confused on restart - seeing our
latest `ChannelMonitor` state as stale compared to our
`ChannelManager` - a critical error.

Luckily the solution is trivial, we simply need to store the
pending `ChannelMonitorUpdate` state and load it with the
`ChannelManager` data, allowing stale monitors on load as long as
we have the missing pending updates between where we are and the
latest `ChannelMonitor` state.

12 months agoHandle `EventCompletionAction`s after events complete
Matt Corallo [Thu, 16 Mar 2023 03:33:20 +0000 (03:33 +0000)]
Handle `EventCompletionAction`s after events complete

This adds handling of the new `EventCompletionAction`s after
`Event`s are handled, letting `ChannelMonitorUpdate`s which were
blocked fly after a relevant `Event`.

12 months agoTrack an `EventCompletionAction` for after an `Event` is processed
Matt Corallo [Fri, 28 Apr 2023 04:24:25 +0000 (04:24 +0000)]
Track an `EventCompletionAction` for after an `Event` is processed

This will allow us to block `ChannelMonitorUpdate`s on `Event`
processing in the next commit.

Note that this gets dangerously close to breaking forwards
compatibility - if we have an `Event` with an
`EventCompletionAction` tied to it, we persist a new, even, TLV in
the `ChannelManager`. Hopefully this should be uncommon, as it
implies an `Event` was delayed until after a full round-trip to a
peer.

12 months agoAllow holding `ChannelMonitorUpdate`s until later, completing one
Matt Corallo [Wed, 15 Mar 2023 23:16:06 +0000 (23:16 +0000)]
Allow holding `ChannelMonitorUpdate`s until later, completing one

In the coming commits, we need to delay `ChannelMonitorUpdate`s
until future actions (specifically `Event` handling). However,
because we should only notify users once of a given
`ChannelMonitorUpdate` and they must be provided in-order, we need
to track which ones have or have not been given to users and, once
updating resumes, fly the ones that haven't already made it to
users.

To do this we simply add a `bool` in the `ChannelMonitorUpdate` set
stored in the `Channel` which indicates if an update flew and
decline to provide new updates back to the `ChannelManager` if any
updates have their flown bit unset.

Further, because we'll now by releasing `ChannelMonitorUpdate`s
which were already stored in the pending list, we now need to
support getting a `Completed` result for a monitor which isn't the
only pending monitor (or even out of order), thus we also rewrite
the way monitor updates are marked completed.

12 months agoMerge pull request #2213 from benthecarman/error-sign-provider-addrs
Matt Corallo [Tue, 2 May 2023 17:48:05 +0000 (17:48 +0000)]
Merge pull request #2213 from benthecarman/error-sign-provider-addrs

Allow get_shutdown_scriptpubkey and get_destination_script to return an Error

12 months agoRemove `OptionalField` and move `shutdown_scriptpubkey` into TLV stream
Duncan Dean [Mon, 1 May 2023 20:52:30 +0000 (22:52 +0200)]
Remove `OptionalField` and move `shutdown_scriptpubkey` into TLV stream

As pointed out in https://github.com/lightning/bolts/pull/754/commits/6656b70,
we can move the `shutdown_scriptpubkey` field into the TLV streams of
`OpenChannel` and `AcceptChannel` without affecting the resulting encoding.

We use `WithoutLength` encoding here to ensure that we do not encode a
length prefix along with `Script` as is normally the case.

12 months agoAllow get_shutdown_scriptpubkey and get_destination_script to return an error
benthecarman [Sat, 22 Apr 2023 05:48:28 +0000 (00:48 -0500)]
Allow get_shutdown_scriptpubkey and get_destination_script to return an error

12 months agoIncorporate low-R values into estimate signature size
benthecarman [Tue, 2 May 2023 07:01:37 +0000 (02:01 -0500)]
Incorporate low-R values into estimate signature size

12 months agoMake `DataLossProtect` fields required and remove wrappers
Duncan Dean [Mon, 1 May 2023 20:23:20 +0000 (22:23 +0200)]
Make `DataLossProtect` fields required and remove wrappers

The fields provided by `DataLossProtect` have been mandatory since
https://github.com/lightning/bolts/pull/754/commits/6656b70, regardless
of whether `option_dataloss_protect` or `option_remote_key` feature bits
are set.

We move the fields out of `DataLossProtect` to make encoding definitions
more succinct with `impl_writeable_msg!` and to reduce boilerplate.

This paves the way for completely removing `OptionalField` in subsequent
commits.

12 months agoMove the `CustomMessageHandler` into the `MessageHandler` struct
Matt Corallo [Sat, 29 Apr 2023 17:58:15 +0000 (17:58 +0000)]
Move the `CustomMessageHandler` into the `MessageHandler` struct

`PeerManager` takes a `MessageHandler` struct which contains all
the known message handlers for it to pass messages to. It then,
separately, takes a `CustomMessageHandler`. This makes no sense, we
should simply include the `CustomMessageHandler` in the
`MessageHandler` struct for consistency.

12 months agoMerge pull request #2245 from TheBlueMatt/2023-04-ping-count-overflow
Wilmer Paulino [Fri, 28 Apr 2023 19:15:02 +0000 (12:15 -0700)]
Merge pull request #2245 from TheBlueMatt/2023-04-ping-count-overflow

Fix overflow in `awaiting_pong_timer...` with too many peers

12 months agoMerge pull request #2217 from alecchendev/2023-04-expose-hash-in-balance
Wilmer Paulino [Fri, 28 Apr 2023 18:11:01 +0000 (11:11 -0700)]
Merge pull request #2217 from alecchendev/2023-04-expose-hash-in-balance

Expose `PaymentHash` and `PaymentPreimage` in `Balance`

12 months agoMerge pull request #2239 from valentinewallace/2023-04-remove-redundant-final-cltv...
Wilmer Paulino [Fri, 28 Apr 2023 17:46:51 +0000 (10:46 -0700)]
Merge pull request #2239 from valentinewallace/2023-04-remove-redundant-final-cltv-param

Remove redundant `final_cltv_delta` param from `get_route`

12 months agoFix overflow in `awaiting_pong_timer...` with too many peers 2023-04-ping-count-overflow
Matt Corallo [Fri, 28 Apr 2023 16:19:04 +0000 (16:19 +0000)]
Fix overflow in `awaiting_pong_timer...` with too many peers

If we have more than
127 / `MAX_BUFFER_DRAIN_TICK_INTERVALS_PER_PEER` (31) peers,
`awaiting_pong_timer_tick_intervals` can overflow before we hit
the limit. This isn't super harmful, we'll still disconnect peers
as long as they don't send *any* messages between two pings, but it
does cause us to not disconnect peers which are extremely slow in
responding to messages, e.g. because they are overloaded.

12 months agoMerge pull request #2230 from freddiekrugerrand/2228-validatechainhash
Matt Corallo [Thu, 27 Apr 2023 23:00:42 +0000 (23:00 +0000)]
Merge pull request #2230 from freddiekrugerrand/2228-validatechainhash

Check chain hash for channel announcement and update

12 months agoMerge pull request #2044 from freddiekrugerrand/1782-limitchannelhints
Matt Corallo [Thu, 27 Apr 2023 22:02:16 +0000 (22:02 +0000)]
Merge pull request #2044 from freddiekrugerrand/1782-limitchannelhints

Limit route hints to three channels

12 months agoRemove redundant final_cltv_delta param from get_route
Valentine Wallace [Thu, 27 Apr 2023 20:49:02 +0000 (16:49 -0400)]
Remove redundant final_cltv_delta param from get_route

PaymentParameters already includes this value.

This set us up to better support route blinding, since there is no known
final_cltv_delta when paying to a blinded route.

12 months agoMerge pull request #2234 from dunxen/2023-04-bpteststemp
Matt Corallo [Wed, 26 Apr 2023 17:49:52 +0000 (17:49 +0000)]
Merge pull request #2234 from dunxen/2023-04-bpteststemp

Use `env::temp_dir()` for BP tests

12 months agoMerge pull request #2229 from TheBlueMatt/2023-04-115-bindings-upstream-2
Matt Corallo [Wed, 26 Apr 2023 17:34:18 +0000 (17:34 +0000)]
Merge pull request #2229 from TheBlueMatt/2023-04-115-bindings-upstream-2

Trivial Bindings Updates

12 months agoMerge pull request #2233 from TheBlueMatt/2023-04-fix-future-leak
Wilmer Paulino [Wed, 26 Apr 2023 17:27:29 +0000 (10:27 -0700)]
Merge pull request #2233 from TheBlueMatt/2023-04-fix-future-leak

Fix a leak in FutureState when a Notifier is dropped un-woken

12 months agoCheck chain hash for channel announcement and update
Fred Walker [Wed, 26 Apr 2023 12:58:05 +0000 (08:58 -0400)]
Check chain hash for channel announcement and update

12 months agoUse `env::temp_dir()` for BP tests
Duncan Dean [Wed, 26 Apr 2023 12:57:18 +0000 (14:57 +0200)]
Use `env::temp_dir()` for BP tests

Currently `BackgroundProcessor` tests create persister directories in the
current working directory and rely on cleaning up in a `Drop` implementation.

Unfortunately, it seems that in the async tests that nodes are not
`drop()`ed for some reason and so the directories created by those
tests remain behind in the current working directory.

This commit at least ensures that these test directories are created in
a temporary location for the OS using `temp_dir()`. It doesn't aim to
solve the lack of cleanup in the async tests.

Partial fix for #2224 but I believe it's enough to resolve it as these
temp directories that do remain will be purged by the OS at some stage
and are overwritten by subsequent tests if there is a conflict.

12 months agoFix a leak in `FutureState` when a `Notifier` is dropped un-woken 2023-04-fix-future-leak
Matt Corallo [Wed, 26 Apr 2023 05:01:13 +0000 (05:01 +0000)]
Fix a leak in `FutureState` when a `Notifier` is dropped un-woken

If a `Notifier` has an internal `FutureState` which gathers some
sleeper callbacks, but is never actaully woken, those callbacks
will leak due to a circular `Arc` reference when the `Notifier` is
`drop`'d.

Because `Notifier`s are rarely `drop`'d in production this isn't a
huge deal, but shows up materially in bindings tests as they spawn
many nodes over the course of a short test.

Fixes #2232

12 months agoHold a reference to the `Arc<FutureState>` when completing futures
Matt Corallo [Wed, 26 Apr 2023 04:29:59 +0000 (04:29 +0000)]
Hold a reference to the `Arc<FutureState>` when completing futures

This will allow us to pass in that state to the callbacks in the
next commit.

12 months agoAdd a bindings constructor for `lightning-invoice`'s `Sha256` wrapper 2023-04-115-bindings-upstream-2
Matt Corallo [Tue, 25 Apr 2023 17:35:24 +0000 (17:35 +0000)]
Add a bindings constructor for `lightning-invoice`'s `Sha256` wrapper

12 months ago[bindings] Disable BOLT12 builders which require move semantics
Matt Corallo [Tue, 25 Apr 2023 06:10:05 +0000 (06:10 +0000)]
[bindings] Disable BOLT12 builders which require move semantics

12 months agoLimit phantom invoice hints to 3
Fred Walker [Thu, 2 Mar 2023 19:37:16 +0000 (14:37 -0500)]
Limit phantom invoice hints to 3

12 months agoMove phantom route hint selection into its own function
Fred Walker [Thu, 2 Mar 2023 19:34:13 +0000 (14:34 -0500)]
Move phantom route hint selection into its own function

12 months agoMerge pull request #2222 from benthecarman/pub-utxo-resolver
Matt Corallo [Tue, 25 Apr 2023 02:01:06 +0000 (02:01 +0000)]
Merge pull request #2222 from benthecarman/pub-utxo-resolver

12 months agoMerge pull request #2211 from TheBlueMatt/2023-04-0.0.115-cut v0.0.115
Matt Corallo [Tue, 25 Apr 2023 00:20:18 +0000 (00:20 +0000)]
Merge pull request #2211 from TheBlueMatt/2023-04-0.0.115-cut

Cut 0.0.115

12 months agoAdd 0.0.115 CHANGELOG entries 2023-04-0.0.115-cut
Matt Corallo [Fri, 21 Apr 2023 23:28:25 +0000 (23:28 +0000)]
Add 0.0.115 CHANGELOG entries

12 months agoBump crate versions to 0.0.115/invoice 0.23
Matt Corallo [Fri, 21 Apr 2023 23:36:43 +0000 (23:36 +0000)]
Bump crate versions to 0.0.115/invoice 0.23

12 months agoMerge pull request #2004 from tnull/2023-02-add-async-bp-example
Matt Corallo [Mon, 24 Apr 2023 22:38:40 +0000 (22:38 +0000)]
Merge pull request #2004 from tnull/2023-02-add-async-bp-example

Add Tokio example to `process_events_async` docs

12 months agoMerge pull request #2209 from TheBlueMatt/2023-04-better-discon-err-msg
Matt Corallo [Mon, 24 Apr 2023 21:22:06 +0000 (21:22 +0000)]
Merge pull request #2209 from TheBlueMatt/2023-04-better-discon-err-msg

Clarify the error message when we disconnect a peer

12 months agoMerge pull request #2220 from TheBlueMatt/2023-04-dont-ban-cln
Matt Corallo [Mon, 24 Apr 2023 21:15:08 +0000 (21:15 +0000)]
Merge pull request #2220 from TheBlueMatt/2023-04-dont-ban-cln

Don't remove nodes if there's no channel_update for a temp failure

12 months agoAdd Tokio example to `process_events_async` docs
Elias Rohrer [Thu, 2 Feb 2023 20:55:58 +0000 (14:55 -0600)]
Add Tokio example to `process_events_async` docs

12 months agoAdd function for updating network graph with announcement with no UTXO resolver
benthecarman [Mon, 24 Apr 2023 13:10:25 +0000 (08:10 -0500)]
Add function for updating network graph with announcement with no UTXO resolver

12 months agoDon't remove nodes if there's no channel_update for a temp failure 2023-04-dont-ban-cln
Matt Corallo [Sun, 23 Apr 2023 16:17:29 +0000 (16:17 +0000)]
Don't remove nodes if there's no channel_update for a temp failure

Previously, we were requiring any `UPDATE` onion errors to include
a `channel_update`, as the spec mandates[1]. If we see an onion
error which is missing one we treat it as a misbehaving node that
isn't behaving according to the spec and simply remove the node.

Sadly, it appears at least some versions of CLN are such nodes, and
opt to not include `channel_update` at all if they're returning a
`temporary_channel_failure`. This causes us to completely remove
CLN nodes from our graph after they fail to forward our HTLC.

While CLN is violating the spec here, there's not a lot of reason
to not allow it, so we go ahead and do so here, treating it simply
as any other failure by letting the scorer handle it.

[1] The spec says `Please note that the channel_update field is
mandatory in messages whose failure_code includes the UPDATE flag`
however doesn't repeat it in the requirements section so its not
crazy that someone missed it when implementing.

12 months agoRemove unused import in functional_test_utils
Matt Corallo [Mon, 24 Apr 2023 17:57:06 +0000 (17:57 +0000)]
Remove unused import in functional_test_utils

12 months agoFix unused `Secp256k1` context in monitor_tests
Matt Corallo [Sun, 23 Apr 2023 16:54:53 +0000 (16:54 +0000)]
Fix unused `Secp256k1` context in monitor_tests

12 months agoMerge pull request #2221 from TheBlueMatt/2023-04-bp-exit-fast
Matt Corallo [Mon, 24 Apr 2023 16:47:47 +0000 (16:47 +0000)]
Merge pull request #2221 from TheBlueMatt/2023-04-bp-exit-fast

Check for `background-processor` exit condition before+after sleep

12 months agoMerge pull request #2146 from valentinewallace/2023-03-blinded-pathfinding-groundwork
Matt Corallo [Mon, 24 Apr 2023 16:46:15 +0000 (16:46 +0000)]
Merge pull request #2146 from valentinewallace/2023-03-blinded-pathfinding-groundwork

Blinded pathfinding groundwork

12 months agoCheck for `background-processor` exit condition before+after sleep 2023-04-bp-exit-fast
Matt Corallo [Mon, 24 Apr 2023 03:48:42 +0000 (03:48 +0000)]
Check for `background-processor` exit condition before+after sleep

In a synchronous `BackgroundProcessor`, the exit is done by setting
an atomic flag, which is most likely to happen while we're asleep.
Thus, we previously checked for the exit condition after the sleep
(and after we persisted the `ChannelManager`, if required, though
this is no longer required and dates back to when we didn't do a
re-persist after breaking out of the main loop).

For an async `background-processor`, this is also fine, however
because of the relatively longer sleep time, if the exit flag is
set via a sleep check returning true during event processing, we
may end up delaying exit rather substantially.

In order to avoid this, we simply check for the exit condition both
before and immediately after the sleep in `background-processor`.

12 months agoAdd payment hash to `MaybePreimageClaimableHTLC`
Alec Chen [Sun, 23 Apr 2023 04:21:40 +0000 (23:21 -0500)]
Add payment hash to `MaybePreimageClaimableHTLC`

12 months agoAdd payment hash to `MaybeTimeoutClaimableHTLC`
Alec Chen [Sun, 23 Apr 2023 06:03:51 +0000 (01:03 -0500)]
Add payment hash to `MaybeTimeoutClaimableHTLC`

12 months agoAdd payment preimage and hash to `ContentiousClaimable`
Alec Chen [Sun, 23 Apr 2023 06:03:15 +0000 (01:03 -0500)]
Add payment preimage and hash to `ContentiousClaimable`

12 months agoDRY up repeated HTLC `Balance`s in tests
Alec Chen [Sun, 23 Apr 2023 05:37:13 +0000 (00:37 -0500)]
DRY up repeated HTLC `Balance`s in tests

This makes it easier to add a new field on the `Balance` variants.

12 months agoAdd `PartialOrd`, `Ord` to `PaymentHash`, `PaymentPreimage` for tests
Alec Chen [Sun, 23 Apr 2023 04:04:26 +0000 (23:04 -0500)]
Add `PartialOrd`, `Ord` to `PaymentHash`, `PaymentPreimage` for tests

12 months agoMerge pull request #2212 from wpaulino/off-by-one-locktime
Matt Corallo [Sat, 22 Apr 2023 21:54:06 +0000 (21:54 +0000)]
Merge pull request #2212 from wpaulino/off-by-one-locktime

Fix off-by-one finalized transaction locktime

12 months agoFix off-by-one finalized transaction locktime
Wilmer Paulino [Sat, 15 Apr 2023 00:03:51 +0000 (17:03 -0700)]
Fix off-by-one finalized transaction locktime

While these transactions were still valid, we incorrectly assumed that
they would propagate with a locktime of `current_height + 1`, when in
reality, only those with a locktime strictly lower than the next height
in the chain are allowed to enter the mempool.

12 months agoCatch up test nodes to latest block height
Wilmer Paulino [Sun, 16 Apr 2023 05:12:11 +0000 (22:12 -0700)]
Catch up test nodes to latest block height

In a future commit, we plan to correctly enforce that the spending
transaction has a valid locktime relative to the chain for the node
broascasting it in `TestBroadcaster::broadcast_transaction` to. We catch
up these test node instances to their expected height, such that we do
not fail said enforcement.

12 months agoUse current height when generating claims on block_disconnected
Wilmer Paulino [Fri, 21 Apr 2023 22:54:03 +0000 (15:54 -0700)]
Use current height when generating claims on block_disconnected

The `height` argument passed to `OnchainTxHandler::block_disconnected`
represents the height being disconnected, and not the current height.
Due to the incorrect assumption, we'd generate a claim with a locktime
in the future.

Ultimately, we shouldn't be generating claims within
`block_disconnected`. Rather, we should retry the claim at a later block
height, since the bitcoin blockchain does not ever roll back without
connecting a new block. Addressing this is left for future work.

12 months agoMerge pull request #2199 from tnull/2023-04-fix-async-event-processing
Matt Corallo [Sat, 22 Apr 2023 01:45:06 +0000 (01:45 +0000)]
Merge pull request #2199 from tnull/2023-04-fix-async-event-processing

Allow async events processing without holding `total_consistency_lock`

12 months agoMerge pull request #2208 from wpaulino/monitor-rebroadcast-pending-claims
Matt Corallo [Fri, 21 Apr 2023 23:33:52 +0000 (23:33 +0000)]
Merge pull request #2208 from wpaulino/monitor-rebroadcast-pending-claims

Implement pending claim rebroadcast on force-closed channels

12 months agoCall ChainMonitor::rebroadcast_pending_claims on REBROADCAST_TIMER tick
Wilmer Paulino [Mon, 17 Apr 2023 18:52:15 +0000 (11:52 -0700)]
Call ChainMonitor::rebroadcast_pending_claims on REBROADCAST_TIMER tick

This will prompt monitors to rebroadcast/fee-bump their pending claims
on a force-closed channel once on startup and every 30 seconds after.

12 months agoImplement pending claim rebroadcast on force-closed channels
Wilmer Paulino [Mon, 17 Apr 2023 21:17:53 +0000 (14:17 -0700)]
Implement pending claim rebroadcast on force-closed channels

This attempts to rebroadcast/fee-bump each pending claim a monitor is
tracking for a force-closed channel. This is crucial in preventing
certain classes of pinning attacks and ensures reliability if
broadcasting fails. For implementations of `FeeEstimator` that also
support mempool fee estimation, we may broadcast a fee-bumped claim
instead, ensuring we can also react to mempool fee spikes between
blocks.

12 months agoExtend OnchainTxHandler::generate_claim to optionally force feerate bump
Wilmer Paulino [Thu, 20 Apr 2023 21:16:24 +0000 (14:16 -0700)]
Extend OnchainTxHandler::generate_claim to optionally force feerate bump

In the next commit, we plan to extend the `OnchainTxHandler` to retry
pending claims on a timer. This timer may fire with much more frequency
than incoming blocks, so we want to avoid manually bumping feerates
(currently by 25%) each time our fee estimator provides a lower feerate
than before.

12 months agoFix outbound_payment for new Path::blinded_tail
Valentine Wallace [Wed, 19 Apr 2023 17:20:58 +0000 (13:20 -0400)]
Fix outbound_payment for new Path::blinded_tail

12 months agoUpdate changelog for backwards compat
Valentine Wallace [Sun, 9 Apr 2023 21:58:34 +0000 (17:58 -0400)]
Update changelog for backwards compat

12 months agoAccount for Path::blinded_tail when adding a shadow cltv offset
Valentine Wallace [Sun, 9 Apr 2023 20:28:12 +0000 (16:28 -0400)]
Account for Path::blinded_tail when adding a shadow cltv offset

12 months agoTest scoring paths with blinded tails
Valentine Wallace [Wed, 19 Apr 2023 15:56:58 +0000 (11:56 -0400)]
Test scoring paths with blinded tails

12 months agoAccount for Path::blinded_tail in InflightHtlcs::process_path
Valentine Wallace [Sun, 9 Apr 2023 19:57:28 +0000 (15:57 -0400)]
Account for Path::blinded_tail in InflightHtlcs::process_path

12 months agoSupport (de)serializing Path::blinded_tails in HTLCSource
Valentine Wallace [Sun, 9 Apr 2023 19:49:19 +0000 (15:49 -0400)]
Support (de)serializing Path::blinded_tails in HTLCSource

12 months agoSupport (de)serializing Path::blinded_tails in Routes
Valentine Wallace [Sun, 9 Apr 2023 19:47:47 +0000 (15:47 -0400)]
Support (de)serializing Path::blinded_tails in Routes

12 months agoSupport (de)ser for Path::blinded_tails in events
Valentine Wallace [Sun, 9 Apr 2023 19:41:33 +0000 (15:41 -0400)]
Support (de)ser for Path::blinded_tails in events

12 months agoAdd blinded path {metadata} fields to Path, but disallow paying blinded paths for now
Valentine Wallace [Tue, 18 Apr 2023 16:06:35 +0000 (12:06 -0400)]
Add blinded path {metadata} fields to Path, but disallow paying blinded paths for now

12 months agoMerge pull request #2210 from alandotcom/patch-1
Matt Corallo [Fri, 21 Apr 2023 19:01:39 +0000 (19:01 +0000)]
Merge pull request #2210 from alandotcom/patch-1

Fix README typo

12 months agoFix README typo
Alan Cohen [Fri, 21 Apr 2023 17:20:35 +0000 (13:20 -0400)]
Fix README typo

12 months agoClean up handshake timeout disconnection log message 2023-04-better-discon-err-msg
Matt Corallo [Fri, 21 Apr 2023 17:18:04 +0000 (17:18 +0000)]
Clean up handshake timeout disconnection log message

It currently reads "disconnected from peer which hasn't completed
handshake due to ping timeout", which is confusing.

Instead, it will now read "disconnected from peer which hasn't
completed handshake due to ping/handshake timeout"

12 months agoAllow events processing without holding `total_consistency_lock`
Elias Rohrer [Fri, 21 Apr 2023 16:02:54 +0000 (18:02 +0200)]
Allow events processing without holding `total_consistency_lock`

Unfortunately, the RAII types used by `RwLock` are not `Send`, which is
why they can't be held over `await` boundaries. In order to allow
asynchronous events processing in multi-threaded environments, we here
allow to process events without holding the `total_consistency_lock`.

12 months agoReplace Vec<RouteHop> with new Path struct
Valentine Wallace [Sun, 9 Apr 2023 17:50:44 +0000 (13:50 -0400)]
Replace Vec<RouteHop> with new Path struct

This lays groundwork for adding blinded path info to Path

12 months agoAdd utilities for getting a path's final value and cltv delta
Valentine Wallace [Wed, 19 Apr 2023 01:18:44 +0000 (21:18 -0400)]
Add utilities for getting a path's final value and cltv delta

12 months agoMinor Route/RouteHop doc updates
Valentine Wallace [Wed, 5 Apr 2023 01:28:45 +0000 (21:28 -0400)]
Minor Route/RouteHop doc updates

12 months agoClarify the error message when we disconnect a peer
Matt Corallo [Fri, 21 Apr 2023 14:39:01 +0000 (14:39 +0000)]
Clarify the error message when we disconnect a peer

We very regularly receive confusion over the super generic
"Peer sent invalid data or we decided to disconnect due to a
protocol error" message, which doesn't say very much. Usually, we
end up disconnecting because we have a duplicate connection with a
peer, which doesn't merit such a scary message.

Instead, here we clarify the error message to just refer to the
fact that we're disconnecting, and note that its usually a dup
connection in a parenthetical.

12 months agoFix BP prune timer and don't panic on persistence notification failure
Elias Rohrer [Thu, 20 Apr 2023 13:37:11 +0000 (15:37 +0200)]
Fix BP prune timer and don't panic on persistence notification failure

12 months agoMerge pull request #2205 from wpaulino/sign-ecdsa-with-noncedata
Matt Corallo [Thu, 20 Apr 2023 21:53:13 +0000 (21:53 +0000)]
Merge pull request #2205 from wpaulino/sign-ecdsa-with-noncedata

Generate local signatures with additional randomness

12 months agoUse new feature to gate test vectors behind
Wilmer Paulino [Wed, 19 Apr 2023 22:13:35 +0000 (15:13 -0700)]
Use new feature to gate test vectors behind

To match the local signatures found in test vectors, we must make sure
we don't use any additional randomess when generating signatures, as
we'll arrive at a different signature otherwise.

12 months agoSign gossip messages without grinding low R signatures
Wilmer Paulino [Wed, 19 Apr 2023 22:11:34 +0000 (15:11 -0700)]
Sign gossip messages without grinding low R signatures

Gossip messages always use signatures in their compact form, so grinding
for low R signatures is unnecessary.

12 months agoGenerate local signatures with additional randomness
Wilmer Paulino [Wed, 19 Apr 2023 22:08:29 +0000 (15:08 -0700)]
Generate local signatures with additional randomness

Previously, our local signatures would always be deterministic, whether
we'd grind for low R value signatures or not. For peers supporting
SegWit, Bitcoin Core will generally use a transaction's witness-txid, as
opposed to its txid, to advertise transactions. Therefore, to ensure a
transaction has the best chance to propagate across node mempools in the
network, each of its broadcast attempts should have a unique/distinct
witness-txid, which we can achieve by introducing random nonce data when
generating local signatures, such that they are no longer deterministic.

12 months agoImplement EntropySource for InMemorySigner
Wilmer Paulino [Wed, 19 Apr 2023 21:58:57 +0000 (14:58 -0700)]
Implement EntropySource for InMemorySigner

This allows the `InMemorySigner` to produce its own randomness, which we
plan to use when generating signatures in future work.

We can no longer derive `Clone` due to the `AtomicCounter`, so we opt to
implement it manually.

12 months agoMerge pull request #2206 from jkczyz/2023-04-invoice-description
Matt Corallo [Thu, 20 Apr 2023 18:18:28 +0000 (18:18 +0000)]
Merge pull request #2206 from jkczyz/2023-04-invoice-description

Expose description from Invoice's offer/refund

12 months agooutbound_payment: remove unused cltv delta var
Valentine Wallace [Mon, 3 Apr 2023 16:03:42 +0000 (12:03 -0400)]
outbound_payment: remove unused cltv delta var

12 months agoExtract read/write variants from impl_for_vec
Valentine Wallace [Sun, 9 Apr 2023 20:51:55 +0000 (16:51 -0400)]
Extract read/write variants from impl_for_vec

We'll need to (de)serialize vecs of BlindedPaths differently based on whether
we're writing or reading

12 months agoUpdate PaymentParameters::route_hints for blinded paths
Valentine Wallace [Fri, 17 Mar 2023 21:45:12 +0000 (17:45 -0400)]
Update PaymentParameters::route_hints for blinded paths

12 months agoUpdate docs and method names for blinded payment paths
Valentine Wallace [Thu, 16 Mar 2023 02:30:41 +0000 (22:30 -0400)]
Update docs and method names for blinded payment paths

12 months agoMove blinded_path and its utils into a new module
Valentine Wallace [Thu, 16 Mar 2023 01:56:57 +0000 (21:56 -0400)]
Move blinded_path and its utils into a new module

12 months agoExpose description from Invoice's offer/refund
Jeffrey Czyz [Thu, 20 Apr 2023 13:30:18 +0000 (08:30 -0500)]
Expose description from Invoice's offer/refund

This will allow clients like VLS to check the description for an invoice
as part of verification.