]> git.bitcoin.ninja Git - rust-lightning/log
rust-lightning
3 months agoCache the total points tracked in our historical liquidity data
Matt Corallo [Sat, 9 Dec 2023 04:18:46 +0000 (04:18 +0000)]
Cache the total points tracked in our historical liquidity data

When we go to score a channel using the historical liquidity data,
the first thing we do is step through all the valid bucket
combinations, multiply the min and max bucket, and then add them
together to calculate the total number of points tracked. This
isn't a free operation, and for scorers without much data it
represents a large part of the total time spent scoring during
routefinding.

Thus, here we cache this value, updating it every time the buckets
are updated.

3 months agoChange the directed history tracker's storage of its direction
Matt Corallo [Sat, 9 Dec 2023 04:30:08 +0000 (04:30 +0000)]
Change the directed history tracker's storage of its direction

Rather than storing the two direction's buckets in
`HistoricalMinMaxBuckets` (renamed
`DirectedHistoricalLiquidityTracker`), we store a single reference
to the `HistoricalLiquidityTracker` as well as the direction bool.

This will allow us in the next commit to reference fields in the
`HistoricalLiquidityTracker` aside from the two directions.

3 months agoMake the historical bucket data private to `bucketed_history`
Matt Corallo [Sat, 9 Dec 2023 04:29:12 +0000 (04:29 +0000)]
Make the historical bucket data private to `bucketed_history`

In a comming commit we'll cache some additional data in the
historical bucket tracker. In order to do so, here we isolate the
buckets themselves into the `bucketed_history` module, reducing
the possibility of accidentally updating them directly without
updating caches.

3 months agoStore both min and max historical buckets in one, new, struct
Matt Corallo [Sat, 9 Dec 2023 03:32:40 +0000 (03:32 +0000)]
Store both min and max historical buckets in one, new, struct

In the coming commits we'll isolate historical bucket logic slightly
further, allowing us to cache some state. This is the first step
towards that, storing the historical liquidity information in a new
`HistoricalLiquidityTracker` rather than in the general
`ChannelLiquidity`.

3 months agoFormat `log_approx.rs` per rustfmt
Matt Corallo [Wed, 17 Jul 2024 20:00:58 +0000 (20:00 +0000)]
Format `log_approx.rs` per rustfmt

3 months agoMove log approximation from `scoring.rs` to its own file
Matt Corallo [Sat, 9 Dec 2023 00:36:47 +0000 (00:36 +0000)]
Move log approximation from `scoring.rs` to its own file

3 months agoMerge pull request #3242 from jkczyz/2024-08-payment-id-auth-api
valentinewallace [Mon, 19 Aug 2024 14:14:37 +0000 (10:14 -0400)]
Merge pull request #3242 from jkczyz/2024-08-payment-id-auth-api

Add `PaymentId` authentication to public API

3 months agoAdd PaymentId authentication to public API
Jeffrey Czyz [Wed, 14 Aug 2024 22:39:13 +0000 (17:39 -0500)]
Add PaymentId authentication to public API

When receiving an InvoiceError message, it should be authenticated
before using it to abandon the payment. Add methods to PaymentId's
public API for constructing and verifying an HMAC for use in
OffersContext::OutboundPayment. This allows other implementations of
OffersMessageHandler to construct the HMAC and authenticate the message.

3 months agoMerge pull request #3239 from arik-so/bitcoin-0.32.2-upgrade
Matt Corallo [Fri, 16 Aug 2024 20:13:26 +0000 (20:13 +0000)]
Merge pull request #3239 from arik-so/bitcoin-0.32.2-upgrade

Bitcoin 0.32.2 upgrade

3 months agoFix fuzz warnings.
Arik Sosman [Thu, 15 Aug 2024 06:57:14 +0000 (23:57 -0700)]
Fix fuzz warnings.

Version 0.32.2 of `rust-bitcoin` deprecates a number of methods that
are commonly used in this project, most visibly `txid()`, which is
now called `compute_txid()`. This resulted in a lot of warnings, and
this commit is part of a series that seeks to address that.

3 months agoFix lightning-transaction sync warnings.
Arik Sosman [Thu, 15 Aug 2024 02:52:01 +0000 (19:52 -0700)]
Fix lightning-transaction sync warnings.

Version 0.32.2 of `rust-bitcoin` deprecates a number of methods that
are commonly used in this project, most visibly `txid()`, which is
now called `compute_txid()`. This resulted in a lot of warnings, and
this commit is part of a series that seeks to address that.

3 months agoFix lightning-block-sync warnings.
Arik Sosman [Wed, 14 Aug 2024 20:31:40 +0000 (13:31 -0700)]
Fix lightning-block-sync warnings.

Version 0.32.2 of `rust-bitcoin` deprecates a number of methods that
are commonly used in this project, most visibly `txid()`, which is
now called `compute_txid()`. This resulted in a lot of warnings, and
this commit is part of a series that seeks to address that.

