Commit graph

779 commits

Author SHA1 Message Date
Matt Corallo
bc1c026712
Merge pull request #3210 from tcharding/07-31-rm-hex-dep
Remove explicit dependency on hex-conservative
2024-08-12 17:11:56 +00:00
Tobin C. Harding
eac1b87e65
Use bitcoin::hex instead of bitcoin::hashes::hex
Use the `hex-conservative` crate directly from `bitcoin` instead of from
`hashes`. Although it makes no real difference it is slightly more clear
and more terse.
2024-08-09 08:20:15 +10:00
Elias Rohrer
c1c133ccda
Merge pull request #3230 from TheBlueMatt/2024-08-old-doc-tweaks
Minor doc tweaks to `MonitorHolder`
2024-08-08 09:17:27 +02:00
Tobin C. Harding
e9b20cee43
Do not use bitcoin::blockdata
The `rust-bitcoin` project is working towards making the public API
separate from the directory structure; eventually the
`bitcoin::blockdata` will go away, to make maintenance easier here stop
using the `blockdata` module.

Do not run the formatter, so as to make review easier. This patch was
created mechanically using:

search-and-replace bitcoin::blockdata bitcoin

and having defined

```bash
search-and-replace () {
        if (($# != 2))
        then
                echo "Usage: $0 <this> <that>"
                return
        fi
        local this="$1"
        local that="$2"
        for file in $(git grep -l "$this")
        do
                perl -pi -e "s/$this/$that/g" "$file"
        done
}
```
2024-08-08 07:13:26 +10:00
Matt Corallo
7a42d8e4fe Minor doc tweaks to MonitorHolder
036c31c9d0 introduced some minor doc
changes but failed to imrpove the docs that is was changing fully
which this does. Suggested by @tnull in review.
2024-08-07 14:31:01 +00:00
Matt Corallo
753a7ac8f2 Make send_payment_with_route take Route by value
Now that `ChannelManager::send_payment_with_route` is deprecated,
we don't care too much about making it as effecient as possible, so
there's not much cost to making it take `Route` by value. This
avoids bindings being unsure if the by-reference `Route` passed
needs to outlive the `ChannelManager` itself or if it only needs to
outlive the method call, creating some call overhead by forcing a
`Route::clone`, but avoiding a memory leak.
2024-08-04 18:08:49 +00:00
Matt Corallo
036c31c9d0 Ensure ChannelMonitorUpdates are ordered with full monitor writes
When we update a channel, then while connecting a block persist a
full `ChannelMonitor` prior to persisting the
`ChannelMonitorUpdate`, users can end up seeing a full
`ChannelMonitor` with a given `latest_update_id` prior to seeing
the `ChannelMonitorUpdate` with the same `update_id`. This
could cause users to have a full `ChannelMonitor` on disk as well
as a `ChannelMonitorUpdate` which was already applied. While this
isn't an issue for the LDK-provided update-based `Persist`, its
somewhat surprising for users so we avoid it.
2024-07-20 23:05:46 +00:00
Elias Rohrer
018908fe9e
Make event handling fallible
Previously, we would require our users to handle all events
successfully inline or panic will trying to do so. If they would exit
the `EventHandler` any other way we'd forget about the event and
wouldn't replay them after restart.

Here, we implement fallible event handling, allowing the user to return
`Err(())` which signals to our event providers they should abort event
processing and replay any unhandled events later (i.e., in the next
invocation).
2024-07-18 15:54:21 +02:00
Matt Corallo
72f883e0a1 Make impl_writeable_tlv_based_enum* actually upgradable
In cc78b77c71 it was discovered that
`impl_writeable_tlv_based_enum_upgradable` wasn't actually
upgradable - tuple variants weren't written with length-prefixes,
causing downgrades with new tuple variants to be unreadable by
older clients as they wouldn't know where to stop reading.

