Commit graph

2501 commits

Author SHA1 Message Date
Alec Chen
b7d0357a8a
Move keysend tests to payment_tests.rs 2023-08-04 19:17:29 -05:00
Valentine Wallace
c9d3544314
Remove unnecessary vecs in channel.rs 2023-08-02 12:54:44 -07:00
Valentine Wallace
67868aec72
Replace OnionHopData with OutboundPayload for outbound onions
Follows on from the previous commit, see its message
2023-08-02 12:54:41 -07:00
Valentine Wallace
02a6d895a5
Receive payment onions as new InboundPayload instead of OnionHopData
To support route blinding, we want to split OnionHopData into two separate
structs, one for inbound onions and one for outbound onions. This is because
blinded payloads change the fields present in the onion hop data struct based
on whether we're sending vs receiving (outbound onions include encrypted blobs,
inbound onions can decrypt those blobs and contain the decrypted fields
themselves).

In upcoming commits, we'll add variants for blinded payloads to the new
InboundPayload enum.
2023-08-02 12:54:34 -07:00
Valentine Wallace
0c37488ff4
Remove outdated documentation of a panic 2023-08-02 12:54:34 -07:00
Valentine Wallace
9473f1cb5f
Remove indentation in payment receive util
This also set us up for supporting receiving blinded onion payloads.
2023-08-02 12:54:31 -07:00
Matt Corallo
0607ed766a
Merge pull request #2460 from TheBlueMatt/2023-07-claimable-clarify
Rename `Balance::claimable_amount_satoshis` to have a unique name
2023-07-31 17:47:33 +00:00
Matt Corallo
56fba35422
Merge pull request #2465 from alecchendev/2023-07-flip-keysend-feature-bit
Flip keysend feature bit on
2023-07-31 17:46:57 +00:00
Alec Chen
7ee90a5dc6 Flip keysend feature bit in node features 2023-07-30 21:18:43 -05:00
Matt Corallo
830220393f Drop claimable from Balance::claimable_amount_satoshis fields
In Java/TypeScript, we map enums as a base class and each variant
as a class which extends the base. In Java/TypeScript, functions
and fields share the same namespace, which means we cannot have
functions on an enum which have the same name as any fields in any
enum variants.

`Balance`'s `claimable_amount_satoshis` method aliases with fields
in each variant, and thus ultimately doesn't compile in TypeScript.

Because `Balance::claimable_amount_satoshis` has the same name as
the fields, it's also a bit confusing, as it doesn't return the
field for each variant, but sometimes returns zero if we're not
sure we can claim the balance.

Instead, we rename the fields in each enum variant to simply
`amount_satoshis`, to avoid implying that we can definitely claim
the balance.
2023-07-30 02:24:16 +00:00
Valentine Wallace
ece4db67fe
Struct-ify reconnect_nodes test util args
Makes it easier to add new arguments without a ton of resulting test changes.
Useful for route blinding testing because we need to check for malformed HTLCs,
which is not currently supported by reconnect_nodes. It also makes it easier to
tell what is being checked in relevant tests.
2023-07-27 16:00:28 -07:00
Allan Douglas R. de Oliveira
a15d0b5c2e Docs improvements for channel 2023-07-25 22:52:21 +00:00
Matt Corallo
c383f06538
Merge pull request #2370 from valentinewallace/2023-06-send-along-path-args
Update `send_payment_along_path` to take its args as struct
2023-07-24 22:43:58 +00:00
Matt Corallo
e13ff10c63
Merge pull request #2431 from arik-so/2023-07-public-excess-data 2023-07-24 03:52:27 +00:00
Matt Corallo
d7e3320c03
Merge pull request #2439 from tnull/2023-05-fix-0conf-sigs-racing-confirms
Avoid panic when 0conf channel's ann. sigs race on-chain confirmation
2023-07-21 19:37:28 +00:00
Elias Rohrer
adcac97ebc
Avoid unwraping in get_announcement_sigs
While this is currently not reachable, it's still cleaner to
avoid the `unwrap` and return `None` if `short_channel_id` hasn't been
set yet.
2023-07-21 09:54:28 +02:00
Elias Rohrer
82fdf0f62d
Avoid panic when 0conf channel's ann. sigs race on-chain confirmation
A channel's `short_channel_id` is currently only set when the funding
transaction is confirmed via `transactions_confirmed`, which might be
well after the channel initally becomes usable, e.g., in the 0conf case.

Previously we would panic due to a reachable `unwrap` when receiving a
counterparty's `announcement_signatures` message for a 0conf channel
pending confirmation on-chain.

