Commit graph

6194 commits

Author SHA1 Message Date
Matt Corallo
748bebadb4 Remove unnecessary bounds in scoring
In our scoring logic we have a handful of unnecessary bounds,
leading to extra diff in the bindings branch when those bounds have
to be removed as well as a few cases where bindings generation
simply gets confused.

Here we remove a number of bounds across the scoring traits and
impls, cleaning things up and simplifying bindings changes.
2023-10-01 00:05:01 +00:00
Matt Corallo
26c1639ab6 Use Default::default() to construct () as score-updating param
In 6b0d94a302 we switched most tests
to `Default::default()` for scoring parameters passed to
route-fetching. Here we do the same for the scoring parameters when
passed to score-updating.
2023-10-01 00:05:01 +00:00
Matt Corallo
327142894d Expose parse_onion_address publicly in no-std
The reason for having a separate `parse_onion_address` from
`FromStr` is to have an onion parsing function in `no-std`, but
when we added it we forgot to make it public. We do this here, as
well as fix a few compilation warnings in `no-std`.
2023-09-30 18:06:38 +00:00
Matt Corallo
783e255d4f Switch Simple*ChannelManager locks around Score to RwLock
This switches the locks used around `ProbabilisticScorer` in
`Simple*ChannelManager` type aliases to `RwLock`.
2023-09-30 18:04:31 +00:00
Matt Corallo
6482635ba6 Fix Simple*PeerManager to not require refs to the UtxoLookup
`UtxoLookup` doesn't strictly need to be referenced from the
`PeerManager`, and in fact the new `GossipVerifier` in
`lightning-block-sync` requires itself to be owned by the
`PeerManager` (for circular type reasons).

This allows us to use `lightning-block-sync`'s `GossipVerifier`
with `SimpleArcPeerManager` in ldk-sample.
2023-09-30 17:57:54 +00:00
Matt Corallo
3e93f9ad88 Implement Readable/Writeable for RwLock wrappers
We now support separate R/W locks in `LockableScore`, which allow
us to do routefinding in parallel, however in order to support
`WriteableScore` for such users we need to implement `Writeable`
for `RwLock` wrappers around `Writeable` types, which we do here.
2023-09-30 17:41:43 +00:00
Matt Corallo
20f287f439
Merge pull request #2630 from TheBlueMatt/2023-09-117-rc1
Bump crate versions to 0.0.117-rc1/invoice 0.25-rc1
2023-09-30 00:38:27 +00:00
Matt Corallo
cff2061335
Merge pull request #2610 from wpaulino/missing-htlc-claim-balance
Fix matching of second-stage HTLC claim in get_htlc_balance
2023-09-29 23:55:04 +00:00
Matt Corallo
f534ce26c9
Merge pull request #2621 from G8XSU/dont-persist-erroneous-update
Persist entire monitor if there is an error while applying monitor_update
2023-09-29 23:45:57 +00:00
Matt Corallo
7036681728 Bump crate versions to 0.0.117-rc1/invoice 0.25-rc1 2023-09-29 23:39:18 +00:00
Wilmer Paulino
fd66a298f3
Fix wrong node broadcaster in test_yield_anchors_events 2023-09-29 16:28:22 -07:00
Wilmer Paulino
4a393ee540
Add anchors coverage to test_revoked_counterparty_aggregated_claims 2023-09-29 16:28:20 -07:00
Wilmer Paulino
fe45af62a5
Add anchors coverage to test_revoked_counterparty_htlc_tx_balances 2023-09-29 16:27:10 -07:00
Gursharan Singh
976acd8af0
Add update_persisted_channel doc to indicate rare case for None update 2023-09-29 16:26:40 -07:00
Gursharan Singh
5e6a0d5f38
Persist full monitor if there is an error while applying monitor_update
Motivation: When there is an error while applying monitor_update to a
channel_monitor,  we don't want to persist a 'monitor_update' which
results in a failure to apply later while reading 'channel_monitor' with
updates from storage. Instead, we should persist the entire 'channel_monitor'
here.
2023-09-29 16:26:40 -07:00
Gursharan Singh
13eac47ed9
Correctly mark chain_sync updates in test_utils
We were incorrectly marking updates as chain_sync
or not in test_utils based on whether monitor_update
is None or not. Instead, use UpdateOrigin to determine it.
2023-09-29 16:26:29 -07:00
Wilmer Paulino
4156d7c53d
Add anchors coverage to test_revoked_counterparty_commitment_balances 2023-09-29 16:24:45 -07:00
Wilmer Paulino
898a20066c
Add anchors coverage to test_balances_on_local_commitment_htlcs 2023-09-29 16:24:44 -07:00
Wilmer Paulino
ea4b187df4
Add anchors coverage to test_claim_value_force_close 2023-09-29 16:24:44 -07:00
Wilmer Paulino
28f2dac844
Add anchors coverage to chanmon_claim_value_coop_close 2023-09-29 16:24:44 -07:00
Wilmer Paulino
52d76f97fc
Add test util to handle bump HTLC events 2023-09-29 16:24:42 -07:00
Matt Corallo
0930be3304
Fix matching of second-stage HTLC claim in get_htlc_balance
We incorrectly assumed that the descriptor's output index from
second-stage HTLC transaction would always match the HTLC's output index
in the commitment transaction. This doesn't make any sense though, we
need to make sure we map the descriptor to it's corresponding HTLC in
the commitment. Instead, we check that the transaction from which the
descriptor originated from spends the HTLC in question.