This was fixed by simply assuming that any new variants will be
non-tuple variants with a length prefix, but no code write-side
changes were made, allowing new code to freely continue to use the
broken tuple-variant serialization.

Here we address this be defining yet more serialization macros
which aren't broken, and convert existing usage of the existing
macros using non-length-prefixed tuple variants to renamed
`*_legacy` macros.

Note that this changes the serialization format of
`impl_writeable_tlv_based_enum[_upgradable]` when tuple fields are
written, and as such deliberately changes the call semantics for
such tuples.

Only the serialization format of `MessageContext` is changed here
which is fine as it has not yet reached a release of LDK.
2024-07-17 15:02:13 +00:00
Matt Corallo
07d991c82f
Merge pull request #2966 from G8XSU/2647-distribute
Optimize ChannelMonitor persistence on block connections.
2024-06-20 09:51:54 -07:00
G8XSU
bf28957f6d
Optimize ChannelMonitor persistence on block connections.
Currently, every block connection triggers the persistence of all
ChannelMonitors with an updated best_block. This approach poses
challenges for large node operators managing thousands of channels.
Furthermore, it leads to a thundering herd problem
(https://en.wikipedia.org/wiki/Thundering_herd_problem), overwhelming
the storage with simultaneous requests.

To address this issue, we now persist ChannelMonitors at a
regular cadence, spreading their persistence across blocks to
mitigate spikes in write operations.

Outcome: After doing this, Ldk's IO footprint should be reduced
by ~50 times. The processing time required to sync each block
will be significantly reduced, particularly for nodes with 1000s
of channels, as write latency plays a significant role in this process.
As a result, the Node/ChainMonitor will be blocked for a shorter
duration, leading to further efficiency gains.
2024-06-19 00:04:23 -07:00
Alec Chen
21eeca4add Remove global availability logic for testing async signing 2024-06-17 16:34:56 -07:00
Alec Chen
e8939e26bc Allow toggling specific signing methods in test channel signer 2024-06-17 16:32:06 -07:00
Matt Corallo
b8cdde8af6
Merge pull request #3107 from mhrheaume/mhr/closure_reason_abandoned
Updated `ClosureReason::HolderForceClosed` with whether txn was broadcasted.
2024-06-11 11:55:11 -07:00
Matthew Rheaume
808d814a76 Updated ClosureReason::HolderForceClosed with broadcasted txn. 2024-06-10 12:09:24 -07:00
Arik
1e49c4a671
Merge pull request #3096 from alecchendev/2024-06-drop-one-signer-call
Cache commitment point on ExternalHTLCClaim to drop a signer call
2024-06-07 09:26:39 -07:00
Alec Chen
4c1638c55e Cache commitment point on ExternalHTLCClaim to drop a signer call 2024-06-05 16:10:12 -05:00
Matt Corallo
8880b552cc
Merge pull request #3081 from G8XSU/2024-05-08-claimable-persist-3049-outputs
Watch all outputs irrespective of claimable outpoints
2024-06-04 14:02:41 -07:00
Matt Corallo
2d6d5cc86f Move the public path for channel_state types to their new path 2024-06-04 14:21:08 +00:00
G8XSU
149fa129fe
Watch all outputs irrespective of claimable outpoints.
This removes dependency of watched_outputs from
per_commitment_claimable_outpoints, it is required since we will
no longer have direct access to per_commitment_claimable_outpoints
once we start publishing PersistClaimInfo as part of #3049.
2024-06-03 11:53:47 -07:00
Matt Corallo
73263348ba
Merge pull request #3057 from G8XSU/2024-05-08-claimable-persist-3049
Minimize reads to counterparty_claimable_outpoints
2024-06-03 09:24:57 -07:00
G8XSU
1690c66396
Minimize reads to counterparty_claimable_outpoints
Reads related to current/previous commitment_tx should be explicit
and reads related to older commitment_txs should be minimized.
2024-05-30 09:49:26 -07:00
Jiri Jakes
a8bd4c097f
Upgrade rust-bitcoin to 0.31 2024-05-30 18:35:29 +08:00
valentinewallace
1237abffa7
Merge pull request #3036 from TheBlueMatt/2024-05-filter-color
Provide more color in filter registration methods
2024-05-14 16:23:30 -07:00
Matt Corallo
3fc3166b28 Skip BestBlock::new in bindings as we already have one 2024-05-13 18:55:22 +00:00
Jeffrey Czyz
efc75794f4
Remove WriteableEcdsaChannelSigner trait
WriteableEcdsaChannelSigner is no longer needed now that
EcdsaChannelSigner isn't written in OnchainTxHandler.
2024-05-10 17:17:41 -05:00
Jeffrey Czyz
ae98eccfa9
Stop writing EcdsaChannelSigner
EcdsaChannelSigner is no longer deserialized as of version 0.0.113 and
downgrades before version 0.0.113 are no longer supported as of version
0.0.119.
2024-05-10 17:17:34 -05:00
Matt Corallo
0ffa4b3579
Merge pull request #2930 from jbesraa/Add-PaymentHash-to-Record
Add `PaymentHash` to `Record`
2024-05-10 09:55:55 -07:00
Matt Corallo
33b9ba558c
Merge pull request #3041 from G8XSU/followup-2957
Followups to #2957
2024-05-09 09:47:41 -07:00
jbesraa
fe7f548ebb
Add payment_hash to WithChannelMonitor 2024-05-09 11:59:39 +03:00
esraa
3fb329b004
Add PaymentHash to Record
Adding the `payment_hash` to `Record` so we are able to track it
    in logs.
2024-05-09 11:57:53 +03:00
Matt Corallo
28d85af955 Fix the full_stack_target breakage test and doc feerate requests
When we added the additional deust exposure checks in
702196819e6445048b803574fcacef77d5ce8c9c we added several
additional feerate fetches which broke the `full_stack_target`
change-detection test.

This updates the hard-coded test to support the new feerate fetches
and also includes a comment on `FeeEstimator` to indicate that
users really need to be caching feerates as otherwise they'll slow
us down.
2024-05-07 16:51:38 +00:00
Gursharan Singh
8861a9acfa
Stop tracking chain_sync_monitor_persistences in TestPersister 2024-05-06 13:00:52 -07:00
Gursharan Singh
7cd6030886
Make ChannelMonitor chain-sync log a trace log 2024-05-06 12:55:28 -07:00
Gursharan Singh
a5933ae248
Minor Doc fixes after #2957 2024-05-06 12:55:19 -07:00
Matt Corallo
b8d4ac1371
Merge pull request #2957 from G8XSU/pause-events
Don't pause events for chainsync persistence
2024-05-06 12:08:10 -07:00
Matt Corallo
57644f6a81 Provide more color in filter registration methods
A few years ago we had repeated user confusion dealing with the
`Filter` methods and exactly how they differ. Here we try to add a
bit more color in several ways as suggested by users in a few
places - listing examples of why the methods are used as well as
ensuring its clearly communicated that not all parameters need be
used.

Fixes #1069
2024-05-05 19:52:58 +00:00
Matt Corallo
37c431ad68
Merge pull request #3035 from TheBlueMatt/2024-04-upstream-123-bindings 2024-05-03 17:55:25 -07:00
Matt Corallo
021979b5dd Wake background-processor from ChainMonitor on new blocks
When we receive a new block we may generate
`Event::SpendableOutputs` in `ChannelMonitor`s which then need to
be processed by the background processor. While it will do so
eventually when its normal loop goes around, this may cause user
tests to be delayed in finding events, so we should notify the BP
immediately to wake it on new blocks.

We implement that here, unconditionally notifying the
`background-processor` whenever we receive a new block or confirmed
transactions.
2024-05-01 19:42:24 +00:00
Matt Corallo
e818c4b13f Move [u8; 32] wrapper types to a common module
The `PaymentHash`, `PaymentSecret`, `PaymentPreimage`, and
`ChannelId` types are all small wrappers around `[u8; 32]` and are
used throughout the codebase but were defined in the top-level
`ln/mod.rs` file and the relatively sparsely-populated
`ln/channel_id.rs` file.

Here we move them to a common `types` module and go ahead and
update all our in-crate `use` statements to refer to the new
module for bindings. We do, however, leave a `pub use` alias for
the old paths to avoid upgrade hassle for users.
2024-05-01 19:01:40 +00:00
Gursharan Singh
4d5de1fe61
Remove ChainMonitor::sync_persistence_id
It was used earlier for generating unique MonitorUpdateId for
UpdateOrigin::ChainSync monitor updates.
2024-04-26 20:29:02 -07:00
Gursharan Singh
c1125f00b3
Remove MonitorUpdateId from persist trait
MonitorUpdateId was an opaque abstraction for id's generated by
UpdateOrigin:Offchain and UpdateOrigin::ChainSync monitor updates.
It was mainly needed to map calls made to
ChainMonitor::channel_monitor_updated. We no longer track
UpdateOrigin::ChainSync MonitorUpdates and can directly use
ChannelMonitor::get_latest_update_id() for tracking
UpdateOrigin::Offchain monitor updates.
2024-04-26 20:28:55 -07:00
Gursharan Singh
7de602a38a
Stop tracking MonitorUpdates from ChainSync in pending_monitor_updates
We no longer need to track them since we no longer hold events for
pending MonitorUpdates resulting from ChainSync.
2024-04-26 16:06:44 -07:00
Gursharan Singh
e084ab26e1
Stop storing last_chain_persist_height
We only used to store last_chain_persist_height to release
events held for more than LATENCY_GRACE_PERIOD_BLOCKS due to
pending monitor update with UpdateOrigin::ChainSync. Since we no
longer pause events for ChainSync persistence, we no longer need to
store last_chain_persist_height.
2024-04-26 16:02:20 -07:00
Gursharan Singh
cb86399f2e
Don't pause events for chainsync persistence
We used to wait on ChannelMonitor persistence to avoid
duplicate payment events. But this can still happen in cases where
ChannelMonitor handed the event to ChannelManager and we did not persist
ChannelManager after event handling.
It is expected to receive payment duplicate events and clients should handle these
events in an idempotent manner. Removing this hold-up of events simplifies
the logic and makes it easier to not persist ChannelMonitors on every block connect.
2024-04-26 14:37:41 -07:00
Gursharan Singh
8701b1bbe3
Merge pull request #3003 from TheBlueMatt/2024-04-2964-followups
#2964 Followups
2024-04-25 13:19:09 -07:00
Gursharan Singh
d25d55a682
Merge pull request #2990 from TheBlueMatt/2024-04-log-in-flights
Log pending in-flight updates when we are missing a monitor
2024-04-22 10:29:35 -07:00
Matt Corallo
fd0c3e4579 Log when a ChannelMonitor's claimable balances set goes empty 2024-04-22 12:24:00 +00:00
Matt Corallo
93e77632d6 Debug-log monitor update starts and completions in ChainMonitor
When a `ChannelMonitor[Update]` persistence completes, we rely on
logging in `ChannelManager` to hear about it. However, this won't
happen at all if there's still pending updates as no `MonitorEvent`
will be generated.

Thus, here, we add logging directly in `ChainMonitor`, ensuring we
can deduce when individual updates completed from debug logs.
2024-04-22 12:21:33 +00:00
Wilmer Paulino
2c0fcf21f2
Merge pull request #2761 from yellowred/self_sufficient_psbt
Implement PSBT fields that were missing for a Signer
2024-04-18 17:45:56 -07:00