3 months agoFix lightning-background-processor warnings.
Arik Sosman [Wed, 14 Aug 2024 20:41:55 +0000 (13:41 -0700)]
Fix lightning-background-processor warnings.

Version 0.32.2 of `rust-bitcoin` deprecates a number of methods that
are commonly used in this project, most visibly `txid()`, which is
now called `compute_txid()`. This resulted in a lot of warnings, and
this commit is part of a series that seeks to address that.

3 months agoFix lightning warnings.
Arik Sosman [Fri, 16 Aug 2024 15:45:27 +0000 (08:45 -0700)]
Fix lightning warnings.

Version 0.32.2 of `rust-bitcoin` deprecates a number of methods that
are commonly used in this project, most visibly `txid()`, which is
now called `compute_txid()`. This resulted in a lot of warnings, and
this commit is part of a series that seeks to address that.

3 months agoSuppress Taproot warnings.
Arik Sosman [Wed, 14 Aug 2024 18:50:40 +0000 (11:50 -0700)]
Suppress Taproot warnings.

Taproot is not yet being actively used, and this commit suppresses
the noisy warning generation.

3 months agoRemove secp256k1 dependency.
Arik Sosman [Wed, 14 Aug 2024 20:07:24 +0000 (13:07 -0700)]
Remove secp256k1 dependency.

3 months agoUpgrade rust-bitcoin to 0.32.2.
Arik Sosman [Fri, 16 Aug 2024 15:02:50 +0000 (08:02 -0700)]
Upgrade rust-bitcoin to 0.32.2.

3 months agoMerge pull request #3182 from valentinewallace/2024-07-expose-advance-bp
Matt Corallo [Fri, 16 Aug 2024 17:11:21 +0000 (17:11 +0000)]
Merge pull request #3182 from valentinewallace/2024-07-expose-advance-bp

Expose blinded paths' `advance_path_by_one`

3 months agoReturn a Result from verify_payment_id
Jeffrey Czyz [Fri, 16 Aug 2024 16:26:44 +0000 (11:26 -0500)]
Return a Result from verify_payment_id

3 months agoReimplement io::Cursor.
Arik Sosman [Thu, 15 Aug 2024 01:51:39 +0000 (18:51 -0700)]
Reimplement io::Cursor.

The `bitcoin::io` Cursor will miss a bunch of functionality that we were
using that we will reimplement here, most critically `set_position`.

3 months agoIntroduce io module.
Arik Sosman [Thu, 15 Aug 2024 01:49:22 +0000 (18:49 -0700)]
Introduce io module.

The rust-bitcoin upgrade will introduce `bitcoin::io` module, which
will be missing a necessary subset of traits.

To accommodate those traits' future implementations, we move the
`lightning::io` module to its own file, where we will be able to
implement the missing trait subset in the next commit.

3 months agoDrop Seek and SeekFrom usage.
Arik Sosman [Thu, 15 Aug 2024 19:22:59 +0000 (12:22 -0700)]
Drop Seek and SeekFrom usage.

In lieu of using `Seek` and `SeekFrom`, we will instead rely
exclusively on the `io::Cursor` type.

3 months agoSimplify Readable mutability.
Arik Sosman [Wed, 14 Aug 2024 21:25:56 +0000 (14:25 -0700)]
Simplify Readable mutability.

In anticipation of the rust-bitcoin upgrade, which incorporates its
own `io::Read` implementation, we need to make our usage compatible
with dropping `std::io` and `core2::io`.

Notably, in version 0.32.2, `bitcoin::io`'s `Read` is no longer
implemented for `&mut R where R: Read + ?Sized`, which results in
errors anytime `&mut &mut Readable` is passed instead of
`&mut Readable`.

This commit fixes those instances.

3 months agoMake advance_path_by_one an associated method.
Valentine Wallace [Thu, 15 Aug 2024 22:18:51 +0000 (18:18 -0400)]
Make advance_path_by_one an associated method.

3 months agoTweak phrasing in Blinded{Message,Payment}Path::advance_path_by_one docs.
Valentine Wallace [Thu, 15 Aug 2024 21:57:51 +0000 (17:57 -0400)]
Tweak phrasing in Blinded{Message,Payment}Path::advance_path_by_one docs.

3 months agoMove NextMessageHop into blinded_path::message
Valentine Wallace [Fri, 9 Aug 2024 19:19:12 +0000 (12:19 -0700)]
Move NextMessageHop into blinded_path::message

It's only used for onion messages, not payments.

3 months agoMake BlindedPath type private.
Valentine Wallace [Tue, 13 Aug 2024 18:36:07 +0000 (14:36 -0400)]
Make BlindedPath type private.

Users should use the Blinded{Message,Payment}Path types instead.

3 months agoReduce visibility of BlindedMessagePath inner path.
Valentine Wallace [Tue, 13 Aug 2024 18:32:27 +0000 (14:32 -0400)]
Reduce visibility of BlindedMessagePath inner path.

