Commit graph

4870 commits

Author SHA1 Message Date
Valentine Wallace
753e4ce3c3
Remove PaymentPathFailed::retry
We now support automatic retries in ChannelManager and no longer support manual
retries, so the field is useless.
2023-03-13 11:59:03 -04:00
Matt Corallo
23c1b461ea
Merge pull request #2092 from TheBlueMatt/2023-03-find-route-id
Correct `outbound_payment` route-fetch calls to pass the hash + ID
2023-03-09 21:49:09 +00:00
Matt Corallo
10e6978b36 Further simplify the outbound_payments failure macro 2023-03-09 20:06:23 +00:00
Matt Corallo
6d6d2005f8 Correct outbound_payment route-fetch calls to pass the hash + ID
`Route::get_route_with_id` exists to provide users payment-specific
data when fetching a route, however we were failing to call it when
we have such info, opting for the simple `get_route` instead. This
defeats the purpose of the additional-metadata method, which we
swap to using here.
2023-03-09 19:23:58 +00:00
Matt Corallo
36834b3cef
Merge pull request #2079 from tnull/2023-03-add-list-channel-by-counterparty 2023-03-08 21:55:32 +00:00
Matt Corallo
dd11cae640
Merge pull request #2078 from AdvaitPote/bigsize_tests
Added encoding and decoding tests for BigSize
2023-03-08 20:03:58 +00:00
Matt Corallo
6aa1cf9d9f
Merge pull request #2085 from tnull/2023-03-introduce-async-https-feature
Support HTTPS Esplora endpoints in `lightning-transaction-sync` via new feature
2023-03-08 19:41:10 +00:00
Advait
c593383627 encoding/decoding tests added for BigSize
removed unnecessary debugging line

using io::Cursor in place of the std one

encoding/decoding tests added for BigSize

made the code concise

encoding/decoding tests added for BigSize
2023-03-09 00:20:14 +05:30
Elias Rohrer
09038ee478
Remove unnecessary logging imports 2023-03-08 19:25:28 +01:00
Elias Rohrer
7a30f3e118
Support HTTPS Esplora endpoints via new feature
To support HTTPS endpoints, the async HTTP library `reqwest` needs one of
the `-tls` features enabled. While the users could specify this in their
own cargo dependencies, we here provide a new `esplora-async-https`
feature for conveinience.
2023-03-08 19:25:23 +01:00
valentinewallace
a386d4455d
Merge pull request #2084 from zpv/fix-changelog-all-paths-failed-typo
Fix `all_paths_failed` typo in changelog
2023-03-08 11:59:36 -05:00
Matt Corallo
2e90ca11ca
Merge pull request #2081 from TheBlueMatt/2023-03-future-poll-panic 2023-03-08 15:49:43 +00:00
Steven Zhao
8d1d134cb4
Fix Event::PaymentPathFailed typo in changelog 2023-03-08 00:23:09 -08:00
Steven
75789d0463
Fix all_paths_failed typo in changelog 2023-03-07 16:51:35 -08:00
Elias Rohrer
8419d13d4c
Add list_channels_by_counterparty method
While we already provide a `list_channels` method, it could result in
quite a large `Vec<ChannelDetails>`. Here, we provide the means to query
our channels by `counterparty_node_id` and DRY up the code.
2023-03-07 19:50:01 +01:00
Matt Corallo
1751f77edf Avoid polling completed futures in the background-processor
`poll`ing completed futures invokes undefined behavior in Rust
(panics, etc, obviously not memory corruption as its not unsafe).
Sadly, in our futures-based version of
`lightning-background-processor` we have one case where we can
`poll` a completed future - if the timer for the network graph
prune + persist completes without a network graph to prune +
persist we'll happily poll the same future over and over again,
likely panicing in user code.
2023-03-07 18:06:12 +00:00
Matt Corallo
ccac926671
Merge pull request #2049 from douglaz/run-clippy-fix
Run clippy fix
2023-03-06 21:28:38 +00:00
Allan Douglas R. de Oliveira
57017dfc0b Run clippy --fix and cleanup code 2023-03-06 19:26:48 +00:00
Matt Corallo
7b2537bfcb
Merge pull request #2074 from TheBlueMatt/2023-03-fix-threaded-test
Make `fuzz_threaded_connections` more robust
2023-03-06 17:26:59 +00:00
Matt Corallo
c5cc1ede26
Merge pull request #2028 from TheBlueMatt/2023-02-macros-for-wilmer
Reduce macro usage in tests
2023-03-06 16:56:08 +00:00
Matt Corallo
d355ce1b78
Merge pull request #1497 from TheBlueMatt/2022-05-no-default-opt
Disable LTO builds in tests (and bump deps to -O2)
2023-03-04 02:01:49 +00:00
Matt Corallo
d64e1b9027 Make fuzz_threaded_connections more robust
In `fuzz_threaded_connections`, if one thread is being run while
another is starved, and the running thread manages to call
`timer_tick_ocurred` twice after the starved thread constructs the
inbound connection but before it delivers the first bytes, we'll
receive an immediate error and `unwrap` it, causing failure.

