Matt Corallo [Sun, 15 Jan 2023 23:37:00 +0000 (23:37 +0000)]
Use `ChannelUnavailable` for a peer disconnecting not `MisuseError`
This fixes a crash in the `full_stack_target` fuzz test (found by
Chaincode's generous fuzzing infrastructure!) but ultimately is a
better error code - a peer disconnecting before we can fund a
channel isn't a "misuse error" its an unavailable channel.
Matt Corallo [Fri, 6 Jan 2023 20:11:27 +0000 (20:11 +0000)]
Make fuzz assertions explicit in Cargo.toml
Matt Corallo [Fri, 6 Jan 2023 20:05:07 +0000 (20:05 +0000)]
Do not rely on auto-deref'ing when aaccessing a `Hash{Map,Set}`
In newer versions of `hashbrown` this code would be broken. While
we aren't updating `hashbrown` any time soon (as it requires an
MSRV bump), it is useful to swap for a newer `hashbrown` when
fuzzing, which this makes easier.
Matt Corallo [Fri, 6 Jan 2023 19:53:47 +0000 (19:53 +0000)]
Switch to hashbrown in fuzzing
hashbrown by default uses ahash, which may be a bit faster, but
more importantly, if we upgrade to hashbrown 0.13/ahash 0.8 we can
make it use a constant randomization factor, making fuzzers happier.
Matt Corallo [Fri, 6 Jan 2023 19:52:24 +0000 (19:52 +0000)]
Bump fuzz `afl` dependency to latest upstream version
Matt Corallo [Sun, 15 Jan 2023 07:03:14 +0000 (07:03 +0000)]
Merge pull request #1950 from tnull/2023-01-fix-doc-warnings-and-nits
Fix doc warnings and doc cleanup in `msgs.rs`/`ser.rs`
Matt Corallo [Sun, 15 Jan 2023 04:00:11 +0000 (04:00 +0000)]
Merge pull request #1946 from wpaulino/init-features-user-config
Use UserConfig to determine advertised InitFeatures by ChannelManager
Matt Corallo [Sat, 14 Jan 2023 22:43:26 +0000 (22:43 +0000)]
Merge pull request #1953 from arik-so/2023-01-debug-gossip-heisenbug
Arik Sosman [Sat, 14 Jan 2023 16:22:50 +0000 (08:22 -0800)]
Allow manually passing a timestamp to `channel_failed`. Fixes #1914.
Arik Sosman [Sat, 14 Jan 2023 15:17:12 +0000 (07:17 -0800)]
Add error messages to stale gossip cleanup assertions.
Should help debug #1914.
Wilmer Paulino [Wed, 11 Jan 2023 18:21:29 +0000 (10:21 -0800)]
Use UserConfig to determine advertised InitFeatures by ChannelManager
This is purely a refactor that does not change the InitFeatures
advertised by a ChannelManager. This allows users to configure which
features should be advertised based on the values of `UserConfig`. While
there aren't any existing features currently leveraging this behavior,
it will be used by the upcoming anchors_zero_fee_htlc_tx feature.
The UserConfig dependency on provided_init_features caused most
callsites of the main test methods responsible for opening channels to
be updated. This commit foregos that completely by no longer requiring
the InitFeatures of each side to be provided to these methods. The
methods already require a reference to each node's ChannelManager to
open the channel, so we use that same reference to obtain their
InitFeatures. A way to override such features was required for some
tests, so a new `override_init_features` config option now exists on
the test harness.
Matt Corallo [Sat, 14 Jan 2023 04:59:27 +0000 (04:59 +0000)]
Merge pull request #1930 from arik-so/2022-12-remove-keysinterface
Remove KeysInterface
Elias Rohrer [Fri, 13 Jan 2023 22:02:41 +0000 (16:02 -0600)]
Fix misc. warnings from `--document-private-items`
Elias Rohrer [Fri, 13 Jan 2023 21:54:14 +0000 (15:54 -0600)]
Fix docs and export `impl_tlv_based_enum` variants
Elias Rohrer [Fri, 13 Jan 2023 15:18:34 +0000 (09:18 -0600)]
Fix misc doc warnings.
Elias Rohrer [Fri, 13 Jan 2023 15:18:26 +0000 (09:18 -0600)]
Fix doc warnings and cleanup in `msgs.rs`
Elias Rohrer [Fri, 13 Jan 2023 13:16:18 +0000 (07:16 -0600)]
Fix doc warnings and cleanup in `ser.rs`
Arik Sosman [Fri, 13 Jan 2023 00:10:44 +0000 (16:10 -0800)]
Decouple lifetimes for trait implementations that used to comprise KeysInterface.
Arik Sosman [Tue, 20 Dec 2022 22:46:08 +0000 (14:46 -0800)]
Split up generic parameters that used to comprise KeysInterface.
Arik Sosman [Tue, 20 Dec 2022 22:46:08 +0000 (14:46 -0800)]
Remove KeysInterface trait.
Matt Corallo [Wed, 11 Jan 2023 21:02:25 +0000 (21:02 +0000)]
Merge pull request #1823 from mariocynicys/expose-tlv-macros2
Expose `impl_writeable_tlv_based` macro
Matt Corallo [Tue, 10 Jan 2023 19:19:35 +0000 (19:19 +0000)]
Merge pull request #1507 from ViktorTigerstrom/2022-05-store-channels-per-peer
Store `channels` per-peer
Matt Corallo [Tue, 10 Jan 2023 19:19:25 +0000 (19:19 +0000)]
Merge pull request #1944 from TheBlueMatt/2022-01-lockorder-windows-robust
Make `debug_sync` regex more robust
Matt Corallo [Tue, 10 Jan 2023 17:23:31 +0000 (17:23 +0000)]
Merge pull request #1943 from andrei-21/feature/handle-read-dir-errors
Handle `read_dir()` errors in persister
Matt Corallo [Tue, 10 Jan 2023 06:37:39 +0000 (06:37 +0000)]
Make `debug_sync` regex more robust
On windows the symbol names appear to sometimes be truncated,
which causes the symbol name to not include the `::new` at the end.
This causes the regex to mis-match and track the wrong location
for the mutex construction, leading to bogus lockorder violations.
For example, in testing the following symbol name appeared on
Windows, without the function name itself:
`lightning::debug_sync::RwLock<std::collections::hash::map::HashMap<lightning::chain::transaction::OutPoint,lightning::chain::chainmonitor::MonitorHolder<lightning::util::enforcing_trait_impls::EnforcingSigner>,std::collections::hash::map::RandomState> >::`
Matt Corallo [Tue, 10 Jan 2023 06:34:30 +0000 (06:34 +0000)]
Move tests from debug_sync to a new submodule
This will allow us to change the module regex match in debug_sync
to make it more robust.
Matt Corallo [Tue, 10 Jan 2023 06:29:58 +0000 (06:29 +0000)]
Move `debug_sync` to the new `sync` folder
Matt Corallo [Tue, 10 Jan 2023 06:26:46 +0000 (06:26 +0000)]
Move `no-std` sync implementations to a folder to clean up
Andrei [Tue, 10 Jan 2023 00:00:00 +0000 (00:00 +0000)]
Handle read_dir() errors in persister
Viktor Tigerström [Fri, 6 Jan 2023 23:31:10 +0000 (00:31 +0100)]
Remove the `ChannelManager::channel_state`
Viktor Tigerström [Tue, 3 Jan 2023 09:52:10 +0000 (10:52 +0100)]
Expect `pending_msg_events` to be in random peer order in tests
Viktor Tigerström [Mon, 19 Dec 2022 19:51:07 +0000 (20:51 +0100)]
Store `pending_msg_events` per peer
Viktor Tigerström [Tue, 3 Jan 2023 09:52:41 +0000 (10:52 +0100)]
Use correct node in `test_invalid_upfront_shutdown_script`
Viktor Tigerström [Sat, 10 Dec 2022 22:02:00 +0000 (23:02 +0100)]
Avoid unnecessary looping over all peers' channels
Viktor Tigerström [Sat, 10 Dec 2022 21:20:05 +0000 (22:20 +0100)]
Update `id_to_peer` docs with consistency guarantees info
Viktor Tigerström [Sat, 10 Dec 2022 17:54:01 +0000 (18:54 +0100)]
Remove one tab level when accessing a `peer_state`
Viktor Tigerström [Sat, 10 Dec 2022 17:03:22 +0000 (18:03 +0100)]
Remove unnecessary channel counterparty checks
Viktor Tigerström [Mon, 13 Jun 2022 19:24:51 +0000 (21:24 +0200)]
Add handle unkown peer test
Viktor Tigerström [Tue, 31 May 2022 19:20:55 +0000 (21:20 +0200)]
Add duplicate temporary_channel_id for 2 peers test
Viktor Tigerström [Mon, 6 Jun 2022 21:57:24 +0000 (23:57 +0200)]
Unify failure to query `Channel` error messages
Viktor Tigerström [Thu, 8 Dec 2022 23:59:21 +0000 (00:59 +0100)]
Avoid unnecessary immediate retake `per_peer_state` lock
Viktor Tigerström [Fri, 10 Jun 2022 00:01:36 +0000 (02:01 +0200)]
Remove unnecessary `per_peer_state` branch
After `channels` are now stored in the `per_peer_state`, some logic can
be simplified and extra accessing of the `per_peer_state` can be
removed.
Viktor Tigerström [Sat, 26 Nov 2022 08:02:20 +0000 (09:02 +0100)]
Store channels per peer
Matt Corallo [Mon, 9 Jan 2023 19:35:57 +0000 (19:35 +0000)]
Merge pull request #1941 from andrei-21/feature/rework-unwrap
Rework `unwrap()` call in persistence
Omer Yacine [Wed, 2 Nov 2022 15:32:47 +0000 (17:32 +0200)]
Fix an incorrect assertion in tlv stream encoding
Types must be unique and monotonically increasing (using < instead of <=)
Omer Yacine [Fri, 6 Jan 2023 08:18:26 +0000 (10:18 +0200)]
Expose `impl_writeable_tlv_based` macro
Every exported macro needed to have all the macros used inside it:
1- to be exported as well.
2- be called from the `$crate` namespace so it works in other crates.
Some structs in `lightning::util::ser` needed to be made public as they were used inside the exported macros.
Use the macros like this:
```Rust
lightning::impl_writeable_tlv_based!(...)
```
Matt Corallo [Mon, 9 Jan 2023 16:22:34 +0000 (16:22 +0000)]
Merge pull request #1940 from TheBlueMatt/2023-01-nostd-try-lock
Andrei [Sun, 8 Jan 2023 00:00:00 +0000 (00:00 +0000)]
Rework unwrap() call in persistence
Matt Corallo [Sat, 7 Jan 2023 20:11:05 +0000 (20:11 +0000)]
Make the no-std `RwLockGuard` `try_lock` actually try
There doesn't appear to be any reason to have `try_lock` fail, and
future work shouldn't need to check for std to use `try_lock`.
Viktor Tigerström [Thu, 8 Dec 2022 21:40:54 +0000 (22:40 +0100)]
Add `try_write` function to `FairRwLock`
Viktor Tigerström [Sat, 26 Nov 2022 07:47:11 +0000 (08:47 +0100)]
Add `ChannelManager::PeerState::latest_features` docs
Viktor Tigerström [Fri, 27 May 2022 18:14:19 +0000 (20:14 +0200)]
Add `counterparty_node` to test macros
valentinewallace [Fri, 6 Jan 2023 16:07:17 +0000 (11:07 -0500)]
Merge pull request #1927 from jkczyz/2022-12-invoice-rework
Pre-work for BOLT 12 invoices
Jeffrey Czyz [Fri, 16 Dec 2022 20:06:33 +0000 (14:06 -0600)]
Define blinded hop features for use in BOLT 12
BOLT 12 invoices may contain blinded_payinfo for each hop in a blinded
path. Each blinded_payinfo contains features, whose length must be
encoded since there may be multiple hops.
Note these features are also needed in the BOLT 4 encrypted_data_tlv
stream. But since they are a single TLV record, the length must *not* be
encoded there.
Jeffrey Czyz [Thu, 15 Dec 2022 03:18:13 +0000 (21:18 -0600)]
Define BOLT 12 invoice features with MPP support
Jeffrey Czyz [Fri, 16 Dec 2022 19:35:50 +0000 (13:35 -0600)]
Use explicit WithoutLength for BOLT 12 features
Most BOLT 12 features are used as the value of a TLV record and thus
don't use an explicit length. One exception is the features inside the
blinded payinfo subtype since the TLV record contains a list of them.
However, these features are also used in the BOLT 4 encrypted_data_tlv
TLV stream as a single record, where the length is implicit.
Implement Readable and Writeable for Features wrapped in WithoutLength
such that either serialization can be used where required.
Jeffrey Czyz [Wed, 14 Dec 2022 23:51:04 +0000 (17:51 -0600)]
Remove Option from InvoiceRequest::signature
Refunds don't have signatures and now use their own abstraction.
Therefore, signatures can be required in invoice requests as per the
spec.
Jeffrey Czyz [Tue, 20 Dec 2022 04:33:01 +0000 (22:33 -0600)]
Correct documentation about Refund::payer_id
The docs incorrectly stated that Refund::payer_id is for signing, where
it is only used for identifying a node if Refund::paths is not present.
Matt Corallo [Thu, 5 Jan 2023 22:09:35 +0000 (22:09 +0000)]
Merge pull request #1812 from valentinewallace/2022-10-chanman-router-param
Parameterize `ChannelManager` by a `Router`
Valentine Wallace [Wed, 21 Dec 2022 20:45:57 +0000 (15:45 -0500)]
Test utils: allow queueing >2 persistence update results
Valentine Wallace [Fri, 30 Dec 2022 23:50:26 +0000 (18:50 -0500)]
ser_macros: rename check_tlv_order
.. to disamgibutate from check_encoded_tlv_order
Matt Corallo [Thu, 20 Oct 2022 19:41:38 +0000 (19:41 +0000)]
Provide a `static_value` TLV field serialization type
This is useful in the type serialization definition macros to avoid
writing or reading a field at all, simply using a static value on
each reload.
Valentine Wallace [Thu, 22 Dec 2022 01:43:02 +0000 (20:43 -0500)]
Parameterize Simple*ChannelManager with DefaultRouter and ProbScorer
Valentine Wallace [Mon, 19 Dec 2022 05:26:58 +0000 (00:26 -0500)]
Take in-flight HTLCs by reference in Router::find_route
Useful in upcoming work when for payment retries.
Valentine Wallace [Tue, 29 Nov 2022 20:16:47 +0000 (15:16 -0500)]
Implement routing against the netgraph in tests
Matt Corallo [Tue, 3 Jan 2023 22:02:04 +0000 (22:02 +0000)]
Merge pull request #1935 from TheBlueMatt/2022-12-no-non-time-panic
Ensure derive_channel_keys doesn't panic if per-run seed is high
Valentine Wallace [Fri, 28 Oct 2022 15:31:24 +0000 (11:31 -0400)]
Parameterize ChannelManager by a Router trait
This will be used in upcoming work to fetch routes on-the-fly for payment
retries, which will no longer be the responsibility of InvoicePayer.
Matt Corallo [Wed, 28 Dec 2022 18:12:29 +0000 (18:12 +0000)]
Ensure the per-channel key derivation counter doesn't role over
Previously, the `derive_channel_keys` derivation ID asserted that
the high bit of the per-channel key derivation counter doesn't
role over as it checked the 31st bit was zero. As we no longer do
that, we should ensure the assertion in `generate_channel_keys_id`
asserts that we don't role over.
Matt Corallo [Tue, 3 Jan 2023 17:06:37 +0000 (17:06 +0000)]
Merge pull request #1934 from TheBlueMatt/2022-12-113-bindings-upstream
Trivial Bindings Updates
Matt Corallo [Tue, 3 Jan 2023 16:43:18 +0000 (16:43 +0000)]
Merge pull request #1936 from TheBlueMatt/2023-01-in-flight-clone
`#[derive(Clone)]` for `InFlightHtlcs`
Matt Corallo [Mon, 2 Jan 2023 01:07:59 +0000 (01:07 +0000)]
`#[derive(Clone)]` for `InFlightHtlcs`
This is useful for bindings, and generally isn't a bad thing for
users to have access to.
Matt Corallo [Wed, 28 Dec 2022 17:44:33 +0000 (17:44 +0000)]
Ensure `derive_channel_keys` doesn't panic if per-run seed is high
b04d1b868fe28bea2e4c711e6e6d2470d2b98d77 changed the way we
calculate the `channel_keys_id` to include the 128-bit
`user_channel_id` as well, shifting the counter up four bytes and
the `starting_time_nanos` field up into the second four bytes.
In `derive_channel_keys` we hash the full `channel_keys_id` with an
HD-derived key from our master seed. Previously, that key was
derived with an index of the per-restart counter, re-calculated by
pulling the second four bytes out of the `user_channel_id`. Because
the `channel_keys_id` fields were shifted up four bytes, that is
now a reference to the `starting_time_nanos` value. This should be
fine, the derivation doesn't really add any value here, its all
being hashed anyway, except that derivation IDs must be below 2^31.
This implies that we panic if the user passes a
`starting_time_nanos` which has the high bit set. For those using
the nanosecond part of the current time this isn't an issue - the
value cannot exceed 1_000_000, which does not have the high bit
set, however, some users may use some other per-run seed.
Thus, here we simply drop the high bit from the seed, ensuring we
don't panic. Note that this is backwards compatible as it only
changes the key derivation in cases where we previously panicked.
Ideally we'd drop the derivation entirely, but that would break
backwards compatibility of key derivation.
Matt Corallo [Fri, 23 Dec 2022 20:44:24 +0000 (20:44 +0000)]
No-export `&self` methods on non-cloneable enum(s)
Specifically, `OnionMessageContents` is a non-cloneable enum, which
isn't stored opaque so we cannot call `&self` methods on it.
Because its methods aren't critical to the API for now, we simply
no-export them rather than trying to work out an alternative
approach.
Matt Corallo [Thu, 22 Dec 2022 21:58:53 +0000 (21:58 +0000)]
Store an owned `Score` in `ScorerAccountingForInFlightHtlcs`
`ScorerAccountingForInFlightHtlcs` generally stores a `Score`
reference generated by calling `LockableScore::lock`, which
actually returns an arbitrary `Score`. Given `Score` is implemented
directly on lock types, it makes sense to simply hold a fully owned
`Score` in `ScorerAccountingForInFlightHtlcs` rather than a mutable
reference to one.
Matt Corallo [Wed, 21 Dec 2022 23:08:58 +0000 (23:08 +0000)]
Merge pull request #1929 from valentinewallace/2022-12-outbound-payment-mod-followup
Outbound payment module follow-up
Valentine Wallace [Tue, 20 Dec 2022 23:20:53 +0000 (18:20 -0500)]
outbound_payment: put method signature closing paren on next line
in long method signatures
Arik [Wed, 21 Dec 2022 19:05:09 +0000 (11:05 -0800)]
Merge pull request #1931 from TheBlueMatt/2022-12-1910-followups
Trivial #1910 Followups
Matt Corallo [Wed, 21 Dec 2022 16:39:37 +0000 (16:39 +0000)]
Fix capitalization broken in
9d7bb73b599a7a9d8468a2f0c54d28f0ce6cf5
9d7bb73b599a7a9d8468a2f0c54d28f0ce6cf543 broke some capitalization
in docs for `sign_invoice`, which we fix here as well as taking
this opportunity to clean up the `sign_invoice` docs more
generally.
Matt Corallo [Wed, 21 Dec 2022 16:38:28 +0000 (16:38 +0000)]
Clean up use ordering introduced in
9d7bb73b599a7a9d8468a2f0c54d28f
9d7bb73b599a7a9d8468a2f0c54d28f0ce6cf543 moved some code around
unnecessarily, which we fix here.
Valentine Wallace [Tue, 20 Dec 2022 23:19:22 +0000 (18:19 -0500)]
Fix cfg(test) indentation
Valentine Wallace [Tue, 20 Dec 2022 23:18:17 +0000 (18:18 -0500)]
Make add_new_pending_payment private to module
And expose it in testing only, for safety
valentinewallace [Wed, 21 Dec 2022 00:31:16 +0000 (19:31 -0500)]
Merge pull request #1928 from valentinewallace/2022-12-fix-main
Fix `main` build
Valentine Wallace [Tue, 20 Dec 2022 22:55:06 +0000 (17:55 -0500)]
Fix main build
Matt Corallo [Tue, 20 Dec 2022 22:19:43 +0000 (22:19 +0000)]
Merge pull request #1910 from arik-so/2022-12-keys-interface-name-split
Split KeysInterface into EntropySource, NodeSigner, and SignerProvider
valentinewallace [Tue, 20 Dec 2022 20:40:48 +0000 (15:40 -0500)]
Merge pull request #1923 from valentinewallace/2022-12-outbound-payment-mod
Abstract `ChannelManager` outbound payment logic
Arik Sosman [Thu, 8 Dec 2022 23:40:54 +0000 (15:40 -0800)]
Split out KeysInterface into EntropySource, NodeSigner, and SignerProvider.
Valentine Wallace [Mon, 19 Dec 2022 01:34:34 +0000 (20:34 -0500)]
Rename send_payment and retry_payment for retries
Once ChannelManager supports payment retries, it will make more sense for its
current send_payment method to be named send_payment_with_route because
retrying should be the default. Here we get a head start on this by making the
rename in outbound_payment, but not changing the public interface yet.
Valentine Wallace [Sun, 18 Dec 2022 23:28:01 +0000 (18:28 -0500)]
Reduce visibility of outbound payment methods
Valentine Wallace [Mon, 19 Dec 2022 20:30:16 +0000 (15:30 -0500)]
Start parameters on a newline if they don't fit
Separating out this commit to keep the main refactor move-only
Valentine Wallace [Mon, 19 Dec 2022 20:27:29 +0000 (15:27 -0500)]
Remove unnecessary mut in finalize_claims
Valentine Wallace [Sun, 18 Dec 2022 18:28:47 +0000 (13:28 -0500)]
Swap pending_outbound_payments for OutboundPayments struct
This allows us to move a lot of outbound payment logic out of ChannelManager
and into the new outbound_payment module, and helps avoid growing
ChannelManager when we add retry logic to it in upcoming work.
Valentine Wallace [Fri, 16 Dec 2022 21:05:12 +0000 (16:05 -0500)]
Move PaymentSendFailure into outbound_payment module
And re-export it in channelmanager.rs so it can remain public
Valentine Wallace [Fri, 16 Dec 2022 20:32:52 +0000 (15:32 -0500)]
Move PendingOutboundPayment to new outbound_payment module
We want to move all outbound payment-related things to this new module, to help
break up ChannelManager so future payment retries work doesn't increase the
size of ChannelManager.
Matt Corallo [Mon, 19 Dec 2022 16:31:30 +0000 (16:31 +0000)]
Merge pull request #1922 from wpaulino/avoid-remaining-redundant-commitment-broadcasts
Avoid redundant broadcast of local commitment transaction
Matt Corallo [Fri, 16 Dec 2022 21:45:34 +0000 (21:45 +0000)]
Merge pull request #1908 from jkczyz/2022-11-refund
BOLT 12 refund encoding and building
Wilmer Paulino [Tue, 13 Dec 2022 03:00:06 +0000 (19:00 -0800)]
Avoid redundant broadcast of local commitment transaction
This change follows the rationale of commit
62236c7 and addresses the
last remaining redundant local commitment broadcast.
There's no need to broadcast our local commitment transaction if we've
already seen a confirmed one as it'll be immediately rejected as a
duplicate/conflict.
This will also help prevent dispatching spurious events for bumping
commitment and HTLC transactions through anchor outputs since the
dispatch for said events follows the same flow as our usual commitment
broadcast.
Matt Corallo [Fri, 16 Dec 2022 18:45:09 +0000 (18:45 +0000)]
Merge pull request #1920 from TheBlueMatt/2022-12-rel-date
Update release date on 0.0.113 in changelog
Matt Corallo [Fri, 16 Dec 2022 18:29:09 +0000 (18:29 +0000)]
Merge pull request #1903 from TheBlueMatt/2022-12-1867-followups
Clarify docs on `provide_channel_parameters`
Matt Corallo [Fri, 16 Dec 2022 15:57:11 +0000 (15:57 +0000)]
Update release date on 0.0.113 in changelog
Arik [Fri, 16 Dec 2022 05:37:58 +0000 (21:37 -0800)]
Merge pull request #1917 from TheBlueMatt/2022-12-0.0.113
Cut 0.0.113