Works towards making the inner BlindedPath struct private to the module.

3 months agoMerge pull request #3241 from TheBlueMatt/2024-08-ret-slice-not-ref-vec
valentinewallace [Thu, 15 Aug 2024 17:38:58 +0000 (13:38 -0400)]
Merge pull request #3241 from TheBlueMatt/2024-08-ret-slice-not-ref-vec

Return slices, rather than `Vec` references, in addresses

3 months agoReduce visibility of BlindedPaymentPath inner path.
Valentine Wallace [Tue, 13 Aug 2024 17:30:58 +0000 (13:30 -0400)]
Reduce visibility of BlindedPaymentPath inner path.

Works towards making the inner BlindedPath struct private to the module.

3 months agoAdd accessor methods for inner blinded path fields.
Valentine Wallace [Tue, 13 Aug 2024 18:28:02 +0000 (14:28 -0400)]
Add accessor methods for inner blinded path fields.

3 months agoMove public_intro_node util into Blinded{Message,Payment}Path
Valentine Wallace [Fri, 9 Aug 2024 19:55:33 +0000 (12:55 -0700)]
Move public_intro_node util into Blinded{Message,Payment}Path

Helps move towards making the BlindedPath struct private.

3 months agoMove compact blinded path util to message paths only.
Valentine Wallace [Fri, 9 Aug 2024 19:50:19 +0000 (12:50 -0700)]
Move compact blinded path util to message paths only.

It's only used for message paths, so let's move it there to help make the
BlindedPath struct private.

3 months agoExpose blinded paths' advance_path_by_one methods.
Valentine Wallace [Mon, 5 Aug 2024 23:30:31 +0000 (16:30 -0700)]
Expose blinded paths' advance_path_by_one methods.

Useful for LDK users that are using the onion messages module, like LNDK.

3 months agoAdd BlindedMessagePath type to disambiguate from blinded payment paths.
Valentine Wallace [Mon, 5 Aug 2024 23:18:51 +0000 (16:18 -0700)]
Add BlindedMessagePath type to disambiguate from blinded payment paths.

3 months agoAdd BlindedPaymentPath type, to disambiguate from message paths.
Valentine Wallace [Mon, 5 Aug 2024 22:18:26 +0000 (15:18 -0700)]
Add BlindedPaymentPath type, to disambiguate from message paths.

Next up, we'll add a BlindedMessagePath type so the API is clear which type of
path is expected in each context.

3 months agoReturn slices, rather than `Vec` references, in addresses 2024-08-ret-slice-not-ref-vec
Matt Corallo [Wed, 14 Aug 2024 19:36:46 +0000 (19:36 +0000)]
Return slices, rather than `Vec` references, in addresses

Its a bit strange to return a reference to a `Vec` in Rust, when a
slice is really intended as the way to do so. Worse, the bindings
don't know how to map a reference to a `Vec` (but do have code to
map a slice of `Clone`able objects).

Here, we move `NodeAnnouncementInfo::addresses` to return a slice,
though to do so we have to adapt the `WithoutLength` `Writeable`
impl to support slices as well.

3 months agoMerge pull request #3192 from jkczyz/2024-07-invoice-error-auth
Matt Corallo [Wed, 14 Aug 2024 18:28:39 +0000 (18:28 +0000)]
Merge pull request #3192 from jkczyz/2024-07-invoice-error-auth

Authenticate `InvoiceError` messages

3 months agoMake PaymentFailureReason downgradable
Jeffrey Czyz [Fri, 9 Aug 2024 16:07:35 +0000 (11:07 -0500)]
Make PaymentFailureReason downgradable

The PaymentFailureReason variants for invoice request failures will
cause downgrades to break. Instead, use a new TLV for the reason and
continue to write the old TLV, only use None for the new reasons.

3 months agoMake PaymentFailureReason upgradable
Jeffrey Czyz [Wed, 7 Aug 2024 22:16:54 +0000 (17:16 -0500)]
Make PaymentFailureReason upgradable

This allows downgrading to version 0.0.124 or later and using None for a
PaymentFailureReason that was added after.

3 months agoAdd PaymentFailureReason::InvoiceRequestRejected
Jeffrey Czyz [Tue, 6 Aug 2024 23:33:51 +0000 (18:33 -0500)]
Add PaymentFailureReason::InvoiceRequestRejected

Instead of re-using PaymentFailureReason::RecipientRejected, define a
new InvoiceRequestRejected variant for when an InvoiceError is received
instead of a Bolt12Invoice. This allows user to differentiate the cause
of the failure.

3 months agoAdd PaymentFailureReason::InvoiceRequestExpired
Jeffrey Czyz [Tue, 6 Aug 2024 23:13:45 +0000 (18:13 -0500)]
Add PaymentFailureReason::InvoiceRequestExpired

Now that Event::PaymentFailed is generated when an InvoiceRequest times
out, define a new PaymentFailureReason for this situation.

