Commit graph

5578 commits

Author SHA1 Message Date
Valentine Wallace
6c3ca554a4
Implement routing to blinded payment paths
Sending to them is still disallowed, for now.
2023-06-19 09:54:25 -04:00
Valentine Wallace
25a707314f
Router: clean up Path construction
We don't need to collect a vec of Results anymore.
2023-06-19 09:54:25 -04:00
Valentine Wallace
8344222173
Add CandidateRouteHop::Blinded and ::OneHopBlinded variant
It's unclear what values 1-hop blinded paths should set their BlindedPayInfos
to, because those values are meant to refer to the fees/cltv delta on the path
*between* the intro node and the destination. We zero out these values in the
new variant's methods so they don't mess with path finding/construction.
2023-06-19 09:54:25 -04:00
Valentine Wallace
b3a27acd0e
Update CandidateRouteHop::short_channel_id to be optional 2023-06-19 09:54:23 -04:00
Matt Corallo
c3c105075a
Merge pull request #2351 from TheBlueMatt/2023-04-remove-legacy-recv
Drop `create_inbound_payment*_legacy` breaking downgrade to 0.0.103
2023-06-17 18:38:25 +00:00
Valentine Wallace
be59d010f0
Routing: accommodate for blinded paths in used liquidity tracking 2023-06-16 11:14:58 -04:00
Valentine Wallace
a2918814f0
Replace max_channel_saturation_power_of_half hardcode with const 2023-06-16 11:14:58 -04:00
Valentine Wallace
6a54098dd1
Add utils for creating blinded PaymentParameters 2023-06-16 11:14:58 -04:00
Valentine Wallace
3184393df2
Reverse (BlindedPath, BlindedPayInfo) tuple order in offers invoice.
To make it uniform with PaymentParameters' Payee::Blinded::route_hints.
2023-06-16 11:14:53 -04:00
Matt Corallo
ae9e96e277
Merge pull request #2077 from dunxen/2023-02-splitchannelstate
Split prefunded `Channel` into `Inbound`/`Outbound` channels
2023-06-16 06:01:10 +00:00
Duncan Dean
d957f362ff
Rename inbound_is_awaiting_accept() to is_awaiting_accept() 2023-06-15 22:31:41 +02:00
Duncan Dean
8f93e2dc94
Rename InboundV1Channel::new_from_req to InboundV1Channel::new 2023-06-15 22:31:40 +02:00
Duncan Dean
637e03a3de
Move inbound channel methods into InboundV1Channel's impl 2023-06-15 22:31:37 +02:00
Duncan Dean
4a0cd5cf55
Move outbound channel methods into OutboundV1Channel's impl 2023-06-15 22:20:14 +02:00
Duncan Dean
4b1e2865cf
Create and use methods for counting channels
This commit also adds two new maps to `PeerState` for keeping track
of `OutboundV1Channel`s and `InboundV1Channel`s so that further
commits are a bit easier to review.
2023-06-15 12:55:40 +02:00
Duncan Dean
4ad67cfe18
Refactor channel map update macros for use with ChannelContext 2023-06-15 12:55:37 +02:00
Duncan Dean
2ea27e02cd
Move Channel::force_shutdown to ChannelContext impl 2023-06-15 12:51:45 +02:00
Duncan Dean
baadeb7374
Move inbound channel constructor into InboundV1Channel impl 2023-06-15 12:51:44 +02:00
Duncan Dean
e6c2f04f15
Move outbound channel constructor into OutboundV1Channel impl 2023-06-15 12:51:43 +02:00
Duncan Dean
883e0566ef
Introduce InboundV1Channel & OutboundV1Channel 2023-06-15 12:51:34 +02:00
Duncan Dean
10125269d2
Move channel constants up 2023-06-14 16:04:30 +02:00
Duncan Dean
e3f0c55182
Make ChannelManager::issue_channel_close_events take a ChannelContext 2023-06-14 16:04:28 +02:00
Duncan Dean
25c1ad8e19
Convert ChannelDetails::from_channel to ChannelDetails::from_channel_context
This rename and refactor is so that we can get channel details from a
`ChannelContext` which is a common object to all channels.
2023-06-14 16:04:27 +02:00
Duncan Dean
60706d6338
Move Channel::get_available_balances to ChannelContext impl 2023-06-14 16:04:26 +02:00
Duncan Dean
9f4e71452a
Move Channel::next_*_commit_tx_fee_msat methods to ChannelContext impl 2023-06-14 16:04:25 +02:00
Duncan Dean
08ee72be9d
Move Channel::commit_tx_fee_msat to file-level utilities 2023-06-14 16:04:24 +02:00
Duncan Dean
ed6a5bb151
Move Channel::get_*_pending_htlc_stats to ChannelContext impl 2023-06-14 16:04:23 +02:00
Duncan Dean
2774aa26d9
Prepare some methods for upcoming moves to ChannelContext
To reduce interleaving in commits, we introduce a `context` variable
in methods to be moved in upcoming commits so there is minimal change
with the moves.
2023-06-14 16:04:22 +02:00
Duncan Dean
3ff94fae55
Move Channel::get_feerate_sat_per_1000_weight and other methods
This is one of a series of commits to make sure methods are moved by
chunks so they are easily reviewable in diffs. Unfortunately they are
not purely move-only as fields to be updated for things to
compile, but these should be quite clear.

This commit also uses the `context` field where needed for compilation
and tests to pass due to the above change.

f s/tarcontext.get_/target_/
2023-06-14 16:04:21 +02:00
Duncan Dean
0d739eeb22
Move Channel::build_holder_transaction_keys and some other methods
This is one of a series of commits to make sure methods are moved by
chunks so they are easily reviewable in diffs. Unfortunately they are
not purely move-only as fields need to be updated for things to
compile, but these should be quite clear.

