Commit graph

6363 commits

Author SHA1 Message Date
Alec Chen
0a2dbdf247
Handle receiving custom HTLC TLVs
This completes basic receiver-side support for custom TLVs and adds
functional testing for sending and receiving.
2023-08-08 16:16:38 -05:00
Alec Chen
f560320b5f
De/serialize custom TLVs on {Inbound,Outbound}OnionPayload
When serialized, the TLVs in `OutboundOnionPayload`, unlike a normal
TLV stream, are prefixed with the length of the stream. To allow a user
to add arbitrary custom TLVs, we aren't able to communicate to our
serialization macros exactly which fields to expect, so this commit
adds new macro variants to allow appending an extra set of bytes (and
modifying the prefixed length accordingly).

Because the keysend preimage TLV has a type number in the custom type
range, and a user's TLVs may have type numbers above and/or below
keysend's type number, and because TLV streams must be serialized in
increasing order by type number, this commit also ensures the keysend
TLV is properly sorted/serialized amongst the custom TLVs.
2023-08-08 16:13:19 -05:00
Alec Chen
d2e9cb4bcd
Add custom tlvs to PendingOutboundPayment::Retryable 2023-08-08 15:55:06 -05:00
Alec Chen
039b1c8d10
Allow users to provide custom TLVs through RecipientOnionFields
Custom TLVs allow users to send extra application-specific data with
a payment. These have the additional flexibility compared to
`payment_metadata` that they don't have to reflect recipient generated
data provided in an invoice, in which `payment_metadata` could be
reused.

We ensure provided type numbers are unique, increasing, and within the
experimental range with the `RecipientOnionFields::with_custom_tlvs`
method.

This begins sender-side support for custom TLVs.
2023-08-08 15:55:00 -05:00
Matt Corallo
4b24135738
Merge pull request #2128 from valentinewallace/2023-03-route-blinding-groundwork
Route blinding groundwork
2023-08-08 19:59:05 +00:00
Jeffrey Czyz
bdbe9c8925
Smooth out channel liquidity bounds decay
Decaying the channel liquidity bounds by a half life can result in a
large decrease, which may have an oscillating affect on whether a
channel is retried. Approximate an additional three-quarter life when
half of the next half life has passed to help smooth out the decay.
2023-08-08 12:58:25 -05:00
Vladimir Fomene
7cfafc98ba
Add test coverage ChannelClosed event fields 2023-08-08 14:07:16 +03:00
Vladimir Fomene
bd6323e94b
Add counterparty_node_id & channel_capacity to ChannelClosed
The current ChannelClosed event does not let
you know the counterparty during a channel close
event. This change adds the counterparty_node_id
and the channel_capacity to the ChannelClosed event.
This helps users to have more context during a
channel close event. Solves #2343
2023-08-08 13:58:40 +03:00
Matt Corallo
67e5399eff Make CI build -> test flows test -> build.
Doing `cargo test` causes us to build both the crate(s) themselves
and the test binaries, which depend on the main builds. However, it
can start building the test code while the actual program code for
the main crate(s) themselves are being built, making a
build -> test flow slightly slower than test -> build.

Its not really a huge deal, but I'm using `ci/ci-tests.sh` more
locally and it meaningfully changes the time-to-test-run.
2023-08-08 04:19:51 +00:00
Matt Corallo
fe6366895a Scope payment preimage in do_test_keysend_payments
b0d4ab8cf8 fixed a nasty bug where
we'd failed to include the payment preimage in keysend onions at
all. Ultimately, this was a test failure - the existing test suite
should which did keysend payments were not structured in a way that
would fail in this case, instead using the same preimage variable
both for sending and receiving.

Here we improve the main keysend test tweaked by b0d4ab8cf8
to make absolutely sure it cannot work if the preimage doesn't come
from the onion. We make the payment preimage on the sending side a
variable inside a scope which only exists for the send call. Once
that scope completes the payment preimage only exists in the
sending `ChannelManager`, which must have put it in the onion in
order for the receiving node to have it.
2023-08-08 04:15:20 +00:00
valentinewallace
100fdbb7e8
Merge pull request #2475 from alecchendev/2023-08-actually-fix-keysend
Fix keysend not being sent in `OutboundPayment::send_payment_internal`
2023-08-07 15:56:09 -07:00
Alec Chen
b0d4ab8cf8
Send keysend preimage through OutboundPayment::send_payment_internal
Fixes a bug where we wouldn't use the provided keysend preimage when
piping through OutboundPayment::pay_route_internal.