3 months agoAdd pending changelog for Event::PaymentFailed
Jeffrey Czyz [Wed, 7 Aug 2024 21:15:35 +0000 (16:15 -0500)]
Add pending changelog for Event::PaymentFailed

3 months agoRemove Event::InvoiceRequestFailed
Jeffrey Czyz [Tue, 6 Aug 2024 22:51:16 +0000 (17:51 -0500)]
Remove Event::InvoiceRequestFailed

Now that Event::PaymentFailed has an option payment_hash, it can be used
in replace of Event::InvoiceRequestFailed. This allows for including a
reason when abandoning a payment before an invoice is received.

3 months agoMake payment_hash optional in Event::PaymentFailed
Jeffrey Czyz [Tue, 6 Aug 2024 22:17:52 +0000 (17:17 -0500)]
Make payment_hash optional in Event::PaymentFailed

When abandoning a BOLT12 payment before a Bolt12Invoice is received, an
Event::InvoiceRequestFailed is generated and the abandonment reason is
lost. Make payment_hash optional in Event::PaymentFailed so that
Event::InvoiceRequestFailed can be removed in favor of it.

3 months agoTest Bolt12Invoice with unknown required features
Jeffrey Czyz [Wed, 31 Jul 2024 22:04:39 +0000 (17:04 -0500)]
Test Bolt12Invoice with unknown required features

3 months agoRemove unused macro param
Jeffrey Czyz [Wed, 31 Jul 2024 21:08:20 +0000 (16:08 -0500)]
Remove unused macro param

3 months agoAdd InvoiceBuilder::features_unchecked
Jeffrey Czyz [Wed, 31 Jul 2024 20:57:14 +0000 (15:57 -0500)]
Add InvoiceBuilder::features_unchecked

In order to test handling of unknown required features in a
Bolt12Invoice, add a test-only function to allow setting arbitrary
feature bits.

3 months agoUse a smaller bit for UnknownFeature
Jeffrey Czyz [Wed, 31 Jul 2024 20:12:40 +0000 (15:12 -0500)]
Use a smaller bit for UnknownFeature

When testing Bolt12Invoice unknown require feature handling, a large
feature bit can cause SendError::TooBigPacket when creating an onion
message. Use a smaller feature bit for UnknownFeature, which also has
the added benefit of reducing test output.

3 months agoMove BOLT12 invoice features check
Jeffrey Czyz [Mon, 29 Jul 2024 21:10:43 +0000 (16:10 -0500)]
Move BOLT12 invoice features check

When handling a BOLT12 invoice, and invoice error is sent if the invoice
contains unknown required features. However, since the payment is still
in state AwaitingInvoice, abandoning it results in losing the reason
since an InvoiceRequestFailed event would be generated. Move the check
to PendingOutboundPayments such that the payment is first moved to state
InvoiceReceived so that a PaymentFailed event is generated instead.

3 months agoDon't include HMAC in Refund paths
Jeffrey Czyz [Fri, 2 Aug 2024 14:39:52 +0000 (09:39 -0500)]
Don't include HMAC in Refund paths

Refunds are typically communicated via QR code, where a smaller size is
desirable. Make the HMAC in OutboundPayment data optional such that it
is elided from blinded paths used in refunds. This prevents abandoning
refunds if the reader sends an invoice_error instead of an invoice
message. However, this use case isn't necessary as the corresponding
outbound payment will either timeout when the refund expires or can be
explicitly abandoned by the creator.

3 months agoDon't use UserAbandoned reason for auto-failing
Jeffrey Czyz [Wed, 24 Jul 2024 22:05:42 +0000 (17:05 -0500)]
Don't use UserAbandoned reason for auto-failing

A BOLT12 payment may be abandoned when handling the invoice or when
receiving an InvoiceError message. When abandoning the payment, don't
use UserAbandoned as the reason since that is meant for when the user
calls ChannelManager::abandon_payment.

3 months agoDon't abandon payments for duplicate invoices
Jeffrey Czyz [Wed, 24 Jul 2024 21:33:02 +0000 (16:33 -0500)]
Don't abandon payments for duplicate invoices

When making an outbound BOLT12 payment, multiple invoices may be
received for the same payment id. Instead of abandoning the payment when
a duplicate invoice received, simply ignore it without responding with
an InvoiceError. This prevents abandoning in-progress payments and
sending unnecessary onion messages.

3 months agoAuthenticate payment_id from OffersContext
Jeffrey Czyz [Thu, 18 Jul 2024 16:54:33 +0000 (11:54 -0500)]
Authenticate payment_id from OffersContext

Before abandoning a payment when receiving an InvoiceError, verify that
the PaymentId included in the OffersContext with the included HMAC. This
prevents a malicious actor sending an InvoiceError with a known payment
id from abandoning our payment.

3 months agoAdd an HMAC to OffersContext::OutboundPayment
Jeffrey Czyz [Thu, 18 Jul 2024 16:45:09 +0000 (11:45 -0500)]
Add an HMAC to OffersContext::OutboundPayment