The fix is trivial, simply remove the unwrap and return if we're
already disconnected when we do the initial read.

While we're here, we also reduce the frequency of the
`timer_tick_ocurred` calls to give us a chance to occasionally
deliver some additional messages.

Fixes #2073
2023-03-04 01:20:11 +00:00
Matt Corallo
af76face12
Merge pull request #2065 from TheBlueMatt/2023-02-0.0.114
Cut 0.0.114
2023-03-04 01:00:06 +00:00
Matt Corallo
a361be3544 Update crate versions to 0.0.114/invoice 0.22 2023-03-04 00:06:46 +00:00
Matt Corallo
e5c1a6d4dd Add release notes for 0.0.114 2023-03-04 00:06:46 +00:00
Matt Corallo
4d2679fac6
Merge pull request #2072 from jkczyz/2023-01-fix-scoring-div-by-zero
Fix division by zero in `ProbabilisticScorer`
2023-03-04 00:06:29 +00:00
Matt Corallo
0188861585
Merge pull request #2071 from TheBlueMatt/2023-01-fix-fast-extra-ready-panic
Fix panic on receiving `channel_ready` after 1st commitment update
2023-03-03 23:32:42 +00:00
Matt Corallo
dfe9ea3762
Use ProbabilisticScorer in router fuzzing, to cover overflows there 2023-03-03 16:25:57 -06:00
Jeffrey Czyz
bfd1a57434
Guard against division by zero in scorer
Since a node may announce that the htlc_maximum_msat of a channel is
zero, adding one to the denominator in the bucket formulas will prevent
the panic from ever happening. While the routing algorithm may never
select such a channel to score, this precaution may still be useful in
case the algorithm changes or if the scorer is used with a different
routing algorithm.
2023-03-03 16:25:57 -06:00
Jeffrey Czyz
e44868681d
Update scoring history buckets when no change
Even when there is no change in min/max liquidity knowledge, tracking
should still be updated to include the additional data point.
2023-03-03 16:25:17 -06:00
Matt Corallo
fac5373687
Merge pull request #2068 from jkczyz/2023-03-doc-fixes
Doc and build warning fixes
2023-03-03 22:19:59 +00:00
Matt Corallo
852cf2b3f2
Merge pull request #2069 from TheBlueMatt/2023-03-no-tx-sync-auto-std
Do not auto-select the lightning `std` feature from tx-sync crate
2023-03-03 22:19:46 +00:00
Matt Corallo
eed4c62f36
Merge pull request #2070 from TheBlueMatt/2023-03-get-key
Expose the node secret key in `{Phantom,}KeysManager`
2023-03-03 22:19:37 +00:00
Jeffrey Czyz
1d1323a3d0
Fix build warnings 2023-03-03 14:23:18 -06:00
Jeffrey Czyz
8408b8d0e4
Add more documentation about BlockSourceError
Some BlockSource implementations provide more error details. Document
this in case users want to examine it further.
2023-03-03 14:23:17 -06:00
Matt Corallo
029b66540a Expose the node secret key in {Phantom,}KeysManager
When we removed the private keys from the signing interface we
forgot to re-add them in the public interface of our own
implementations, which users may need.
2023-03-03 20:11:41 +00:00
Matt Corallo
06f09eeafc
Merge pull request #2067 from benthecarman/fix-typos
Fix typos in lightning-transaction-sync
2023-03-03 20:00:12 +00:00
Matt Corallo
41bcd68a40
Merge pull request #2066 from TheBlueMatt/2023-02-no-enum-refs
Pass `FailureCode` to `fail_htlc_backwards` by ownership
2023-03-03 19:44:40 +00:00
Matt Corallo
a9e6341f79
Merge pull request #2048 from TheBlueMatt/2023-02-send-persist-order-a
Track claimed outbound HTLCs in ChannelMonitors
2023-03-03 19:37:31 +00:00
Matt Corallo
1a18b881bb Do not auto-select the lightning std feature from tx-sync crate
We have some downstream folks who are using LDK in wasm compiled
via the normal rust wasm path. To ensure nothing breaks they want
to use `no-std` on the lightning crate, disabling time calls as
those panic. However, the HTTP logic in
`lightning-transaction-sync` gets automatically stubbed out by the
HTTP client crates when targeting wasm via `wasm_bindgen`, so it
works fine despite the std restrictions.

In order to make both work, `lightning-transaction-sync` can remain
`std`, but needs to not automatically enable the `std` flag on the
`lightning` crate, ie by setting `default-features = false`. We do
so here.
2023-03-03 19:26:14 +00:00
Matt Corallo
0987b32bed Pass FailureCode to fail_htlc_backwards by ownership
`FaliureCode` is a trivial enum with no body, so we shouldn't be
passing it by reference. Its sufficiently strange that the Java
bindings aren't happy with it, which is fine, we should just fix it
here.
2023-03-03 17:20:58 +00:00
Matt Corallo
75527dbdf1 Remove unused compat block in provide_latest_holder_commitment_tx 2023-03-03 17:19:03 +00:00
Matt Corallo
0ad1f4c943 Track claimed outbound HTLCs in ChannelMonitors
When we receive an update_fulfill_htlc message, we immediately try
to "claim" the HTLC against the HTLCSource. If there is one, this
works great, we immediately generate a `ChannelMonitorUpdate` for
the corresponding inbound HTLC and persist that before we ever get
to processing our counterparty's `commitment_signed` and persisting
the corresponding `ChannelMonitorUpdate`.

