Commit graph

963 commits

Author SHA1 Message Date
Valentine Wallace
0edd645ba8
Link to LSP spec in accept_underpaying_htlcs config 2023-11-07 15:14:27 -05:00
Matt Corallo
5e34bc4404 Add an option to in-place decrypt with ChaCha20Poly1305
In the next commit we'll use this to avoid an allocation when
deserializing messages from the wire.
2023-11-07 18:13:23 +00:00
optout
649129ddab Add Splicing (and Quiescence) wire message definitions 2023-11-07 12:13:58 +01:00
Matt Corallo
e4c6b70e8e Pre-allocate the full Vec prior to serializing as a Vec<u8>
We end up generating a substantial amount of allocations just
doubling `Vec`s when serializing to them, and our
`serialized_length` method is generally rather effecient, so we
just rely on it and allocate correctly up front.
2023-11-07 04:12:30 +00:00
Matt Corallo
c0107c6069 Reduce on-startup heap frag due to network graph map/vec doubling
When we're reading a `NetworkGraph`, we know how many
nodes/channels we are reading, there's no reason not to
pre-allocate the `IndexedMap`'s inner `HashMap` and `Vec`, which we
do here.

This seems to reduce on-startup heap fragmentation with glibc by
something like 100MiB.
2023-11-04 04:00:04 +00:00
Chris Waterson
014a336e59 Add basic async signer tests
Adds a `get_signer` method to the context so that a test can get ahold of the
channel signer. Adds a `set_available` method on the `TestChannelSigner` to
allow a test to enable and disable the signer: when disabled some of the
signer's methods will return `Err` which will typically activate the error
handling case. Adds a `set_channel_signer_available` function on the test
`Node` class to make it easy to enable and disable a specific signer.

Adds a new `async_signer_tests` module:

* Check for asynchronous handling of `funding_created` and `funding_signed`.
* Check that we correctly resume processing after awaiting an asynchronous
  signature for a `commitment_signed` event.
* Verify correct handling during peer disconnect.
* Verify correct handling for inbound zero-conf.
2023-11-01 15:24:20 -07:00
Matt Corallo
a1a2f2abc8
Merge pull request #2667 from wpaulino/random-htlc-holder-sigs-non-anchors
Use sign_holder_htlc_transaction to sign non-anchors holder HTLCs
2023-10-20 22:55:08 +00:00
Wilmer Paulino
b06a652e58
Move HTLCDescriptor to sign module
Now that `HTLCDescriptor` is no longer specific to anchors, it doesn't
make sense for it to live in the `bump_transaction` module anymore.
2023-10-20 15:32:16 -07:00
Wilmer Paulino
aae4e7c0ca
Don't sign holder HTLCs along with holder commitments
`sign_holder_commitment_and_htlcs` never really made sense. Unlike
`sign_counterparty_commitment`, the signatures for holder HTLC
transactions may be required much later than the commitment
transaction's. While it was nice for us to only reach the signer once to
obtain all holder signatures, it's not really ideal anymore as we want
our signatures to be random and not reused.

We no longer return all holder HTLC signatures and instead defer to
obtaining them via `EcdsaChannelSigner::sign_holder_htlc_transaction`.
2023-10-20 15:32:15 -07:00
Matt Corallo
be8797e17a
Merge pull request #2660 from benthecarman/flexible-fee-rate
More flexible fee rate estimates
2023-10-20 17:37:17 +00:00
benthecarman
dd15ab0394
More flexible fee rate estimates 2023-10-20 11:53:52 -05:00
Antonio Yang
31aa48304d impl Display for SocketAddress 2023-10-20 16:15:35 +08:00
valentinewallace
22a0bfc073
Merge pull request #2662 from jkczyz/2023-10-chain-hash
Use `ChainHash` instead of `BlockHash` as applicable
2023-10-17 11:05:45 -04:00
valentinewallace
5fdc770b46
Merge pull request #2665 from TheBlueMatt/2023-10-scanable-test-logs
Make test log lines somewhat more eye-scannable
2023-10-16 15:59:32 -04:00
Jeffrey Czyz
54f96ef944
Use ChainHash instead of BlockHash as applicable
ChainHash is more appropriate for places where an arbitrary BlockHash is
not desirable. This type was introduced in later versions of the bitcoin
crate, thus BlockHash was used instead.