When receiving an InvoiceError in response to an InvoiceRequest, the
corresponding payment should be abandoned. Add an HMAC to
OffersContext::OutboundPayment such that the payment ID can be
authenticated prior to abandoning the payment.

3 months agoAdd Sha256 HMAC (de)serialization
Jeffrey Czyz [Thu, 18 Jul 2024 16:42:57 +0000 (11:42 -0500)]
Add Sha256 HMAC (de)serialization

An HMAC needs to be included in OffersContext::OutboundPayment to
authenticate the included PaymentId. Implement Readable and Writeable to
allow for this.

3 months agoHMAC construction and verification for PaymentID
Jeffrey Czyz [Thu, 18 Jul 2024 16:38:44 +0000 (11:38 -0500)]
HMAC construction and verification for PaymentID

When receiving an InvoiceError in response to an InvoiceRequest, the
corresponding payment should be abandoned. Add functions for
constructing and verifying an HMAC over a Payment ID to allow for this.

3 months agoMerge pull request #3212 from dunxen/2024-07-sensible-balances
valentinewallace [Wed, 14 Aug 2024 15:22:05 +0000 (11:22 -0400)]
Merge pull request #3212 from dunxen/2024-07-sensible-balances

Accuracy fixes and differentiating sources for `Balance`

3 months agoMerge pull request #3234 from TheBlueMatt/2024-08-lightning-dep-inv
Matt Corallo [Wed, 14 Aug 2024 14:27:39 +0000 (14:27 +0000)]
Merge pull request #3234 from TheBlueMatt/2024-08-lightning-dep-inv

Swap the dep order between `lightning` and `lightning-invoice`

3 months agoMerge pull request #3020 from tnull/2024-04-drop-electrsd-autodownload-for-good
Matt Corallo [Tue, 13 Aug 2024 23:23:43 +0000 (23:23 +0000)]
Merge pull request #3020 from tnull/2024-04-drop-electrsd-autodownload-for-good

Drop `electrsd`'s auto-download feature for good

3 months agoEnable caching for `bitcoind`/`electrs` in CI
Elias Rohrer [Thu, 1 Aug 2024 15:47:45 +0000 (10:47 -0500)]
Enable caching for `bitcoind`/`electrs` in CI

3 months ago`rustfmt` new files added in the past few commits 2024-08-lightning-dep-inv
Matt Corallo [Fri, 9 Aug 2024 15:27:38 +0000 (15:27 +0000)]
`rustfmt` new files added in the past few commits

The past handful of commits were mostly moving code around, so to
aid reviewers violated our `rustfmt` rules. Here we rectify that by
`rustfmt`'ing the newly-added files.

3 months agoPrepare to `rustfmt` newly added files
Matt Corallo [Fri, 9 Aug 2024 15:42:48 +0000 (15:42 +0000)]
Prepare to `rustfmt` newly added files

In the next commit we'll `rustfmt` newly-added files, but before
we do so we clean up some code so that the resulting files won't be
quite as absurd. We also exclude the new `invoice_utils.rs` file,
as it needs quite substantial cleanups.

3 months agoProvide the signer with a full `RawBolt11Invoice` to sign
Matt Corallo [Fri, 9 Aug 2024 02:45:55 +0000 (02:45 +0000)]
Provide the signer with a full `RawBolt11Invoice` to sign

Now that the `lightning` crate depends on the `lightning-invoice`
crate, there's no reason to have the `sign_invoice` method take raw
base32 field elements as we can now give it a real
`RawBolt11Invoice`, which we do here.

This simplifies the interface and avoids a
serialization-deserialization roundtrip when signing invoices in a
validating signer.

FIxes #3227

3 months agoSwap the dep order between `lightning` and `lightning-invoice`
Matt Corallo [Fri, 9 Aug 2024 01:29:48 +0000 (01:29 +0000)]
Swap the dep order between `lightning` and `lightning-invoice`

`lightning-invoice` previously had a dependency on the entire
`lightning` crate just because it wants to use some of the useful
types from it. This is obviously backwards and leads to some
awkwardness like the BOLT 11 invoice signing API in the `lightning`
crate taking a `[u5]` rather than a `Bolt11Invoice`.

Here we finally rectify this issue, swapping the dependency order
and making `lightning` depend on `lightning-invoice` rather than
the other way around.

This moves various utilities which were in `lightning-invoice` but
relied on `lightning` payment types to make payments to where they
belong (the `lightning` crate), but doesn't bother with integrating
them well in their new home.

3 months agoAdd a `lightning-types` dependency to `lightning-invoice`
Matt Corallo [Fri, 9 Aug 2024 01:13:25 +0000 (01:13 +0000)]
Add a `lightning-types` dependency to `lightning-invoice`

`lightning-invoice` currently has a dependency on the entire
`lightning` crate just because it wants to use some of the useful
types from it. This is obviously backwards and leads to some
awkwardness like the BOLT 11 invoice signing API in the `lightning`
crate taking a `[u5]` rather than a `Bolt11Invoice`.

