Alec Chen [Wed, 25 Jan 2023 18:27:59 +0000 (12:27 -0600)]
Add FailureCode enum and ChannelManager::fail_htlc_backwards_with_reason
FailureCode is used to specify which error code and data to send
to peers when failing back an HTLC.
ChannelManager::fail_htlc_backwards_with_reason
allows a user to specify the error code and
corresponding data to send to peers when failing back an HTLC.
This function is mentioned in Event::PaymentClaimable docs.
ChannelManager::get_htlc_fail_reason_from_failure_code was also
added to assist with this function.
Valentine Wallace [Tue, 24 Jan 2023 03:45:59 +0000 (22:45 -0500)]
Disambiguate send_payment_internal from pay_internal
Valentine Wallace [Wed, 4 Jan 2023 23:32:12 +0000 (18:32 -0500)]
Payment retries: copy tests from InvoicePayer
As part of migrating payment retries from InvoicePayer to ChannelManager,
several tests don't need a rewrite and can be pretty much copied and pasted.
Valentine Wallace [Mon, 19 Dec 2022 05:38:54 +0000 (00:38 -0500)]
Test ChannelManager automatic retries
Valentine Wallace [Mon, 19 Dec 2022 05:19:47 +0000 (00:19 -0500)]
Support sending payments with a retry strategy in ChannelManager
Valentine Wallace [Sat, 7 Jan 2023 00:39:40 +0000 (19:39 -0500)]
Retry HTLCs in process_pending_htlc_forwards
Valentine Wallace [Mon, 19 Dec 2022 04:29:45 +0000 (23:29 -0500)]
Remove AllPathsFailed outbounds at send_payment_internal callsites instead
This makes it easier to retry payments if all paths fail on initial send, in
in which case we'll want to hold off on removing the pending payment
Valentine Wallace [Fri, 6 Jan 2023 23:39:51 +0000 (18:39 -0500)]
Generate PendingHTLCsForwardable upon retryable payment
Valentine Wallace [Tue, 24 Jan 2023 19:26:57 +0000 (14:26 -0500)]
Decode onion fail outside of outbound_payments lock
It's not ideal to do all this computation while the lock is held. We also want
to decode the failure *before* taking the lock, so we can store the failed scid
in the relevant outbound for retry in the next commit(s).
Valentine Wallace [Sun, 18 Dec 2022 23:22:56 +0000 (18:22 -0500)]
Store retry data in PendingOutboundPayment::Retryable
Used in upcoming commit(s) to automatically retry HTLCs in ChannelManager
Matt Corallo [Wed, 25 Jan 2023 17:42:20 +0000 (17:42 +0000)]
Clean up `compute_fees` and add a saturating variant
Often when we call `compute_fees` we really just want it to
saturate and we deal with `u64::max_value` later. In that case,
we're much better off doing the saturating in the `compute_fees` as
it can use CMOVs rather than branching at each step and then
`unwrap_or`ing at the callsite.
Matt Corallo [Thu, 19 Jan 2023 20:24:22 +0000 (20:24 +0000)]
Add a fuzzer to check that `IndexedMap` is equivalent to `BTreeMap`
Matt Corallo [Thu, 19 Jan 2023 17:59:10 +0000 (17:59 +0000)]
Swap `IndexedMap` implementation for a `HashMap`+B-Tree
Our network graph has to be iterable in a deterministic order and
with the ability to iterate over a specific range. Thus,
historically, we've used a `BTreeMap` to do the iteration. This is
fine, except our map needs to also provide high performance lookups
in order to make route-finding fast. Sadly, `BTreeMap`s are quite
slow due to the branching penalty.
Here we replace the implementation of our `IndexedMap` with a
`HashMap` to store the elements itself and a `BTreeSet` to store
the keys set in sorted order for iteration.
As of this commit on the same hardware as the above few commits,
the benchmark results are:
```
test routing::router::benches::generate_mpp_routes_with_probabilistic_scorer ... bench: 109,544,993 ns/iter (+/- 27,553,574)
test routing::router::benches::generate_mpp_routes_with_zero_penalty_scorer ... bench: 81,164,590 ns/iter (+/- 55,422,930)
test routing::router::benches::generate_routes_with_probabilistic_scorer ... bench: 34,726,569 ns/iter (+/- 9,646,345)
test routing::router::benches::generate_routes_with_zero_penalty_scorer ... bench: 22,772,355 ns/iter (+/- 9,574,418)
```
Matt Corallo [Tue, 25 Oct 2022 03:50:07 +0000 (03:50 +0000)]
Add a new `IndexedMap` type and use it in network graph storage
Our network graph has to be iterable in a deterministic order and
with the ability to iterate over a specific range. Thus,
historically, we've used a `BTreeMap` to do the iteration. This is
fine, except our map needs to also provide high performance lookups
in order to make route-finding fast. Sadly, `BTreeMap`s are quite
slow due to the branching penalty.
Here we replace the `BTreeMap`s in the scorer with a dummy wrapper.
In the next commit the internals thereof will be replaced with a
`HashMap`-based implementation.
Matt Corallo [Tue, 25 Oct 2022 03:15:03 +0000 (03:15 +0000)]
Drop A* implementation in the router for simple Dijkstra's
As evidenced by the previous commit, it appears our A* router
does worse than a more naive approach. This isn't super surpsising,
as the A* heuristic calculation requires a map lookup, which is
relatively expensive.
```
test routing::router::benches::generate_mpp_routes_with_probabilistic_scorer ... bench: 169,991,943 ns/iter (+/- 30,838,048)
test routing::router::benches::generate_mpp_routes_with_zero_penalty_scorer ... bench: 122,144,987 ns/iter (+/- 61,708,911)
test routing::router::benches::generate_routes_with_probabilistic_scorer ... bench: 48,546,068 ns/iter (+/- 10,379,642)
test routing::router::benches::generate_routes_with_zero_penalty_scorer ... bench: 32,898,557 ns/iter (+/- 14,157,641)
```
Matt Corallo [Wed, 25 Jan 2023 01:59:52 +0000 (01:59 +0000)]
Merge pull request #1983 from valentinewallace/2022-01-update-contributingmd
Matt Corallo [Tue, 24 Jan 2023 22:35:55 +0000 (22:35 +0000)]
Merge pull request #1878 from dunxen/2022-11-config-minfinalcltvexpiry
Allow configurable `min_final_cltv_expiry_delta`
Valentine Wallace [Tue, 24 Jan 2023 22:33:14 +0000 (17:33 -0500)]
contributing.md: fix link and link to CoC
Arik [Tue, 24 Jan 2023 21:20:26 +0000 (13:20 -0800)]
Merge pull request #1967 from arik-so/2023-01-rename-signer-traits
Split out `EcdsaChannelSigner` method from `BaseSign`, and rename it to `ChannelSigner`
Valentine Wallace [Sun, 18 Dec 2022 22:13:47 +0000 (17:13 -0500)]
Parameterize add_new_pending_payment with retry strategy and route params
Valentine Wallace [Sun, 18 Dec 2022 22:02:17 +0000 (17:02 -0500)]
Copy Retry from invoice module to outbound_payment module
Also configure it such that in std tests, it will use SinceEpoch instead of
Instant so time can be manually advanced.
Duncan Dean [Thu, 24 Nov 2022 20:31:16 +0000 (22:31 +0200)]
Add new payment type and metadata bytes
Adds two new payment `Method`s for identifying payments with custom
`min_final_cltv_expiry_delta` as payments with LDK or user payment
hashes.
The `min_final_cltv_expiry_delta` value is packed into the first 2
bytes of the expiry timestamp in the payment secret metadata.
Duncan Dean [Mon, 21 Nov 2022 12:53:52 +0000 (14:53 +0200)]
Add `min_final_cltv_expiry` parameter to invoice utils
All utility functions for invoice construction will now also accept an
Option<>al `min_final_cltv_expiry_delta` which is useful for things like
swaps etc. The `min_final_cltv_expiry_delta` will default back to
`MIN_FINAL_CLTV_EXPIRY_DELTA` if `None` is provided.
Duncan Dean [Tue, 29 Nov 2022 10:47:00 +0000 (12:47 +0200)]
Add `_delta` suffix to `min_final_cltv_expiry`
This matches the spec and helps avoid any confusion around
naming. We're also then consistent with `cltv_expiry` in an HTLC being
the actual block height value for the CLTV and not a delta.
Arik Sosman [Fri, 20 Jan 2023 00:41:15 +0000 (16:41 -0800)]
Make `Channel` and `ChannelManager` less particular about their `Signer` type.
Arik Sosman [Thu, 19 Jan 2023 23:51:38 +0000 (15:51 -0800)]
Rename `Sign` to `WriteableEcdsaChannelSigner`.
Arik Sosman [Wed, 18 Jan 2023 04:33:54 +0000 (20:33 -0800)]
Separate channel-type-agnostic methods into `ChannelSigner` trait.
Arik Sosman [Wed, 18 Jan 2023 00:30:32 +0000 (16:30 -0800)]
Rename `BaseSign` to `EcdsaChannelSigner`.
Matt Corallo [Mon, 23 Jan 2023 23:33:19 +0000 (23:33 +0000)]
`impl Display for NodeId`
`NodeId` is a public key, there's not much reason to not implement
`Display` for it and only `Debug`.
Matt Corallo [Mon, 23 Jan 2023 23:18:09 +0000 (23:18 +0000)]
Merge pull request #1926 from jkczyz/2022-12-invoice
BOLT 12 `invoice` encoding and building
Valentine Wallace [Sun, 18 Dec 2022 21:53:57 +0000 (16:53 -0500)]
Copy PaymentAttempts from invoice module to outbound_payment module
Elias Rohrer [Fri, 20 Jan 2023 21:21:49 +0000 (15:21 -0600)]
Expose `impl_writeable_msg`
Jeffrey Czyz [Thu, 19 Jan 2023 04:14:35 +0000 (22:14 -0600)]
Fix unused_imports warning in no-std tests
Jeffrey Czyz [Mon, 16 Jan 2023 05:59:49 +0000 (23:59 -0600)]
Invoice parsing tests
Tests for checking invoice semantics when parsing invoice bytes as
defined by BOLT 12.
Jeffrey Czyz [Mon, 16 Jan 2023 04:26:52 +0000 (22:26 -0600)]
Invoice building tests
Tests for checking invoice message semantics when building an invoice as
defined by BOLT 12.
Jeffrey Czyz [Wed, 18 Jan 2023 15:54:13 +0000 (09:54 -0600)]
Expand invoice module docs and include an example
Jeffrey Czyz [Fri, 13 Jan 2023 05:02:39 +0000 (23:02 -0600)]
Use SystemTime::now() for Invoice creation time
For std builds, Invoice::created_at can be automatically set upon
construction using SystemTime::now() offset by SystemTime::UNIX_EPOCH.
Change InvoiceRequest::respond_with and Refund::respond_with to only
take a created_at parameter in no-std builds.
Jeffrey Czyz [Tue, 20 Dec 2022 15:33:11 +0000 (09:33 -0600)]
Builder for creating invoices for refunds
Add a builder for creating invoices for a refund and required fields.
Other settings are optional and duplicative settings will override
previous settings. Building produces a semantically valid `invoice`
message for the refund, which then can be signed with the key associated
with the provided signing pubkey.
Jeffrey Czyz [Tue, 20 Dec 2022 04:23:39 +0000 (22:23 -0600)]
Builder for creating invoices for offers
Add a builder for creating invoices for an offer from a given request
and required fields. Other settings are optional and duplicative
settings will override previous settings. Building produces a
semantically valid `invoice` message for the offer, which then can be
signed with the key associated with the offer's signing pubkey.
Jeffrey Czyz [Mon, 12 Sep 2022 14:30:06 +0000 (09:30 -0500)]
Invoice encoding and parsing
Define an interface for BOLT 12 `invoice` messages. The underlying
format consists of the original bytes and the parsed contents.
The bytes are later needed for serialization. This is because it must
mirror all the `offer` and `invoice_request` TLV records, including
unknown ones, which aren't represented in the contents.
Invoices may be created for an Offer (from an InvoiceRequest) or for a
Refund. The primary difference is how the signing pubkey is given -- by
the writer of the offer or the reader of the refund.
Matt Corallo [Thu, 19 Jan 2023 18:24:30 +0000 (18:24 +0000)]
Update min-inbound-fee values on `NetworkGraph` load
Historically we've had various bugs in keeping the
`lowest_inbound_channel_fees` field in `NodeInfo` up-to-date as we
go. This leaves the A* routing less efficient as it can't prune
hops as aggressively.
In order to get accurate benchmarks, this commit updates the
minimum-inbound-fees field on load. This is not the most efficient
way of doing so, but suffices for fetching benchmarks and will be
removed in the coming commits.
Note that this is *slower* than the non-updating version in the
previous commit. While I haven't dug into this incredibly deeply,
the graph snapshot in use has min-fee info for only 9,618 of
20,818 nodes. Thus, it is my guess that with the graph snapshot
as-is the branch predictor is able to largely remove the A*
heuristic lookups, but with this change it is forced to wait for
A* heuristic map lookups to complete, causing a performance
regression.
```
test routing::router::benches::generate_mpp_routes_with_probabilistic_scorer ... bench: 182,980,059 ns/iter (+/- 32,662,047)
test routing::router::benches::generate_mpp_routes_with_zero_penalty_scorer ... bench: 151,170,457 ns/iter (+/- 75,351,011)
test routing::router::benches::generate_routes_with_probabilistic_scorer ... bench: 58,187,277 ns/iter (+/- 11,606,440)
test routing::router::benches::generate_routes_with_zero_penalty_scorer ... bench: 41,210,193 ns/iter (+/- 18,103,320)
```
Matt Corallo [Thu, 19 Jan 2023 04:41:02 +0000 (04:41 +0000)]
Update the lightning graph snapshot used in benchmarks
The previous copy was more than one and a half years old, the
lightning network has changed a lot since!
As of this commit, performance on my Xeon W-10885M with a
SK hynix Gold P31 storing a BTRFS volume is as follows:
```
test ln::channelmanager::bench::bench_sends ... bench: 5,896,492 ns/iter (+/- 512,421)
test routing::gossip::benches::read_network_graph ... bench: 1,645,740,604 ns/iter (+/- 47,611,514)
test routing::gossip::benches::write_network_graph ... bench: 234,870,775 ns/iter (+/- 8,301,775)
test routing::router::benches::generate_mpp_routes_with_probabilistic_scorer ... bench: 166,155,032 ns/iter (+/- 30,206,162)
test routing::router::benches::generate_mpp_routes_with_zero_penalty_scorer ... bench: 136,843,661 ns/iter (+/- 67,111,218)
test routing::router::benches::generate_routes_with_probabilistic_scorer ... bench: 52,954,598 ns/iter (+/- 11,360,547)
test routing::router::benches::generate_routes_with_zero_penalty_scorer ... bench: 37,598,126 ns/iter (+/- 17,262,519)
test bench::bench_sends ... bench: 37,760,922 ns/iter (+/- 5,179,123)
test bench::bench_reading_full_graph_from_file ... bench: 25,615 ns/iter (+/- 1,149)
```
Matt Corallo [Thu, 19 Jan 2023 03:49:15 +0000 (03:49 +0000)]
Merge pull request #1951 from wpaulino/remove-get-node-secret
Arik [Thu, 19 Jan 2023 01:41:54 +0000 (17:41 -0800)]
Merge pull request #1964 from TheBlueMatt/2023-01-no-debug-panics
Use test/_test_utils to enable single-threaded debug assertions
Wilmer Paulino [Wed, 18 Jan 2023 21:43:32 +0000 (13:43 -0800)]
Remove NodeSigner::get_node_secret
Secrets should not be exposed in-memory at the interface level as it
would be impossible the implement it against a hardware security
module/secure element.
Wilmer Paulino [Wed, 18 Jan 2023 21:41:27 +0000 (13:41 -0800)]
Use NodeSigner::ecdh to compute SharedSecrets
Wilmer Paulino [Wed, 18 Jan 2023 21:03:20 +0000 (13:03 -0800)]
Sign gossip messages with NodeSigner
Wilmer Paulino [Wed, 18 Jan 2023 21:03:06 +0000 (13:03 -0800)]
Add NodeSigner::sign_gossip_message
Adds signing capability to NodeSigner for all gossip messages that
require a node signature.
Matt Corallo [Thu, 19 Jan 2023 01:00:44 +0000 (01:00 +0000)]
Merge pull request #1860 from wpaulino/open-channel-anchors-support
Support opening anchor channels and test end-to-end unilateral close
Wilmer Paulino [Wed, 18 Jan 2023 20:28:42 +0000 (12:28 -0800)]
Remove unused NodeSigner implementations in tests
These implementations have every method panic, so assuming that the test
suite passes, these implementations are never used.
Matt Corallo [Tue, 17 Jan 2023 23:39:41 +0000 (23:39 +0000)]
Always set `_test_utils` when building lightning for some tests
This ensures that we hit additional assertions which are intended
to always be run in tests.
Wilmer Paulino [Thu, 25 Aug 2022 20:39:46 +0000 (13:39 -0700)]
Add test yielding anchor-related events
Wilmer Paulino [Thu, 25 Aug 2022 20:39:09 +0000 (13:39 -0700)]
Add mine_transactions test util
Wilmer Paulino [Thu, 4 Aug 2022 20:22:59 +0000 (13:22 -0700)]
Support negotiating anchors throughout channel open
Jeffrey Czyz [Thu, 22 Dec 2022 15:33:41 +0000 (09:33 -0600)]
Encoding for TLV stream without signature records
When using bytes from an InvoiceRequest to constructing bytes for an
Invoice, any signature TLV records in the bytes must be excluded. Define
a wrapper for encoding such pre-serialized bytes in this manner. This
will allow the forthcoming InvoiceBuilder to construct bytes for an
Invoice properly.
Jeffrey Czyz [Thu, 22 Dec 2022 15:10:21 +0000 (09:10 -0600)]
Define TlvStream::skip_signatures
Provide a helper for skipping signature TLV records from a TLV stream.
This prevents needing to duplicate the check for signature TLV records
when writing a TLV stream without signatures in an upcoming commit.
Jeffrey Czyz [Thu, 22 Dec 2022 15:04:48 +0000 (09:04 -0600)]
Drop AsRef<[u8]> implementation for TlvRecord
Explicitly using TlvRecord::record_bytes makes reading the code more
obvious than hiding which bytes are used in AsRef<[u8]>::as_ref.
Matt Corallo [Wed, 18 Jan 2023 21:31:07 +0000 (21:31 +0000)]
Merge pull request #1956 from TheBlueMatt/2023-01-ser-cleanups
Trivial Serialization Tweaks
Jeffrey Czyz [Wed, 18 Jan 2023 16:26:39 +0000 (10:26 -0600)]
Merge pull request #1968 from lexe-tech/max/net-tokio-no-arc
lightning-net-tokio: Don't require `Arc<PeerManager>`
Max Fang [Wed, 18 Jan 2023 04:37:10 +0000 (20:37 -0800)]
lightning-net-tokio: Don't require `Arc<PeerManager>`
Matt Corallo [Tue, 17 Jan 2023 23:48:48 +0000 (23:48 +0000)]
Merge pull request #1962 from TheBlueMatt/2023-01-bp-no-std
Use the user-provided `SleepFuture` for interval checks in `background-processor`
Matt Corallo [Tue, 17 Jan 2023 23:40:44 +0000 (23:40 +0000)]
Use `test`/`_test_utils` to enable single-threaded debug assertions
We have a number of debug assertions which are expected to never
fire when running in a single thread. This is just fine in tests,
and gives us good coverage of our lockorder requirements, but is
not-irregularly surprising to users, who may run with their own
debug assertions in test environments.
Instead, we gate these checks by the `cfg(test)` setting as well as
the `_test_utils` feature, ensuring they run in our own tests, but
not downstream tests.
Matt Corallo [Tue, 17 Jan 2023 23:39:41 +0000 (23:39 +0000)]
Always set `_test_utils` when building lightning for some tests
This ensures that we hit additional assertions which are intended
to always be run in tests.
Matt Corallo [Tue, 17 Jan 2023 23:21:22 +0000 (23:21 +0000)]
Merge pull request #1960 from tnull/2023-01-deref-router-in-invoicepayer
Make `InvoicePayer`'s `Router` `Deref`
Matt Corallo [Tue, 17 Jan 2023 23:09:05 +0000 (23:09 +0000)]
Merge pull request #1957 from TheBlueMatt/2022-01-mon-ref-lockorder
Pass MonitorUpdates by ref and tweak manager lockorder
Wilmer Paulino [Tue, 2 Aug 2022 21:48:38 +0000 (14:48 -0700)]
Define option_anchors_zero_fee_htlc_tx feature bit
Wilmer Paulino [Mon, 12 Dec 2022 23:43:40 +0000 (15:43 -0800)]
Fix stale reference to BaseSign::ready_channel
Wilmer Paulino [Thu, 8 Dec 2022 18:59:20 +0000 (10:59 -0800)]
Add missing space in DebugTx logging
Matt Corallo [Mon, 28 Nov 2022 01:00:38 +0000 (01:00 +0000)]
Use a variable-length integer for many serialization wrappers
The lightning protocol uses u16s for lengths in most cases. As our
serialization framework primarily targets that, we must as well.
However, because we may serialize objects that have more than 65K
entries, we want to be able to store larger values. Thus, we define
a variable length integer here which is backwards-compatible but
treats 0xffff as "read eight more bytes".
This doesn't address any specific known issue, but feels like good
practice just in case.
Matt Corallo [Tue, 17 Jan 2023 00:16:48 +0000 (00:16 +0000)]
Make `background-processor` no-std-friendly (ish)
This makes `background-processor` build without `std` at all. This
isn't particularly useful in the general no-std case as
`background-processor` is only useful with the `futures` feature,
and async will generally need `std` in some way or another. Still,
it ensures we don't end up reintroducing a dependency on the
current time, which breaks `wasm` use-cases.
Matt Corallo [Tue, 17 Jan 2023 17:49:29 +0000 (17:49 +0000)]
Merge pull request #1955 from TheBlueMatt/2023-01-1950-message-text
Fix link text in `reply_short_channel_ids_end`
Matt Corallo [Tue, 17 Jan 2023 17:03:13 +0000 (17:03 +0000)]
Merge pull request #1963 from lexe-tech/max/derive-debug
derive `Debug` for `ConfirmationTarget`
Max Fang [Tue, 17 Jan 2023 04:15:01 +0000 (20:15 -0800)]
derive `Debug` for `ConfirmationTarget`
Matt Corallo [Tue, 17 Jan 2023 01:26:31 +0000 (01:26 +0000)]
Merge pull request #1959 from danielgranhao/stop-passing-init-features-in-msg-handlers
Stop passing `InitFeatures` in msg handlers
Matt Corallo [Tue, 17 Jan 2023 00:55:37 +0000 (00:55 +0000)]
Merge pull request #1939 from TheBlueMatt/2022-01-fuzz-hashbrown
Misc fuzzing tweaks
Matt Corallo [Tue, 17 Jan 2023 00:03:43 +0000 (00:03 +0000)]
Use the user-provided `SleepFuture` for interval checks in BP
`background-processor` does a number of jobs on various timers.
Instead of doing those by interrogating `std::time::Instant`, this
change swaps to using the existing user-provided sleep future.
Fixes #1864.
Matt Corallo [Mon, 16 Jan 2023 23:47:11 +0000 (23:47 +0000)]
Use flexible timer types in background processor's regular jobs
`background-processor` does a number of jobs on various timers.
Currently, those are all done by checking the timers every 100ms
by interrogating `std::time::Instant`. This is fine for the
threaded version, but we'd like more flexibility in the `futures`-
based `background-processor`.
Here we swap the `std::time::Instant` interrogation for a lambda
which we will switch out to the user-provided sleeper in the next
commit.
Elias Rohrer [Mon, 16 Jan 2023 22:54:53 +0000 (16:54 -0600)]
Make `InvoicePayer`'s `Router` `Deref`
As of HEAD the `ChannelManager` is parametrized by a `Router`, while
`InvoicePayer` also owns a `Router`. In order to allow for a single
object being reused, we make the `InvoicePayer` side `Deref`.
Daniel Granhão [Mon, 16 Jan 2023 20:34:59 +0000 (20:34 +0000)]
Stop passing `InitFeatures` in msg handlers
Matt Corallo [Thu, 12 Jan 2023 02:14:20 +0000 (02:14 +0000)]
Swap per_peer_state lock order
Matt Corallo [Sat, 12 Nov 2022 18:26:38 +0000 (18:26 +0000)]
Pass monitor updates by reference, not owned
In the next commit(s) we'll start holding `ChannelMonitorUpdate`s
that are being persisted in `Channel`s until they're done
persisting. In order to do that, switch to applying the updates by
reference instead of value.
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 [Mon, 28 Nov 2022 00:42:15 +0000 (00:42 +0000)]
Convert `Vec` de/serialization impl to a macro and impl for tuples
...to make it easier to add new implementations and implement it
for all tuples which implement `Readabe` + `Writeable`. Note that
we don't want to just convert to a blanket implementation as we'd
really like to keep our optimized `Vec<u8>` wrapper or we'll end
up spinning way too much when writing vecs of bytes.
Matt Corallo [Tue, 22 Nov 2022 22:41:13 +0000 (22:41 +0000)]
Add support for including `ignorable` types in enum de/ser macros
An enum implements de/serialization via
`impl_writeable_tlv_based_enum_upgradable` currently cannot contain
an object that only implements `MaybeReadable`.
This solves that by implementing the required blocks for
`ignorable`, opting to return `Ok(None)` in the top-level read in
cases where the inner field read returns `Ok(None)`.
Matt Corallo [Tue, 22 Nov 2022 21:55:39 +0000 (21:55 +0000)]
Implement (de)serialization for BTreeMap same as HashMap
Matt Corallo [Sun, 15 Jan 2023 07:01:30 +0000 (07:01 +0000)]
Fix link text in `reply_short_channel_ids_end`
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.