Commit graph

5828 commits

Author SHA1 Message Date
Matt Corallo
3dcdb14ce1
Merge pull request #2169 from TheBlueMatt/2023-03-monitor-e-monitor
Block the mon update removing a preimage until upstream mon writes
2023-09-12 21:24:41 +00:00
Matt Corallo
9f3e127525 Test monitor update completion actions on pre-startup completion
This adds a test for monitor update actions being completed on
startup if a monitor update completed "while we were shut down"
(or, really, the manager didn't get persisted after the update
completed).
2023-09-12 19:03:17 +00:00
Matt Corallo
6c3029ddd8 Split expect_payment_forwarded into a function called by macro
Also allowing us to pass the event manually.
2023-09-12 19:03:17 +00:00
Matt Corallo
0d8b0961a5 Update tests to test re-claiming of forwarded HTLCs on startup
Because some of these tests require connecting blocks without
calling `get_and_clear_pending_msg_events`, we need to split up
the block connection utilities to only optionally call
sanity-checks.
2023-09-12 19:03:17 +00:00
Matt Corallo
46453bf078 Correct expect_payment_forwarded upstream channel checking
`expect_payment_forwarded` takes a bool to indicate that the
inbound channel on which we received a forwarded payment has been
closed, but then ignores it in favor of looking at the fee in the
event. While this is generally correct, in cases where we process
an event after a channel was closed, which was generated before a
channel closed this is incorrect.

Instead, we examine the bool we already passed and use that.
2023-09-12 19:03:17 +00:00
Matt Corallo
5ff51b7805 Block the mon update removing a preimage until upstream mon writes
When we forward a payment and receive an `update_fulfill_htlc`
message from the downstream channel, we immediately claim the HTLC
on the upstream channel, before even doing a `commitment_signed`
dance on the downstream channel. This implies that our
`ChannelMonitorUpdate`s "go out" in the right order - first we
ensure we'll get our money by writing the preimage down, then we
write the update that resolves giving money on the downstream node.

This is safe as long as `ChannelMonitorUpdate`s complete in the
order in which they are generated, but of course looking forward we
want to support asynchronous updates, which may complete in any
order.