Here we fix this bug by avoiding unsafe `unwrap`s and just erroring out
and ignoring the announcement_signatures message if the `short_channel_id`
hasn't been set yet.
2023-07-21 09:54:28 +02:00
Matt Corallo
8c61d9d0dc Make requires_unknown_bits_from param type bindings compatible
While bindings should probably be able to figure out that this is
the same type as `Self`, for now we simply swap the type to make
the bindings generator have an easier go of it.
2023-07-20 21:43:52 +00:00
Matt Corallo
a8acbe710e No-export APeerManager in bindings
`APeerManager` will simply be mapped as `PeerManager` in bindings,
as structs are all concretized into a single form.
2023-07-20 21:43:52 +00:00
Matt Corallo
e4c44f3c5b
Merge pull request #2430 from TheBlueMatt/2023-07-116-bindings-part-1
Assorted 0.0.116 Bindings updates
2023-07-20 21:42:44 +00:00
Matt Corallo
d2c20ecc2d Pass InFlightHltcs to the scorer by ownership rather than ref
Given we build `InFlightHtlcs` per route-fetch call, there's no
reason to pass them out by reference rather than simply giving the
user the full object. This also allows them to tweak the in-flight
set before fetching a route.
2023-07-20 19:49:43 +00:00
Arik Sosman
b28769bfd1
Publicize UnsignedChannelAnnouncement's excess_data.
Making the `excess_data` field public significantly
simplifies writing legible unit tests for the
Rapid Gossip Sync Server.
2023-07-20 11:08:27 -07:00
Duncan Dean
50a6d41d26
Close and remove unfunded inbound/outbound channels that are older than an hour
We introduce a `UnfundedChannelContext` which contains a counter for the
current age of an unfunded channel in timer ticks. This age is incremented
for every `ChannelManager::timer_tick_ocurred` and the unfunded channel
is removed if it exceeds `UNFUNDED_CHANNEL_AGE_LIMIT_TICKS`.

The value will not be persisted as unfunded channels themselves are not
persisted.
2023-07-19 19:12:10 +02:00
Duncan Dean
b4d082b833
Remove redundant 'outbound' wording from methods 2023-07-19 19:10:32 +02:00
Duncan Dean
bd297fe39d
Force close pending channels in internal_shutdown 2023-07-19 19:10:30 +02:00
Duncan Dean
a70b1f74ce
Consider all channel maps in update_partial_channel_config 2023-07-19 19:10:29 +02:00
Duncan Dean
c2851ea5d8
Fallback close_channel_internal to force close unfunded channels 2023-07-19 19:10:28 +02:00
Duncan Dean
f27515dbb2
Add missing unfunded channel maps checks in ChannelManager
One of a series of follow-up commits to address some issues found
in PR 2077, where we split channels up into different maps and structs
depending on phase in their life.
2023-07-19 19:10:27 +02:00
Duncan Dean
e9001aa004
Refer to channels busy with funding tx negotiation as "unfunded"
We had some inconsistencies so far in referring to channels such as
`OutboundV1Channel` and `InboundV1Channel` as pending and unfunded.
From here we refer to these kinds of channels only as "unfunded".

This is a slight conflation with the term "unfunded" in the contexts
of denial of service mitigation. There, "unfunded" actually refers to
non-0conf, inbound channels that have not had their funding transaction
confirmed. This might warrant changing that usage to "unconfirmed inbound".
2023-07-19 19:10:26 +02:00
Matt Corallo
baf9731a21
Merge pull request #2415 from wpaulino/update-fee-anchors
Add min mempool estimate for feerate updates on anchor channels
2023-07-17 19:45:51 +00:00
Matt Corallo
ba8af2280d
Merge pull request #2403 from wpaulino/bump-transaction-event-handler-tests
Integrate BumpTransactionEventHandler into existing anchor tests
2023-07-17 17:18:20 +00:00
Wilmer Paulino
7751cb9066
Use min mempool feerate for outbound updates on anchor channels
As done with inbound feerate updates, we can afford to commit less in
fees, as long as we still may the minimum mempool feerate. This enables
users to spend a bit more of their balance, as less funds are being
committed to transaction fees.
2023-07-14 14:49:57 -07:00
Wilmer Paulino
1349ac8e2d
Relax constraints for inbound feerate updates on anchor channels
Channels supporting anchors outputs no longer require their feerate
updates to target a prompt confirmation since commitment transactions
can be bumped when broadcasting. Commitment transactions must now at
least meet the minimum mempool feerate, until package relay is deployed,
such that they can propagate across node mempools in the network by
themselves.