Also simplifies and refactors existing keysend tests to make sure this
gets hit.
2023-08-04 22:05:13 -05:00
Alec Chen
b7d0357a8a
Move keysend tests to payment_tests.rs 2023-08-04 19:17:29 -05:00
Valentine Wallace
c9d3544314
Remove unnecessary vecs in channel.rs 2023-08-02 12:54:44 -07:00
Valentine Wallace
67868aec72
Replace OnionHopData with OutboundPayload for outbound onions
Follows on from the previous commit, see its message
2023-08-02 12:54:41 -07:00
Valentine Wallace
02a6d895a5
Receive payment onions as new InboundPayload instead of OnionHopData
To support route blinding, we want to split OnionHopData into two separate
structs, one for inbound onions and one for outbound onions. This is because
blinded payloads change the fields present in the onion hop data struct based
on whether we're sending vs receiving (outbound onions include encrypted blobs,
inbound onions can decrypt those blobs and contain the decrypted fields
themselves).

In upcoming commits, we'll add variants for blinded payloads to the new
InboundPayload enum.
2023-08-02 12:54:34 -07:00
Valentine Wallace
0c37488ff4
Remove outdated documentation of a panic 2023-08-02 12:54:34 -07:00
Valentine Wallace
9473f1cb5f
Remove indentation in payment receive util
This also set us up for supporting receiving blinded onion payloads.
2023-08-02 12:54:31 -07:00
valentinewallace
6f58072585
Merge pull request #2366 from valentinewallace/2023-05-blinded-pathfinding-fuzz
Blinded pathfinding fuzzing
2023-07-31 15:27:47 -07:00
Matt Corallo
0607ed766a
Merge pull request #2460 from TheBlueMatt/2023-07-claimable-clarify
Rename `Balance::claimable_amount_satoshis` to have a unique name
2023-07-31 17:47:33 +00:00
Matt Corallo
3c525ef694
Merge pull request #2463 from TheBlueMatt/2023-07-no-rustdoc-unicode
Drop unicode in documentation
2023-07-31 17:47:19 +00:00
Matt Corallo
56fba35422
Merge pull request #2465 from alecchendev/2023-07-flip-keysend-feature-bit
Flip keysend feature bit on
2023-07-31 17:46:57 +00:00
valentinewallace
390d49c596
Merge pull request #2454 from optout21/unused-use
(Minor) Remove an unused import (ChannelSigner)
2023-07-31 10:35:15 -07:00
Elias Rohrer
7768b73251
Merge pull request #2459 from valentinewallace/2023-07-reconnect-peers-test-util
Struct-ify `reconnect_nodes` test util args
2023-07-31 15:25:05 +02:00
Alec Chen
7ee90a5dc6 Flip keysend feature bit in node features 2023-07-30 21:18:43 -05:00
Matt Corallo
28f303c193 Drop unicode in documentation
Javadocs refuse unicode and as our rustdocs get copied over to Java
bindings (and thus get run through javadocs) we can't have unicode
in our rustdocs.
2023-07-30 17:12:08 +00:00
Matt Corallo
830220393f Drop claimable from Balance::claimable_amount_satoshis fields
In Java/TypeScript, we map enums as a base class and each variant
as a class which extends the base. In Java/TypeScript, functions
and fields share the same namespace, which means we cannot have
functions on an enum which have the same name as any fields in any
enum variants.

`Balance`'s `claimable_amount_satoshis` method aliases with fields
in each variant, and thus ultimately doesn't compile in TypeScript.

Because `Balance::claimable_amount_satoshis` has the same name as
the fields, it's also a bit confusing, as it doesn't return the
field for each variant, but sometimes returns zero if we're not
sure we can claim the balance.