This takes tees us up for the final step, adding a
`lightning-types` dependency to `lightning-invoice` and using it
for imports rather than the `lightning` crate.

3 months agoUse `check_added_monitors` test utility in invoice utils tests
Matt Corallo [Fri, 9 Aug 2024 13:20:35 +0000 (13:20 +0000)]
Use `check_added_monitors` test utility in invoice utils tests

In a coming commit, the `lightning-invoice::utils` module will move
to the `lightning` crate, causing its tests to be included in the
global lockorder tests done in that crate. This should be fine,
except that the `lightning-invoice::utils` module currently holds
the `added_monitors` lock too long causing lockorder violations.

Instead, this commit replaces the legacy monitors-added test with
the `check_added_monitors` test utility.

3 months agoMove `UntrustedString` and `PrintableString` to `lightning-types`
Matt Corallo [Fri, 9 Aug 2024 01:26:21 +0000 (01:26 +0000)]
Move `UntrustedString` and `PrintableString` to `lightning-types`

`lightning-invoice` currently has a dependency on the entire
`lightning` crate just because it wants to use some of the useful
types from it. This is obviously backwards and leads to some
awkwardness like the BOLT 11 invoice signing API in the `lightning`
crate taking a `[u5]` rather than a `Bolt11Invoice`.

This takes one more step, moving the `UntrustedString` and
`PrintableString` types to `lightning-types`.

3 months agoMove `Features` into `lightning-types`
Matt Corallo [Fri, 9 Aug 2024 14:20:50 +0000 (14:20 +0000)]
Move `Features` into `lightning-types`

`lightning-invoice` currently has a dependency on the entire
`lightning` crate just because it wants to use some of the useful
types from it. This is obviously backwards and leads to some
awkwardness like the BOLT 11 invoice signing API in the `lightning`
crate taking a `[u5]` rather than a `Bolt11Invoice`.

This takes one more step, moving the `Features` types from
`lightning` to `lightning-types`.

3 months agoReplace usages of `Features::is_subset` and remove it
Matt Corallo [Fri, 9 Aug 2024 14:18:09 +0000 (14:18 +0000)]
Replace usages of `Features::is_subset` and remove it

It turns out all the places we use `Features::is_subset` we could
as well be using `Features::requires_unknown_bits_from`. Further,
in the next commit `Features` will move to a different crate so any
methods which the `lightning` crate uses will need to be public. As
the `is_subset` API is prety confusing (it doesn't consider
optional/required bits, only whether the bits themselves are
strictly a subset) it'd be nice to not have to expose it, which is
enabled here.

3 months agoMove `Rout{ingFees,eHint{,Hop}}` to `lightning-types`
Matt Corallo [Fri, 9 Aug 2024 00:29:25 +0000 (00:29 +0000)]
Move `Rout{ingFees,eHint{,Hop}}` to `lightning-types`

`lightning-invoice` currently has a dependency on the entire
`lightning` crate just because it wants to use some of the useful
types from it. This is obviously backwards and leads to some
awkwardness like the BOLT 11 invoice signing API in the `lightning`
crate taking a `[u5]` rather than a `Bolt11Invoice`.

This takes one more step, moving the routing types
`lightning-invoice` uses into `lightning-types`.

3 months agoMove `Payment{Hash,Preimage,Secret}` into a new crate
Matt Corallo [Fri, 9 Aug 2024 00:13:41 +0000 (00:13 +0000)]
Move `Payment{Hash,Preimage,Secret}` into a new crate

`lightning-invoice` currently has a dependency on the entire
`lightning` crate just because it wants to use some of the useful
types from it. This is obviously backwards and leads to some
awkwardness like the BOLT 11 invoice signing API in the `lightning`
crate taking a `[u5]` rather than a `Bolt11Invoice`.

This is the first step towards fixing that - moving the common
types we need into a new `lightning-types` crate which both can
depend on.

Since we're using a new crate and can't depend on the existing
`lightning` hex utility to implement `Display`, we also take this
opportunity to switch to the new `Display` impl macro in
`hex_conservative`.

3 months agoTest claimable balance is expected for forwarded/outbound payments
Duncan Dean [Tue, 30 Jul 2024 18:11:51 +0000 (20:11 +0200)]
Test claimable balance is expected for forwarded/outbound payments

3 months agoIndicate source of balances
Duncan Dean [Thu, 25 Jul 2024 09:54:28 +0000 (11:54 +0200)]
Indicate source of balances

Introduce the `BalanceSource` enum to differentiate between force-close,
coop-close, and HTLCs in `Balance::ClaimableAwaitingConfirmations`.

3 months agoExplain how rounded millisat values are included in overall balance
Matt Corallo [Fri, 29 Sep 2023 18:31:21 +0000 (18:31 +0000)]
Explain how rounded millisat values are included in overall balance