Note that pre-anchors, second-stage HTLC transactions are always 1
input-1 output, so previously we would only match if the HTLC was the
first output in the commitment transaction. Post-anchors, they are
malleable, so  we can aggregate multiple HTLC claims into a single
transaction making this even more likely to happen. Unfortunately, we
lacked proper coverage in this area so the bug went unnoticed. To
address this, we aim to extend our existing coverage of
`get_claimable_balances` to anchor outputs channels in the following
commits.
2023-09-29 16:24:39 -07:00
Matt Corallo
e0fe325402
Merge pull request #2629 from jkczyz/2023-09-invreqfailed
Config-guard `Event::InvoiceRequestFailed`
2023-09-29 22:42:50 +00:00
Matt Corallo
620244dc2e
Merge pull request #2605 from wpaulino/anchors-monitor-track-to-remote-script
Use correct to_remote script in counterparty commitments
2023-09-29 22:06:58 +00:00
Jeffrey Czyz
92e5cb6805
Remove unused imports 2023-09-29 15:03:23 -07:00
Jeffrey Czyz
5f58f8d127
Fix build warning for unused method 2023-09-29 15:03:23 -07:00
Jeffrey Czyz
6bd962bc51
Remove an unnecessary enumerate 2023-09-29 15:03:23 -07:00
Jeffrey Czyz
c7219e4683
Config-guard Event::InvoiceRequestFailed
The event cannot be generated publicly, so remove it for now to avoid
users needing to handle it.
2023-09-29 15:03:13 -07:00
Matt Corallo
d007d1b79f
Merge pull request #2628 from wvanlint/fix_multiple_shutdown_results
Fix handling multiple ShutdownResults
2023-09-29 21:25:51 +00:00
Wilmer Paulino
f464aa97c3
Expose witness_script for StaticPaymentOutputDescriptor 2023-09-29 14:22:04 -07:00
Wilmer Paulino
9f3bb7d7a5
Fix incorrect anchors counterparty_payment_script upon deserialization 2023-09-29 14:22:02 -07:00
Matt Corallo
b58f057345
Merge pull request #2622 from wpaulino/funding-and-commitment-tx-confirm-same-block
Avoid early return upon confirmation of channel funding
2023-09-29 21:06:55 +00:00
Matt Corallo
efbaa19a05
Merge pull request #2626 from TheBlueMatt/2023-09-revert-2476
Revert "Remove AvailableBalances::balance_msat"
2023-09-29 21:06:41 +00:00
Wilmer Paulino
3299d88595
Fix off-by-one max witness estimate for P2WPKH StaticPaymentDescriptor
We were not accounting for the extra byte denoting the number of items
in the witness stack.
2023-09-29 13:46:59 -07:00
Wilmer Paulino
fa2a2efef4
Support signing to_remote anchors variant for StaticPaymentOutput
`to_remote` outputs on commitment transactions with anchor outputs have
an additional `1 CSV` constraint on its spending condition,
transitioning away from the previous P2WPKH script to a P2WSH.

Since our `ChannelMonitor` was never updated to track the proper
`to_remote` script on anchor outputs channels, we also missed updating
our signer to handle the new script changes.
2023-09-29 13:46:59 -07:00
Wilmer Paulino
33b745f54e
Use correct to_remote script in counterparty commitments
While our commitment transactions did use the correct `to_remote`
script, the `ChannelMonitor`'s was not as it is tracked separately. This
would lead to users never receiving an `Event::SpendableOutputs` with a
`StaticPaymentOutput` descriptor to claim the funds.