Thus, here, we enforce the correct ordering by blocking the
downstream `ChannelMonitorUpdate` until the upstream one completes.
Like the `PaymentSent` event handling we do so only for the
`revoke_and_ack` `ChannelMonitorUpdate`, ensuring the
preimage-containing upstream update has a full RTT to complete
before we actually manage to slow anything down.
2023-09-12 19:03:17 +00:00
Matt Corallo
e37a40080c Clean up test handling of resending responding commitment_signed
When we need to rebroadcast a `commitment_signed` on reconnect in
response to a previous update (ie not one which contains any
updates) we previously hacked in support for it by passing a `-1`
for the number of expected update_add_htlcs. This is a mess, and
with the introduction of `ReconnectArgs` we can now clean it up
easily with a new bool.
2023-09-12 16:03:37 +00:00
Matt Corallo
4835b1697c Fix various unused warnings in test and regular builds 2023-09-12 16:03:36 +00:00
Matt Corallo
f6a4505679
Merge pull request #2567 from G8XSU/payment-id
Add PaymentId in ChannelManager.list_recent_payments()
2023-09-11 23:15:49 +00:00
Matt Corallo
1c9df02cbf
Merge pull request #2566 from G8XSU/check-best-block-2538
Verify channel-monitor processes blocks with skipped best_block
2023-09-11 20:20:50 +00:00
Gursharan Singh
073899a398
Add PaymentId in ChannelManager.list_recent_payments() 2023-09-11 12:19:19 -07:00
valentinewallace
8de886199b
Merge pull request #2563 from tnull/2023-09-kvstore-followups
`KVStore` upstreaming followups
2023-09-11 13:59:05 -04:00
Elias Rohrer
aeaed62894
Add length check for read ChannelMonitor keys 2023-09-11 10:17:03 +02:00
Matt Corallo
448b191fec
Merge pull request #2514 from valentinewallace/2023-08-compute-blindedpayinfo
Aggregate `BlindedPayInfo` for blinded routes
2023-09-10 03:02:22 +00:00
Matt Corallo
6436232293
Merge pull request #2495 from dunxen/2023-07-channelenummap
Use a single peer state map for all channel phases in peer state
2023-09-09 18:54:06 +00:00
Gursharan Singh
d926be2b4c Verify channel-monitor processes blocks with skipped best_block
This can happen due to races b/w client's call to block_connect
and adding newly created channel-monitor to chain-monitor using
watch_channel in funding_created.
2023-09-08 18:51:41 -07:00
Duncan Dean
88db0b8221
Remove v1 peer state channel maps & refactor with ChannelPhase 2023-09-08 23:10:56 +02:00
Duncan Dean
15199a65a7
Refactor ChannelManager with ChannelPhase 2023-09-08 23:10:41 +02:00
Matt Corallo
81f4151001
Merge pull request #2549 from yanganto/socket-addr
Rename SocketAddress from NetAddress
2023-09-08 20:08:08 +00:00
Valentine Wallace
f3616e606f
Struct-ify blinded payment path intermediate node info 2023-09-08 10:43:02 -04:00
Valentine Wallace
138a5a770c
Remove unnecessary doc links 2023-09-08 10:43:02 -04:00
Valentine Wallace
d5925f210e
Fix blinded payment TLV ser to not length-prefix
impl_writeable_tlv_based includes a length prefix to the TLV stream, which we
don't want.
2023-09-08 10:43:02 -04:00
Valentine Wallace
10a159f71e
Derive Clone and Debug for blinded payment TLV structs 2023-09-08 10:43:02 -04:00
Valentine Wallace
aee7bb4acd
Make blinded payment TLV fields public.
These should've been made public when they were added for use in
BlindedPath::new_for_payment.
2023-09-08 10:43:02 -04:00
Valentine Wallace
fc0d15136e
Support aggregating htlc_maximum_msat for BlindedPayInfo 2023-09-08 10:43:02 -04:00
Valentine Wallace
02990cad80
Support aggregating htlc_minimum_msat for BlindedPayInfo 2023-09-08 10:43:02 -04:00
Valentine Wallace
ec01d7e061
Compute aggregated BlindedPayInfo in path construction 2023-09-08 10:43:01 -04:00
Antonio Yang
b1bedcfbec Rename SocketAddress from NetAddress 2023-09-08 20:42:06 +08:00
Duncan Dean
585188cda3
Introduce ChannelPhase enum
We introduce the `ChannelPhase` enum which will contain the different
channel structs wrapped by each of its variants so that we can place
these within a single `channel_by_id` map in `peer_state` in the
following commits. This will reduce the number of map lookup operations
we need to do in `ChannelManager`'s various methods. It will also make
certain channel counting logic easier to reason about with less risk of
forgetting to modify logic when new channels structs are introduced for
V2 channel establishment.
2023-09-08 10:19:41 +02:00
Duncan Dean
0cdd72c8e7
Remove outdated Channel TODO 2023-09-08 10:19:39 +02:00
Elias Rohrer
9abe4bb23d
Have path_to_windows_str take reference to avoid clones 2023-09-08 09:40:45 +02:00
Matt Corallo
c60d3058af
Merge pull request #2371 from jkczyz/2023-06-offer-message-handling
BOLT 12 Invoice payments
2023-09-08 01:52:38 +00:00
Matt Corallo
2e113b549d
Merge pull request #2472 from tnull/2023-08-add-kvstore
Replace `KVStorePersister` with `KVStore`
2023-09-07 22:26:03 +00:00
Jeffrey Czyz
44b9c54fa9
Configure BOLT 12 invoice payment retry strategy
Replace a constant three retry attempts for BOLT 12 invoice payments
with a retry strategy specified when creating a pending outbound
payment. This is configured by users in a later commit when constructing
an InvoiceRequest or a Refund.
2023-09-07 16:55:23 -05:00
Jeffrey Czyz
2f6b5d157a
Use u32 instead of usize in Retry::Attempts
An upcoming commit requires serializing Retry, so use a type with a
fixed byte length. Otherwise, using eight bytes to serialize a usize
would fail to read on 32-bit machines.
2023-09-07 16:55:22 -05:00
Jeffrey Czyz
50336b3c7b
Add tests for send_payment_for_bolt12_invoice 2023-09-07 16:55:22 -05:00
Jeffrey Czyz
19c43d0693
pub(crate) visibility for offers/test_utils.rs
The test utilities for Offers are needed for testing message handling in
ChannelManager and OutboundPayments.
2023-09-07 16:55:22 -05:00
Jeffrey Czyz
4e3c031d56
Support paying BOLT 12 invoices
Add a send_payment_for_bolt12_invoice method to OutboundPayments for
initiating payment of a BOLT 12 invoice. This will be called from an
OffersMessageHandler, after which any retries are handled using the
Retryable logic.
2023-09-07 16:55:22 -05:00
Jeffrey Czyz
2852e4cdef
Rename OutboundPayments::retry_payment_internal
It will be used for initial attempts at paying BOLT 12 invoices, so
rename it something that covers both that and retries.
2023-09-07 16:55:22 -05:00
Jeffrey Czyz
283d9b4e03
Refactor OutboundPayments::retry_payment_internal
Consolidate the creation and insertion of onion_session_privs to the
PendingOutboundPayment::Retryable arm. In an upcoming commit, this
method will be reused for an initial BOLT 12 invoice payment. However,
onion_session_privs are created using a different helper.
2023-09-07 16:55:22 -05:00
Jeffrey Czyz
b5169301d8
Add PendingOutboundPayment::InvoiceReceived
When a BOLT 12 invoice has been received, a payment attempt is made and
any errors result in abandoning the PendingOutboundPayment. This results
in generating at PaymentFailed event, which has a PaymentHash. Thus,
when receiving an invoice, transition from AwaitingInvoice to a new
InvoiceReceived state, the latter of which contains a PaymentHash such
the abandon_payment helper can still be used.
2023-09-07 16:54:09 -05:00
Jeffrey Czyz
cbeaeb708f
Test removing abandoned AwaitingInvoice payments 2023-09-07 16:45:12 -05:00
Jeffrey Czyz
fe2244e9cf
Test for removing stale AwaitingInvoice payments 2023-09-07 16:45:11 -05:00
Jeffrey Czyz
7f4c473c88
Move IDEMPOTENCY_TIMEOUT_TICKS to where it is used 2023-09-07 16:45:11 -05:00
Jeffrey Czyz
581ea7c6ed
Add PendingOutboundPayment::AwaitingInvoice
When a BOLT 12 invoice has been requested, in order to guarantee
invoice payment idempotency the future payment needs to be tracked. Add
an AwaitingInvoice variant to PendingOutboundPayment such that only
requested invoices are paid only once. Timeout after a few timer ticks
if a request has not been received.
2023-09-07 16:44:13 -05:00
Elias Rohrer
7a656719af
Add TestStore implementation of KVStore 2023-09-07 22:49:22 +02:00
Elias Rohrer
7576c89adb
Add benchmarking for FilesystemStore
We re-add benchmarking for `FilesystemStore` now that we switched over
to it.
2023-09-07 22:49:22 +02:00
Elias Rohrer
413f9a7de6
Migrate FilesystemPersister tests to FilesystemStore 2023-09-07 22:49:22 +02:00
Elias Rohrer
cc1b505b30
Migrate to KVStore/FilesystemStore
Firstly, we switch our BP over to use `FilesystemStore`, which also gives us test
coverage and ensures the compatibility.

Then, we remove the superseded `KVStorePersister` trait and
the `FilesystemPersister` code.
2023-09-07 22:49:22 +02:00
Elias Rohrer
4305ee4106
Add read_channel_monitors utility
This replaces the `FilesystemPersister::read_channelmonitors` method, as
we can now implement a single utility for all `KVStore`s.
2023-09-07 22:49:22 +02:00