3 months agoTest rounded msat balances
Duncan Dean [Wed, 7 Aug 2024 07:56:46 +0000 (09:56 +0200)]
Test rounded msat balances

3 months agoInclude rounded msat balances in `Balance::ClaimableOnChannelClose`
Matt Corallo [Tue, 14 Nov 2023 22:19:19 +0000 (22:19 +0000)]
Include rounded msat balances in `Balance::ClaimableOnChannelClose`

If we're gonna push users towards using `Balance` to determine
their current balances, we really need to provide more information,
including msat balances.

Here we add rounded-out msat balances to the pre-close balance
information

3 months agoAdd tx fee information to `Balance::ClaimableOnChannelClose`
Matt Corallo [Fri, 29 Sep 2023 17:54:24 +0000 (17:54 +0000)]
Add tx fee information to `Balance::ClaimableOnChannelClose`

`Balance::ClaimableOnChannelClose` excludes the commitment
transaction fee, which makes it hard to use for current balance
calculation. Here we add it, setting the value to zero for inbound
channels (i.e. ones for which we don't pay the fee).

3 months agoMove commitment tx fee calculation helpers to `chan_utils`
Matt Corallo [Fri, 29 Sep 2023 17:26:01 +0000 (17:26 +0000)]
Move commitment tx fee calculation helpers to `chan_utils`

These don't really belong in `channel` as they're now used in other
parts of the codebase.

3 months agoDrop `chan_utils` self-import
Matt Corallo [Fri, 29 Sep 2023 17:10:40 +0000 (17:10 +0000)]
Drop `chan_utils` self-import

There's no reason to `use` a module within that module to refer to
that module...

3 months agoInclude an `outbound_payment` flag in `MaybeTimeoutClaimableHTLC`
Matt Corallo [Thu, 28 Sep 2023 23:02:26 +0000 (23:02 +0000)]
Include an `outbound_payment` flag in `MaybeTimeoutClaimableHTLC`

When the user is fetching their current balances after forwarding a
payment (before it clears), they'll see a
`MaybePreimageClaimableHTLC` and a `MaybeTimeoutClaimableHTLC` but
if they sum up their balance using
`Balance::claimable_amount_satoshis` neither will be included.

Obviously, exactly one of the two balances should be included - one
of the two resolutions should happen in our favor. This causes our
visible balance to fluctuate up and down by the full value of any
HTLCs we're in the middle of forwarding, which is incredibly
confusing to see. If we want to stop the fluctuations, we need to
pick one of the two balances to include. The obvious candidate is
`MaybeTimeoutClaimableHTLC` as it is the lower of the two, and
represents our balance without the fee we'd receive from the
forward.

Sadly, if we always include it, we'll end up also including any
HTLCs which we've sent but which haven't yet been claimed by their
recipient, which is the wrong behavior.

Luckily, we have access to the `Option<HTLCSource>` while walking
HTLCs, which allows us to add an `outbound_payment` flag to
`MaybeTimeoutClaimableHTLC`. This allows us to only include
forwarded payments in `claimable_amount_satoshis`.

Sadly, even with this in place our balance still fluctuates by the
changes in the commitment transaction fees we have to pay during
forwarding, but addressing that is left for later.

3 months agoUpgrade all github actions to `v4` variants
Elias Rohrer [Mon, 12 Aug 2024 10:54:02 +0000 (12:54 +0200)]
Upgrade all github actions to `v4` variants

3 months agoFix misc `shellcheck` complaints
Elias Rohrer [Thu, 25 Apr 2024 13:32:32 +0000 (15:32 +0200)]
Fix misc `shellcheck` complaints

3 months agoHave `shellcheck` check all scripts in `contrib`
Elias Rohrer [Mon, 12 Aug 2024 08:41:51 +0000 (10:41 +0200)]
Have `shellcheck` check all scripts in `contrib`

3 months agoHave `shellcheck` check all scripts in `ci`
Elias Rohrer [Thu, 25 Apr 2024 13:05:56 +0000 (15:05 +0200)]
Have `shellcheck` check all scripts in `ci`

3 months agoDrop `electrsd` autodownload feature for good
Elias Rohrer [Thu, 25 Apr 2024 12:37:23 +0000 (14:37 +0200)]
Drop `electrsd` autodownload feature for good

... which requires a bunch of unnecessary dev dependencies, e.g., `zip`.

Instead we lean on the `download_bitcoind_electrs.sh` script also for
local testing.

3 months agoMove CI downloading `bitcoind`/`electrsd` to dedicated shell script
Elias Rohrer [Thu, 25 Apr 2024 12:33:47 +0000 (14:33 +0200)]
Move CI downloading `bitcoind`/`electrsd` to dedicated shell script

... allowing it to be sourced locally before running
`lightning-transaction-sync` tests.

3 months agoMerge pull request #3210 from tcharding/07-31-rm-hex-dep
Matt Corallo [Mon, 12 Aug 2024 17:11:56 +0000 (17:11 +0000)]
Merge pull request #3210 from tcharding/07-31-rm-hex-dep

Remove explicit dependency on hex-conservative

3 months agoMerge pull request #3236 from TheBlueMatt/2024-08-unclonable-graph
Matt Corallo [Mon, 12 Aug 2024 14:18:08 +0000 (14:18 +0000)]
Merge pull request #3236 from TheBlueMatt/2024-08-unclonable-graph

Stop relying on a `Clone`able `NetworkGraph` ref in `DefaultRouter`

3 months agoStop relying on a `Clone`able `NetworkGraph` ref in `DefaultRouter` 2024-08-unclonable-graph
Matt Corallo [Mon, 12 Aug 2024 01:03:00 +0000 (01:03 +0000)]
Stop relying on a `Clone`able `NetworkGraph` ref in `DefaultRouter`

While there's not really much harm in requiring a `Clone`able
reference (they almost always are), it does make our bindings
struggle a bit as they don't support multi-trait bounds (as it
would require synthesizing a new C trait, which the bindings don't
do automatically). Luckily, there's really no reason for it, and we
can just call the `DefaultMessageRouter` directly when we want to
route a message.