However, if there isn't one (and this is the first successful HTLC
for a payment we sent), we immediately generate a `PaymentSent`
event and queue it up for the user. Then, a millisecond later, we
receive the `commitment_signed` from our peer, removing the HTLC
from the latest local commitment transaction as a side-effect of
the `ChannelMonitorUpdate` applied.

If the user has processed the `PaymentSent` event by that point,
great, we're done. However, if they have not, and we crash prior to
persisting the `ChannelManager`, on startup we get confused about
the state of the payment. We'll force-close the channel for being
stale, and see an HTLC which was removed and is no longer present
in the latest commitment transaction (which we're broadcasting).
Because we claim corresponding inbound HTLCs before updating a
`ChannelMonitor`, we assume such HTLCs have failed - attempting to
fail after having claimed should be a noop. However, in the
sent-payment case we now generate a `PaymentFailed` event for the
user, allowing an HTLC to complete without giving the user a
preimage.

Here we address this issue by storing the payment preimages for
claimed outbound HTLCs in the `ChannelMonitor`, in addition to the
existing inbound HTLC preimages already stored there. This allows
us to fix the specific issue described by checking for a preimage
and switching the type of event generated in response. In addition,
it reduces the risk of future confusion by ensuring we don't fail
HTLCs which were claimed but not fully committed to before a crash.

It does not, however, full fix the issue here - because the
preimages are removed after the HTLC has been fully removed from
available commitment transactions if we are substantially delayed
in persisting the `ChannelManager` from the time we receive the
`update_fulfill_htlc` until after a full commitment signed dance
completes we may still hit this issue. The full fix for this issue
is to delay the persistence of the `ChannelMonitorUpdate` until
after the `PaymentSent` event has been processed. This avoids the
issue entirely, ensuring we process the event before updating the
`ChannelMonitor`, the same as we ensure the upstream HTLC has been
claimed before updating the `ChannelMonitor` for forwarded
payments.

The full solution will be implemented in a later work, however this
change still makes sense at that point as well - if we were to
delay the initial `commitment_signed` `ChannelMonitorUpdate` util
after the `PaymentSent` event has been processed (which likely
requires a database update on the users' end), we'd hold our
`commitment_signed` + `revoke_and_ack` response for two DB writes
(i.e. `fsync()` calls), making our commitment transaction
processing a full `fsync` slower. By making this change first, we
can instead delay the `ChannelMonitorUpdate` from the
counterparty's final `revoke_and_ack` message until the event has
been processed, giving us a full network roundtrip to do so and
avoiding delaying our response as long as an `fsync` is faster than
a network roundtrip.
2023-03-03 17:19:03 +00:00
Jeffrey Czyz
fbe9f47e12
Reference Router in ChannelManager docs 2023-03-03 09:48:25 -06:00
Jeffrey Czyz
a58b81aa1e
DRY up historical bucket_idx calculation 2023-03-03 09:41:52 -06:00
Jeffrey Czyz
10cfe5c973
Fix scorer panic when available capacity is zero
ProbabilisticScorer takes a ChannelUsage when computing a penalty for a
channel. The formula for calculating the liquidity penalty reduces the
maximum capacity by the amount of in-flight HTLCs (available capacity)
and adds one to prevent division by zero.

However, since the available capacity is passed to
DirectedChannelLiquidity as the capacity, other penalty formulas may use
the available (i.e., reduced) capacity inadvertently. In practice, this
has two ramifications for the historical liquidity penalty computation:

1. The bucket formula doesn't have a consistent denominator for a given
   channel.
2. The bucket formula may divide by zero when the in-flight HTLC amount
   equals or exceeds the effective capacity.

Fixing this involves only using the available capacity when appropriate.
2023-03-03 09:41:42 -06:00
benthecarman
53788913c9
Fix typos in lightning-transaction-sync 2023-03-02 23:36:54 -06:00
Matt Corallo
5c6e36727c
Merge pull request #2060 from TheBlueMatt/2023-02-peers-disconnect-consistency
Remove peers from the node_id_to_descriptor even without init
2023-03-02 23:44:23 +00:00
Matt Corallo
33c36d007e Avoid removing stale preimages when hashes collide in fuzzing 2023-03-02 23:42:40 +00:00
Matt Corallo
48946d9add Fuzz rapid peer connection/disconnections in threads
This test fails on the bug fixed two commits ago with the
additional assertions in the previous commit.
2023-03-02 21:44:43 +00:00