The existing higher bound no longer applies to channels supporting
anchor outputs since their HTLC transactions don't have any fees
committed, which directly impact the available balance users can send.
2023-07-14 14:49:56 -07:00
Wilmer Paulino
ff474ba384
Integrate BumpTransactionEventHandler into existing anchor tests 2023-07-14 14:45:20 -07:00
Wilmer Paulino
38f12698a7
Add BumpTransactionEventHandler instance to node test harness 2023-07-14 14:45:20 -07:00
Wilmer Paulino
990c500099
Avoid yielding ChannelClose bump events with sufficient feerate
There's no need to yield such an event when the commitment transaction
already meets the target feerate on its own, so we can simply broadcast
it without an anchor child transaction. This may be a common occurrence
until we are less aggressive about feerate updates.
2023-07-14 14:45:17 -07:00
Jeffrey Czyz
8c4a85b357
Qualify the BOLT 11 invoice features type
A previous commit qualified the BOLT 11 invoice type, so any related
types should be similarly qualified, if public.
2023-07-14 15:49:00 -05:00
Valentine Wallace
9c5acf19f3
Move pending forward htlc construction into method
In upcoming blinded paths work, this method will grow to handle blinded
forwards.
2023-07-13 15:23:49 -04:00
Matt Corallo
df237ba3b4
Merge pull request #2391 from TheBlueMatt/2023-07-all-compl-actions
Handle pre-startup and closed-channel monitor update completion actions
2023-07-12 22:37:40 +00:00
Matt Corallo
550cf91439 Add comment describing when a completion action can be discarded
In an older PR a reviewer had asked why the discarding of a channel
being blocked on another monitor update is okay if the blocked
channel has since closed. At the time, this was not actually okay -
the monitor updates in the channel weren't moved to the
`ChannelManager` on close so the whole pipeline was busted, but
with the changes in 4041f0899f the
handling of channel closes with pending monitor updates is now
correct, and so is the existing code block.
2023-07-12 20:53:10 +00:00
Matt Corallo
f9521a4bda Run monitor update completion actions for pre-startup completion
If a `ChannelMonitorUpdate` completes being persisted, but the
`ChannelManager` isn't informed thereof (or isn't persisted) before
shutdown, on startup we may still have it listed as in-flight. When
we compare the available `ChannelMonitor` with the in-flight set,
we'll notice it completed and remove it, however this may leave
some post-update actions dangling which need to complete.

Here we handle this with a new `BackgroundEvent` indicating we need
to handle any post-update action(s) for a given channel.
2023-07-12 20:53:10 +00:00
Elias Rohrer
07606c1841
Merge pull request #2393 from wpaulino/bump-transaction-event-handler-fixups
Bump transaction event handler fixups
2023-07-12 21:17:56 +02:00
Wilmer Paulino
690ad18b22
Provide missing post-derivation signer parameters
Users may expect these to be provided manually after derivation in the
event they need to perform any enforcement prior to signing.
2023-07-11 16:53:24 -07:00
Wilmer Paulino
72c42ee786
Cache HTLC per_commitment_point in descriptor
This allows us to obtain the HTLC input and output from its descriptor
without needing to derive the `per_commitment_point` through the signer.
2023-07-11 16:53:22 -07:00
Matt Corallo
e404c129a5
Merge pull request #2400 from TheBlueMatt/2023-07-kill-vec_type
Fix backwards compat for blocked_monitor_updates and finally kill `vec_type`
2023-07-11 19:58:34 +00:00
Elias Rohrer
31a0456c0e
Merge pull request #2395 from wpaulino/phantom-deduped-forward-event
Force enqueue second forward event for phantom receives
2023-07-11 09:31:37 +02:00
Matt Corallo
d450e0fb2c Handle monitor completion actions for closed channels
If a channel has been closed, there may still be some
`ChannelMonitorUpdate`(s) which are pending completion. These
in-flight updates may also be blocking another channel from letting
an update fly, e.g. for forwarded payments where the payment
preimage will be removed from the downstream channel after the
upstream channel has closed.

Luckily all the infrastructure to handle this case is already in
place - we just need to process the
`monitor_update_blocked_actions` for closed channels.
2023-07-10 21:32:44 +00:00
Wilmer Paulino
81722ca833
Handle new event processing logic when enqueuing forward event
This was a regression resulting from f2453b7 since we now process events
in a loop until there aren't any left. Processing events is done in
batches and they are not removed until we're done processing each batch.
Since handling a `PendingHTLCsForwardable` event will call back into the
`ChannelManager`, we'll still see the original forwarding event not
removed. Phantom payments will need an additional forwarding event
before being claimed to make them look real by taking more time.
2023-07-10 09:49:31 -07:00
Wilmer Paulino
dba3e8f2d9
Merge pull request #2364 from TheBlueMatt/2023-06-htlc-preimage-replay
Re-claim forwarded HTLCs on startup
2023-07-10 09:27:57 -07:00
Matt Corallo
9ce7e8e650 Rename ClosingMonitorUpdateRegeneratedOnStartup to Closed...
Now that we also use the "Closing" `BackgroundEvent` for
already-closed channels we need to rename it and tweak the docs.
2023-07-08 02:16:33 +00:00