We've carried this patch for a while on the bindings branch, but
there's not a strong reason it can't go upstream.

3 months agoMerge pull request #3214 from TheBlueMatt/2024-07-chan-by-val
Matt Corallo [Mon, 12 Aug 2024 00:40:16 +0000 (00:40 +0000)]
Merge pull request #3214 from TheBlueMatt/2024-07-chan-by-val

Make `funding_transaction_generated` take a `ChannelId` by value

3 months agoUse bitcoin::hex instead of bitcoin::hashes::hex
Tobin C. Harding [Thu, 8 Aug 2024 06:09:30 +0000 (16:09 +1000)]
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.

3 months agoRemove explicit dependency on hex-conservative
Tobin C. Harding [Wed, 31 Jul 2024 10:46:33 +0000 (05:46 -0500)]
Remove explicit dependency on hex-conservative

The `hex` crate is re-exported by `rust-bitcoin` so we can get it from
there instead of explicitly depending on it. Doing so reduces the
maintenance burden and helps reduce the likelyhood of getting two
versions in the dependency graph.

3 months agoMerge pull request #3220 from dunxen/2024-08-config-param-consistency
Matt Corallo [Thu, 8 Aug 2024 20:47:18 +0000 (20:47 +0000)]
Merge pull request #3220 from dunxen/2024-08-config-param-consistency

Set default ChannelHandshakeLimits::min_funding_satoshis to 1000

3 months agoSet default ChannelHandshakeLimits::min_funding_satoshis to 1000
Duncan Dean [Fri, 2 Aug 2024 11:44:28 +0000 (13:44 +0200)]
Set default ChannelHandshakeLimits::min_funding_satoshis to 1000

The original default value of 0 was inconsistent with the minimum requirement
of 1000 satoshis in ChannelHandshakeConfig::their_channel_reserve_proportional_millionths.

3 months agoMerge pull request #3194 from tnull/2024-07-om-event-notifier
Matt Corallo [Thu, 8 Aug 2024 17:04:32 +0000 (17:04 +0000)]
Merge pull request #3194 from tnull/2024-07-om-event-notifier

Add `Notifier` to `OnionMessenger`

3 months agoMerge pull request #3215 from tnull/2024-08-protect-against-merkle-leaf-node-weakness
Matt Corallo [Thu, 8 Aug 2024 16:10:18 +0000 (16:10 +0000)]
Merge pull request #3215 from tnull/2024-08-protect-against-merkle-leaf-node-weakness

tx-sync: Protect against Core's Merkle leaf node weakness

3 months agoProtect against Core's Merkle leaf node weakness
Elias Rohrer [Thu, 1 Aug 2024 16:30:41 +0000 (11:30 -0500)]
Protect against Core's Merkle leaf node weakness

Bitcoin Core's Merkle tree implementation has no way to discern between
internal and leaf node entries. As a consequence it is susceptible to an
attacker injecting additional transactions by crafting 64-byte
transactions matching an inner Merkle node's hash (see
https://web.archive.org/web/20240329003521/https://bitslog.com/2018/06/09/leaf-node-weakness-in-bitcoin-merkle-tree-design/).

To protect against this (highly unlikely attack vector), we check that
the transaction isn't 64 bytes in length, and skip it otherwise.

3 months agoMerge pull request #3230 from TheBlueMatt/2024-08-old-doc-tweaks
Elias Rohrer [Thu, 8 Aug 2024 07:17:27 +0000 (09:17 +0200)]
Merge pull request #3230 from TheBlueMatt/2024-08-old-doc-tweaks

Minor doc tweaks to `MonitorHolder`

3 months agoAdd `Notifier` to `OnionMessenger`
Elias Rohrer [Fri, 19 Jul 2024 11:41:37 +0000 (13:41 +0200)]
Add `Notifier` to `OnionMessenger`