This commit also uses the `context` field where needed for compilation
and tests to pass due to the above change.
2023-06-14 16:04:14 +02:00
Duncan Dean
497aeb006f
Move Channel::build_commitment_transaction to ChannelContext impl
This is one of a series of commits to make sure methods are moved by
chunks so they are easily reviewable in diffs. Unfortunately they are
not purely move-only as fields need to be updated for things to
compile, but these should be quite clear.

This commit also uses the `context` field where needed for compilation
and tests to pass due to the above change.
2023-06-14 13:42:27 +02:00
Duncan Dean
ede8324397
Move Channel::channel_id and some other methods to ChannelContext impl
This is one of a series of commits to make sure methods are moved by
chunks so they are easily reviewable in diffs. Unfortunately they are
not purely move-only as fields need to be updated for things to
compile, but these should be quite clear.

This commit also uses the `context` field where needed for compilation
and tests to pass due to the above change.
2023-06-14 13:42:26 +02:00
Duncan Dean
1ee0a66d21
Move Channel::get_update_time_counter and some other methods
This is one of a series of commits to make sure methods are moved by
chunks so they are easily reviewable in diffs. Unfortunately they are
not purely move-only as fields need to be updated for things to
compile, but these should be quite clear.

This commit also uses these methods through the `context` field where
needed for compilation and tests to pass due to the above change.
2023-06-14 13:42:24 +02:00
Duncan Dean
1503ebbc0e
Move Channel::opt_anchors to ChannelContext impl & move some util fns
This is one of a series of commits to make sure methods are moved by
chunks so they are easily reviewable in diffs. Unfortunately they are
not purely move-only as fields need to be updated for things to
compile, but these should be quite clear.
2023-06-14 13:42:23 +02:00
Duncan Dean
883afb38d4
Move Channel fields into ChannelContext struct
This is a first step for simplifying the channel state and introducing
new unfunded channel types that hold similar state before being promoted
to funded channels.

Essentially, we want the outer `Channel` type (and upcoming channel types)
to wrap the context so we can apply typestate patterns to the that wrapper
while also deduplicating code for common state and other internal fields.
2023-06-14 13:42:22 +02:00
Matt Corallo
74a9ed9c19
Merge pull request #2294 from jkczyz/2023-05-onion-message-replies
BOLT 12 Offers message handling support
2023-06-13 21:01:32 +00:00
Jeffrey Czyz
3fd6b44043
Reduce log level of potential noisy log statement 2023-06-13 13:07:49 -05:00
Jeffrey Czyz
c16ecbae92
Fuzz test onion message replies 2023-06-13 13:07:48 -05:00
Jeffrey Czyz
4257f65738
Use different node secrets in onion message fuzzer
When generating onion message fuzz data, the same public key was used
for each node. However, the code now advances the blinded path if the
sender is the introduction node. Use different node secrets for each
node to avoid this. Note that the exercised handling code is for the
sender's immediate peer.
2023-06-13 13:07:48 -05:00
Jeffrey Czyz
fac5f4b86b
Test onion message replies 2023-06-13 13:07:48 -05:00
Jeffrey Czyz
ceb90386a9
Split TestCustomMessage into Request and Response
This will allow for testing onion message replies.
2023-06-13 13:07:48 -05:00
Jeffrey Czyz
c83d5bf162
Remove unnecessary Sized bound 2023-06-13 13:07:48 -05:00
Jeffrey Czyz
c17c2ae3c0
Support onion message replies in OnionMessenger
Modify onion message handlers to return an optional response message for
OnionMessenger to reply with.
2023-06-13 13:07:47 -05:00
Jeffrey Czyz
a71000f35d
MessageRouter trait for OnionMessenger
Add a trait for finding routes for onion messages and parameterize
OnionMessenger with it. This allows OnionMessenger to reply to messages
that it handles via one of its handlers (e.g., OffersMessageHandler).
2023-06-13 13:07:47 -05:00
Jeffrey Czyz
f15da3d294
Add OnionMessagePath wrapper struct
To avoid confusion in the upcoming MessageRouter trait, introduce an
OnionMessagePath struct that wraps the intermediate nodes and the
destination. Use this in OnionMessenger::send_onion_message.
2023-06-13 13:07:47 -05:00
Jeffrey Czyz
f521e4cceb
OffersMessageHandler trait for OnionMessenger
Add a trait for handling BOLT 12 Offers messages to OnionMessenger and a
skeleton implementation of it for ChannelManager. This allows users to
either provide their own custom handling Offers messages or rely on a
version provided by LDK using stateless verification.
2023-06-13 13:07:47 -05:00
Jeffrey Czyz
cff88aa509
Avoid an unnecessary unwrap 2023-06-13 13:07:47 -05:00
Jeffrey Czyz
a799fc9b30
Onion message payload for BOLT 12 Offers
BOLT 12 Offers makes use of onion messages to request and respond with
invoices. Add these types and an error type to OnionMessageContents
along with the necessary parsing and encoding.
2023-06-13 13:07:47 -05:00
Jeffrey Czyz
7533a3c42f
Pass logger to onion payload decoder
In an upcoming commit, messages for BOLT 12 offers are read from the
onion payload. Passing a logger allows for logging semantic errors when
parsing the messages.
2023-06-13 13:07:46 -05:00
Jeffrey Czyz
9b3a35a133
Add InvoiceError message
If an InvoiceRequest or an Invoice delivered via an onion message cannot
be handled, the recipient should reply with an InvoiceError if a reply
path was given. Define the message and conversion from SemanticError.
2023-06-13 13:07:46 -05:00