Instead, we rename the fields in each enum variant to simply
`amount_satoshis`, to avoid implying that we can definitely claim
the balance.
2023-07-30 02:24:16 +00:00
Jeffrey Czyz
4bb4a970e8
Make offers::merkle::SignError visible 2023-07-28 14:21:19 -05:00
Jeffrey Czyz
9c708df2ff
Tidy up bitcoin::secp256k1 imports 2023-07-28 14:21:19 -05:00
Matt Corallo
8164cb9307 Accept RPC responses with a null result
This is actually a valid response in some cases, at least for the
`gettxout` command, where `null` is returned if no corresponding
UTXO was found, but the command otherwise succeeded.
2023-07-28 19:01:34 +00:00
Valentine Wallace
ece4db67fe
Struct-ify reconnect_nodes test util args
Makes it easier to add new arguments without a ton of resulting test changes.
Useful for route blinding testing because we need to check for malformed HTLCs,
which is not currently supported by reconnect_nodes. It also makes it easier to
tell what is being checked in relevant tests.
2023-07-27 16:00:28 -07:00
Valentine Wallace
49f4d5f8f4
Add onion message test vectors
Also re-alphabetize the imports in the onion message functional tests.

Co-authored-by: Carla Kirk-Cohen <kirkcohenc@gmail.com>
2023-07-27 11:55:47 -07:00
valentinewallace
5cddf5e06a
Merge pull request #2104 from douglaz/docs_fixes_channel
Docs improvements for channel
2023-07-26 14:52:15 -07:00
optout
1babca4e2c
Remove an unused use (ChannelSigner) 2023-07-26 21:47:40 +02:00
Valentine Wallace
a35b92c8c8
Fuzz test blinded payment pathfinding 2023-07-25 16:32:33 -07:00
Valentine Wallace
9bf4b6ed90
Router fuzz: macroize first/last hops construction and pathfinding call
For reuse in fuzzing blinded payment pathfinding, and to ensure fuzz input
values are fetched in the same order in both match arms.
2023-07-25 16:32:30 -07:00
Allan Douglas R. de Oliveira
a15d0b5c2e Docs improvements for channel 2023-07-25 22:52:21 +00:00
valentinewallace
685f266655
Merge pull request #2446 from TheBlueMatt/2023-07-ci-more-test
Run all tests first before testing more esoteric flags in CI
2023-07-25 11:07:41 -07:00
valentinewallace
c6c684be30
Merge pull request #2448 from TheBlueMatt/2023-07-cm-clone
Impl clone for ChannelMonitor
2023-07-25 10:46:48 -07:00
Matt Corallo
c383f06538
Merge pull request #2370 from valentinewallace/2023-06-send-along-path-args
Update `send_payment_along_path` to take its args as struct
2023-07-24 22:43:58 +00:00
benthecarman
d026259d3e Impl clone for ChannelMonitor
This gives people more freedom with the channel monitors. For Mutiny
this would be nice for us to be able to create copies of them and pass
aorund in memory without having to serialize until we actually want to.

Originally by benthecarman <benthecarman@live.com>
Small bugfix from Matt Corallo <git@bluematt.me>
2023-07-24 22:36:03 +00:00
Matt Corallo
aa3c78658e Run all tests first before testing more esoteric flags in CI
This should at least marginally more aggressively target things
which are more likely to have changed in CI, making `ci-tests.sh`
more useful as a "default" script for developers to run locally.
2023-07-24 22:04:10 +00:00
Matt Corallo
e13ff10c63
Merge pull request #2431 from arik-so/2023-07-public-excess-data 2023-07-24 03:52:27 +00:00
Elias Rohrer
78f59a5345
Merge pull request #2444 from szabgab/https
http => https
2023-07-23 19:28:17 +02:00
Gabor Szabo
1da6fc2ded http => https 2023-07-23 08:58:41 +03:00
Matt Corallo
4938be6ad7
Merge pull request #2427 from TheBlueMatt/2023-07-cut-116
Release 0.0.116
2023-07-21 23:15:05 +00:00
Matt Corallo
983f2c1870 Bump crate versions to 0.0.116 release 2023-07-21 20:42:13 +00:00
Matt Corallo
e9e806bc41 Add a warning on anchors and update 116 changelog for release 2023-07-21 20:42:13 +00:00
Matt Corallo
ae33b093b8 Add lightning-background-processor no-std feature
While this is generally uneccessary as users set the `no-std` or
`std` features on the `lightning` crate directly, having this
allows `lightning-background-processor` to be built by itself
without extra dep lines. Specifically, the bindings are moving to
using the `-Z avoid-dev-deps` option, which now causes
`lightning-background-processor` to fail to build directly.
2023-07-21 20:33:13 +00:00
Jeffrey Czyz
0fadb54d7f
Merge pull request #2436 from tnull/2023-07-improve-router-logging
Improve router logging and update documentation
2023-07-21 15:25:57 -05:00