Luckily, any users affected which had channel closures confirmed by a
counterparty commitment just need to replay the closing transaction to
receive the event.
2023-09-29 13:46:56 -07:00
Matt Corallo
955e81086f
Merge pull request #2624 from wpaulino/2609-follow-up
Address 2609 follow-up comments
2023-09-29 20:07:16 +00:00
Willem Van Lint
db79ed07f4 Fix handling multiple ShutdownResults 2023-09-29 12:06:36 -07:00
Matt Corallo
fbc86cb564
Merge pull request #2623 from wpaulino/htlc-claim-receive-preimage-after-close
Claim HTLCs with preimage from currently confirmed commitment
2023-09-29 18:53:44 +00:00
Wilmer Paulino
92fcdd39e1
Avoid early return upon confirmation of channel funding
This early return is only possible if the channel requires a single
confirmation, allowing a `channel_ready` message to go out. This can be
problematic though if a commitment transaction (specifically from the
counterparty, as the channel would be immediately closed if a local
commitment is broadcast) also confirms within the same block. The
`ChannelMonitor` will detect both, but it won't inform the
`ChannelManager` at all. Luckily, while the channel still is considered
open to the `ChannelManager`, the `ChannelMonitor` will reject any
further updates to the channel state.
2023-09-29 11:46:25 -07:00
Matt Corallo
c7c4226e99 Revert "Remove AvailableBalances::balance_msat"
While removing the `balance_msat` field absolutely makes sense -
it is, at best, confusing - we really need a solid replacement for
it before we can do so. While one such replacement is in progress,
it is not complete and we'd like to not block our current release
on its completion.

This reverts commit ef5be580f5.
2023-09-29 18:32:25 +00:00
Elias Rohrer
3a8bf8975e
Test we consider route hints if we are the src of the first hop
Previously, we would only consider route hints if the entry point was
in our first hops or in the network graph. We fixed this by also
considering hints if our own node ID was the first src.

Here, we add test coverage for this behavior.
2023-09-29 20:22:05 +02:00
Elias Rohrer
154cd3c043
Test we prefer first hops over route hints
We previously added logic that would avoid adding superflous candidates
for route hints if we detect that we have a first hop for this channel.

Here we add test coverage that we actually prefer the first hop over the
route hint, but still consider the remaining hints.
2023-09-29 20:22:05 +02:00
Wilmer Paulino
f267a30cc7
Only yield DelayedPaymentOutput descriptors once their delay expires
Otherwise, we could give users a descriptor ahead of time that will
result in an invalid transaction spend/broadcast.
2023-09-29 10:56:48 -07:00
Matt Corallo
5e871a7bfc
Merge pull request #2617 from wpaulino/no-persist-same-channel-update
Avoid persisting on same counterparty's ChannelUpdate
2023-09-29 17:39:49 +00:00
Elias Rohrer
a8fa5a1685
Merge pull request #2591 from TheBlueMatt/2023-09-2562-followups
Doc and comment followups to #2562
2023-09-29 19:08:36 +02:00
Wilmer Paulino
6cf0351462
Note required levels of descendant transactions in get_spendable_outputs
Three levels of descendant transactions starting from the channel's
funding transaction should cover all potential spendable outputs.

The first level covers the commitment transaction.

The second level covers the to_self claims, to_remote claims,
second-stage HTLC claims and justice transactions.

The third levels covers the justice transactions on second-stage HTLCs,
and to_self claims on second-stage HTLCs.
2023-09-29 10:01:21 -07:00
Wilmer Paulino
d82e6ba7a3
Test preimage claim after reorg of counterparty commitment
This test adds coverage for receiving a preimage after seeing a
counterparty commitment confirm, followed by a reorg and the
confirmation of a different commitment instead.

The first test covers the case where a holder commitment confirms after
the counterparty commitment reorg.

The second test covers the case where a previous counterparty commitment
confirms after the latest counterparty commitment reorg.
2023-09-29 09:58:38 -07:00
Wilmer Paulino
89fbbb3ce2
Claim HTLCs with preimage from currently confirmed commitment
We should always claim HTLCs from the currently confirmed commitment,
rather than always claiming from the latest or previous counterparty
commitment if we've seen either confirm onchain at a prior point.
2023-09-29 09:58:35 -07:00
Wilmer Paulino
c8c535412d
Avoid persisting on same counterparty's ChannelUpdate
Some nodes may rebroadcast their `ChannelUpdate` to their counterparty
on every connection establishment, which leads to us doing an additional
persist most of the time when nothing has changed. Now, we'll only
persist if we receive an update that changes anything.
2023-09-29 09:01:46 -07:00