Using ChainHash also makes it easier to check if ChannelManager is
compatible with an Offer.
2023-10-16 13:29:53 -05:00
Matt Corallo
c86cacd29d
Merge pull request #2625 from tnull/2023-09-moar-tests-n-fixes
Improve test coverage of #2575 router fixes
2023-10-15 20:18:56 +00:00
Matt Corallo
ab2117796d Make test log lines somewhat more eye-scannable
When running tests, our log output should be reasonably readable
by developers, but currently it repeats the module twice (via the
module and file name), and then starts the log line at a variable
location.

Instead, we only print the module and then align the start of the
log lines so that the output is much more scannable.
2023-10-15 20:04:35 +00:00
Matt Corallo
0ce1c5a674
Merge pull request #2634 from TheBlueMatt/2023-09-claimable-unwrap
Avoid unwrap'ing `channel_parameters` in to_counterparty signing
2023-10-03 17:12:08 +00:00
Matt Corallo
65569ed5d6 Make InMemorySigner parameter-fetching utilities return Options
In the previous commit we fixed a bug where we were spuriously
(indirectly) `unwrap`ing the `channel_parameters` in
`InMemorySigner`. Here we make such bugs much less likely in the
future by having the utilities which do the `unwrap`ing internally
return `Option`s instead.

This makes the `unwrap`s clear at the callsite.
2023-10-03 04:25:03 +00:00
Matt Corallo
04841acb86
Merge pull request #2595 from TheBlueMatt/2023-09-117-bindings-part1
Various cleanups to make bindings generation simpler
2023-10-03 03:56:46 +00:00
Matt Corallo
6b75fafaf3 Fix new unused variable warning in test_utils.rs 2023-10-01 00:05:01 +00:00
Matt Corallo
34f36d5ffe Drop various bounds on types passed to MonitorUpdatingPersister
The new `MonitorUpdatingPersister` has a few redundant type bounds
(re-specified on functions after having been specified on the
struct itself), which we remove here.

Further, it requires a `Deref<FeeEstimator>` which is `Clone`able.
This is generally fine in rust, but annoying in bindings, so we
simply elide it in favor if a `&Deref<FeeEstimator>`.
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
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
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
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
9f3bb7d7a5
Fix incorrect anchors counterparty_payment_script upon deserialization 2023-09-29 14:22:02 -07:00
Elias Rohrer
5d5d6406aa
Assert equality of route params in tests
Previously we only asserted the `final_value_msat` matches. Looking at
it again we can _of course_ assert the full equality of looked-for and
included route params after all (duh, not sure what I was thinking...).

This cleans up the prior misunderstanding and fixes a bunch of tests
that would now fail otherwise.
2023-09-29 16:49:32 +02:00
Matt Corallo
082a19b2d4
Merge pull request #2612 from TheBlueMatt/2023-09-namespace-split
Refer to top-level persistence namespaces as primary_namespace
2023-09-28 20:37:54 +00:00
Matt Corallo
47e1148283 Update remaining references to primary/secondary namespaces
Update various variables, error strings, and the pending changelog
entry to refer to new namespace terminology.
2023-09-28 18:35:38 +00:00
Matt Corallo
1cb810358d Update storage constants to new PRIMARY/SECONDARY namespace terms 2023-09-28 18:35:38 +00:00
Matt Corallo
6765889423 Rename the persistence sub_namespace to secondary_namespace
With the top-level namespace now called "primary", "secondary"
makes more sense than "sub".
2023-09-28 18:35:38 +00:00
Elias Rohrer
8c99e34b93
Assert query's and route's final_value_msat are equal 2023-09-28 19:45:31 +02:00
Matt Corallo
18ef80f78a Refer to top-level persistence namespaces as primary_namespace
This fixes a bindings build error as `namespace` is a C++ keyword
which cannot be used as an argument, and while this could be fixed
in the bindings rather than here, separating the term `namespace`
between the concept (which refers to the primary and sub
namespaces) and the primary namespace makes the documentation more
readable.
2023-09-28 02:41:51 +00:00
Matt Corallo
910a00e3d0 Use Result<_, io::Error> over io::Result<_>
Personally I've always found the overload of a prelude enum to be
confusing, and never bothered to handle it properly in bindings as
a result. To avoid needing to do so now, we simply move the
newly-introduced `io::Result` usages over to
`Result<_, io::Error>`.
2023-09-28 02:41:51 +00:00
Dom Zippilli
0430d3379a Add MonitorUpdatingPersister
MonitorUpdatingPersister is an implementation of Persister that stores
ChannelMonitorUpdates separately from ChannelMonitors. Its RFC is
in #2545, at https://github.com/orgs/lightningdevkit/discussions/2545.

