Commit graph

5214 commits

Author SHA1 Message Date
Matt Corallo
4624caf5a2 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`.
2024-08-13 12:54:59 +00:00
Duncan Dean
d6c540df12
Test claimable balance is expected for forwarded/outbound payments 2024-08-13 13:26:57 +02:00
Duncan Dean
728192ecdc
Indicate source of balances
Introduce the `BalanceSource` enum to differentiate between force-close,
coop-close, and HTLCs in `Balance::ClaimableAwaitingConfirmations`.
2024-08-13 13:26:57 +02:00
Matt Corallo
8b729b606f
Explain how rounded millisat values are included in overall balance 2024-08-13 13:26:57 +02:00
Duncan Dean
fe73ce789b
Test rounded msat balances 2024-08-13 13:26:57 +02:00
Matt Corallo
f5a614eb0b
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
2024-08-13 13:26:57 +02:00
Matt Corallo
a39357e08a
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).
2024-08-13 13:26:57 +02:00
Matt Corallo
f1f28c6010
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.
2024-08-13 13:26:57 +02:00
Matt Corallo
9e147a6213
Drop chan_utils self-import
There's no reason to `use` a module within that module to refer to
that module...
2024-08-13 13:26:57 +02:00
Matt Corallo
6a34baa270
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.
2024-08-13 13:26:56 +02:00
Matt Corallo
bc1c026712
Merge pull request #3210 from tcharding/07-31-rm-hex-dep
Remove explicit dependency on hex-conservative
2024-08-12 17:11:56 +00:00
Matt Corallo
9de7c1db3b Stop relying on a Cloneable 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.
2024-08-12 01:03:42 +00:00
Matt Corallo
4950f3cfc8
Merge pull request #3214 from TheBlueMatt/2024-07-chan-by-val
Make `funding_transaction_generated` take a `ChannelId` by value
2024-08-12 00:40:16 +00:00
Tobin C. Harding
eac1b87e65
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.
2024-08-09 08:20:15 +10:00
Tobin C. Harding
aeee8fe31e
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.
2024-08-09 08:20:09 +10:00
Duncan Dean
779b194825
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.
2024-08-08 20:04:20 +02:00
Matt Corallo
1d9d911d1c
Merge pull request #3194 from tnull/2024-07-om-event-notifier
Add `Notifier` to `OnionMessenger`
2024-08-08 17:04:32 +00:00
Elias Rohrer
c1c133ccda
Merge pull request #3230 from TheBlueMatt/2024-08-old-doc-tweaks
Minor doc tweaks to `MonitorHolder`
2024-08-08 09:17:27 +02:00
Elias Rohrer
2dd8c2b3de
Add Notifier to OnionMessenger 2024-08-08 09:10:41 +02:00
Matt Corallo
fd8f4ace7b
Merge pull request #3231 from tcharding/08-08-rm-blockdata
Stop using `blockdata` module
2024-08-08 00:40:02 +00:00
cooltexture
5b603139db
Fix #3209
There was a issue with the ci/check-compiles.sh.
It would return a warning due to links not being enclosed in <>.
Fixed the issue by enclosing the links.
2024-08-07 23:54:11 +02:00
Tobin C. Harding
b02f3134d8
Run contrib/run-rustfmt.sh
No other changes other than those introduced by the script.
2024-08-08 07:17:18 +10:00
Tobin C. Harding
e9b20cee43
Do not use bitcoin::blockdata
The `rust-bitcoin` project is working towards making the public API
separate from the directory structure; eventually the
`bitcoin::blockdata` will go away, to make maintenance easier here stop
using the `blockdata` module.

Do not run the formatter, so as to make review easier. This patch was
created mechanically using:

search-and-replace bitcoin::blockdata bitcoin

and having defined

```bash
search-and-replace () {
        if (($# != 2))
        then
                echo "Usage: $0 <this> <that>"
                return
        fi
        local this="$1"
        local that="$2"
        for file in $(git grep -l "$this")
        do
                perl -pi -e "s/$this/$that/g" "$file"
        done
}
```
2024-08-08 07:13:26 +10:00
Matt Corallo
7a42d8e4fe Minor doc tweaks to MonitorHolder
036c31c9d0 introduced some minor doc
changes but failed to imrpove the docs that is was changing fully
which this does. Suggested by @tnull in review.
2024-08-07 14:31:01 +00:00
Matt Corallo
8eff6507f7
Merge pull request #3219 from dunxen/2024-08-PR2989-followups
Fix remaining feedback and other nits for 2989
2024-08-06 14:54:01 +00:00
Elias Rohrer
3d76753a10
Merge pull request #3225 from TheBlueMatt/2024-08-3019-followups
Clean up `CommonOpenChannelFields` docs slightly
2024-08-06 02:53:30 -05:00
valentinewallace
3071bbb92e
Merge pull request #3224 from TheBlueMatt/2024-08-deprecate-send_payment
Mark ChannelManager::send_payment_with_route as deprecated and take `Route` by value
2024-08-05 12:12:42 -07:00
Matt Corallo
47351806c5 Clean up CommonOpenChannelFields docs slightly 2024-08-05 15:18:57 +00:00
Matt Corallo
c7419b4323
Merge pull request #3019 from benthecarman/is-public
Add more information to OpenChannelRequest Event
2024-08-05 15:11:27 +00:00
Matt Corallo
1ff249516d Make funding_transaction_generated take a ChannelId by value
`ChannelId` is just a 32-byte array, so there's not a lot of value
in passing it by reference to `funding_transaction_generated`,
which we fix here.

This is also nice for bindings as languages like Java can better
analyze whether the `ChannelManager` ends up with a reference to
the `ChannelId`.
2024-08-04 18:16:22 +00:00
Matt Corallo
753a7ac8f2 Make send_payment_with_route take Route by value
Now that `ChannelManager::send_payment_with_route` is deprecated,
we don't care too much about making it as effecient as possible, so
there's not much cost to making it take `Route` by value. This
avoids bindings being unsure if the by-reference `Route` passed
needs to outlive the `ChannelManager` itself or if it only needs to
outlive the method call, creating some call overhead by forcing a
`Route::clone`, but avoiding a memory leak.
2024-08-04 18:08:49 +00:00
Matt Corallo
bebd9d0fed Mark ChannelManager::send_payment_with_route as deprecated
We probably should have done this long ago a release or two after
adding `send_payment`, but we didn't and the second best time is
now.

`send_payment_with_route` has particularly hard to use retry
semantics that make it unsuitable for real use. Once we get the
last of our users off of it, we'll want to remove it (or at least
mark it test-only), but we should start by deprecating it.
2024-08-04 16:53:27 +00:00
Duncan Dean
016d7e1a2f
Fix remaining feedback and other nits for 2989 2024-08-02 12:10:45 +02:00
Jeffrey Czyz
88343366ca
Replace use of OffersContext::Unknown with None
Now that ChannelManager uses a known OffersContext when creating blinded
paths, OffersContext::Unknown is no longer needed. Remove it and update
OffersMessageHandler to us an Option, which is more idiomatic for
signifying whether a message was delivered with or without an
OffersContext.
2024-07-30 16:06:25 -05:00
Jeffrey Czyz
d2c22d58ce
Include payment hash in Bolt12Invoice reply path
Instead of using OffersContext::Unknown for the Bolt12Invoice reply path
use OffersContext::InboundPayment to include the payment hash.
OffersContext::Unknown will be removed in another commit.
2024-07-30 16:06:25 -05:00
Jeffrey Czyz
a5382ddcd5
Include payment hash when logging invoice handling 2024-07-30 16:06:25 -05:00
Jeffrey Czyz
2fc0c1b85c
Include payment hash when logging InvoiceError
By including the payment hash from the invoice in an onion message's
reply path, it can be used when logging errors as additional context.
2024-07-30 16:06:24 -05:00
Jeffrey Czyz
293543b7c3
Use different iv_bytes for blinded path metadata
Best practice is to use different IV bytes for different contexts.
Update Offer and Refund metadata computation to use different IV bytes
when the metadata is included in a blinded path. For invoice requests,
the metatdata will always be in the blinded path, so it remains the
same.
2024-07-30 16:06:24 -05:00
Jeffrey Czyz
8849efe0de
Delay adding iv_bytes to MetadataMaterial::hmac
In an upcoming commit, the iv_bytes used in MetadataMaterial will vary
depending on when whether a blinded path is included in the
corresponding message. Delay adding into MetadataMaterial::hmac as
otherwise the HmacEngine would need to be re-initialized using an
ExpandedKey, which won't be readily available.
2024-07-30 16:06:24 -05:00
Jeffrey Czyz
4a69f58ff6
Result from Bolt12Invoice::verify_using_payer_data
Use a Result return type instead of a bool when verifying a
Bolt12Invoice. This way ignoring the result will produce a compiler
warning.
2024-07-30 16:06:24 -05:00
Jeffrey Czyz
353b45f70a
Bolt12Invoice::is_for_refund_without_paths tests 2024-07-30 16:06:24 -05:00
Elias Rohrer
4a12b5f350
Merge pull request #3171 from jkczyz/2024-07-propagate-error
Include routing failures in `Bolt12PaymentError`
2024-07-30 09:11:07 -05:00
benthecarman
eb47656a46
Add more information to OpenChannelRequest Event 2024-07-29 13:56:58 -05:00
Elias Rohrer
951174afe4
Merge pull request #3196 from TheBlueMatt/2024-07-monitor-ordering
Ensure `ChannelMonitorUpdate`s are ordered with full monitor writes
2024-07-23 10:16:00 +02:00
Elias Rohrer
fafa6556f2
Merge pull request #3199 from TheBlueMatt/2024-07-funding-check
Enforce segwit inputs for all "safe" funding transactions
2024-07-23 10:10:35 +02:00
Matt Corallo
55686b9c66 Enforce segwit inputs for all "safe" funding transactions
8403755a2a introduced a separate path
for funding a channel without a full funding transaction, relying
on users to manually broadcast the funding tx. One of the major
things that makes this path less safe is that for other paths we're
supposed to validate that all inputs have witnesses, making the
funding transaction (likely) txid-non-malleable.

However, in one of several rewrites of that commit the funding tx
tests ended up getting elided in some call paths, which is fixed
here.
2024-07-22 20:03:41 +00:00
Jeffrey Czyz
718bc47664
Rename Bolt12Invoice::verify 2024-07-22 11:38:39 -05:00
Jeffrey Czyz
df5d7ea7b3
Elide nonce from payer metadata
InvoiceRequest and Refund have payer_metadata which consists of an
encrypted payment id and a nonce used to derive its signing keys and
authenticate any corresponding invoices. Now that the blinded paths
include this data in their OffersContext, remove the nonce as it is now
redundant. Keep the encrypted payment id as some data is needed in the
payer metadata according to the spec. This saves space and prevents
de-anonymization attacks as along as the nonce isn't revealed.
2024-07-22 11:38:39 -05:00
Jeffrey Czyz
4ed37d8e58
Correct docs 2024-07-22 11:38:39 -05:00
Jeffrey Czyz
e6ee1943e0
Include OffersContext in Event::InvoiceReceived
When authenticating that an invoice is for a valid invoice request, the
payer metadata is needed. Some of this data will be removed in the next
commit and instead be included in the message context of the request's
reply path. Add this data to Event::InvoiceReceived so that asynchronous
invoice handling can verify properly.
2024-07-22 11:38:36 -05:00