Co-Authored-By: Elias Rohrer <dev@tnull.de>
2023-09-26 16:30:07 -07:00
Matt Corallo
f254c56585 Add an UnrecoverableError variant to ChannelMonitorUpdateStatus
While there is no great way to handle a true failure to persist a
`ChannelMonitorUpdate`, it is confusing for users for there to be
no error variant at all on an I/O operation.

Thus, here we re-add the error variant removed over the past
handful of commits, but rather than handle it in a truly unsafe
way, we simply panic, optimizing for maximum mutex poisoning to
ensure any future operations fail and return immediately.

In the future, we may consider changing the handling of this to
instead set some "disconnect all peers and fail all operations"
bool to give the user a better chance to shutdown in a semi-orderly
fashion, but there's only so much that can be done in lightning if
we truly cannot persist new updates.
2023-09-21 19:12:31 +00:00
Matt Corallo
23c5308bcb Drop the ChannelMonitorUpdateStatus::PermanentFailure variant
When a `ChannelMonitorUpdate` fails to apply, it generally means
we cannot reach our storage backend. This, in general, is a
critical issue, but is often only a transient issue.

Sadly, users see the failure variant and return it on any I/O
error, resulting in channel force-closures due to transient issues.

Users don't generally expect force-closes in most cases, and
luckily with async `ChannelMonitorUpdate`s supported we don't take
any risk by "delaying" the `ChannelMonitorUpdate` indefinitely.

Thus, here we drop the `PermanentFailure` variant entirely, making
all failures instead be "the update is in progress, but won't ever
complete", which is equivalent if we do not close the channel
automatically.
2023-09-21 19:04:05 +00:00
Matt Corallo
6d5c5ba4bb
Merge pull request #2176 from TheBlueMatt/2023-04-expose-success-prob
Move the historical bucket tracker to 32 unequal sized buckets
2023-09-15 22:38:57 +00:00
Matt Corallo
f130739138 Implement serialization for [u16; 32], DRYing it with [u8; *]
In the next commit we'll need serialization for `[u16; 32]`, which
we add here, unifying it with the `[u8; *]` serialization macro.
2023-09-15 17:20:38 +00:00
Elias Rohrer
9ee9809547
Fix more unused warnings in test_utils 2023-09-14 09:09:27 +02:00
Matt Corallo
4835b1697c Fix various unused warnings in test and regular builds 2023-09-12 16:03:36 +00:00
Elias Rohrer
aeaed62894
Add length check for read ChannelMonitor keys 2023-09-11 10:17:03 +02: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
Elias Rohrer
7a656719af
Add TestStore implementation of KVStore 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
Elias Rohrer
d1405f38bc
Add KVStore interface trait
We upstream the `KVStore` interface trait from LDK Node, which will
replace `KVStorePersister` in the coming commits.

Besides persistence, `KVStore` implementations will also offer to `list`
keys present in a given `namespace` and `read` the stored values.
2023-09-07 22:49:21 +02:00
jbesraa
32a0113fda Fix indent in message_signing.rs 2023-09-06 15:07:25 +03:00
jbesraa
b2d3b94b17 Move zbase32 implementation to base32 file 2023-09-06 15:07:25 +03:00