Commit graph

7781 commits

Author SHA1 Message Date
Matt Corallo
fc21640b1f
Merge pull request #3020 from tnull/2024-04-drop-electrsd-autodownload-for-good
Drop `electrsd`'s auto-download feature for good
2024-08-13 23:23:43 +00:00
Elias Rohrer
4320f483f2
Enable caching for bitcoind/electrs in CI 2024-08-13 15:02:46 +02:00
Matt Corallo
ae59d1dfb2 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.
2024-08-13 12:55:19 +00:00
Matt Corallo
30879ed035 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.
2024-08-13 12:55:19 +00:00
Matt Corallo
9c93bd56c2 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
2024-08-13 12:55:19 +00:00
Matt Corallo
a741a57249 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.
2024-08-13 12:55:18 +00:00
Matt Corallo
1eba737f44 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.
2024-08-13 12:54:59 +00:00
Matt Corallo
1f01f2ef67 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.
2024-08-13 12:54:59 +00:00
Matt Corallo
3b3774ee69 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`.
2024-08-13 12:54:59 +00:00
Matt Corallo
0c5922e92a 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`.
2024-08-13 12:54:59 +00:00
Matt Corallo
954b7be85a 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.
2024-08-13 12:54:59 +00:00
Matt Corallo
b97d742f91 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`.
2024-08-13 12:54:59 +00:00
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
Elias Rohrer
f316a3fef9
Upgrade all github actions to v4 variants 2024-08-13 08:50:30 +02:00
Elias Rohrer
e5fea78502
Fix misc shellcheck complaints 2024-08-13 08:50:30 +02:00
Elias Rohrer
a5aef14391
Have shellcheck check all scripts in contrib 2024-08-13 08:50:30 +02:00
Elias Rohrer
e99ff4520e
Have shellcheck check all scripts in ci 2024-08-13 08:50:30 +02:00
Elias Rohrer
3e1c9e7059
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.
2024-08-13 08:50:29 +02:00
Elias Rohrer
5f15d6f051
Move CI downloading bitcoind/electrsd to dedicated shell script
... allowing it to be sourced locally before running
`lightning-transaction-sync` tests.
2024-08-13 08:50:29 +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
e4017c49a8
Merge pull request #3236 from TheBlueMatt/2024-08-unclonable-graph
Stop relying on a `Clone`able `NetworkGraph` ref in `DefaultRouter`
2024-08-12 14:18:08 +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
Matt Corallo
795887ae09
Merge pull request #3220 from dunxen/2024-08-config-param-consistency
Set default ChannelHandshakeLimits::min_funding_satoshis to 1000
2024-08-08 20:47:18 +00: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
Matt Corallo
77f8af07ae
Merge pull request #3215 from tnull/2024-08-protect-against-merkle-leaf-node-weakness
tx-sync: Protect against Core's Merkle leaf node weakness
2024-08-08 16:10:18 +00:00
Elias Rohrer
44a479e2ae
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.
2024-08-08 14:35:33 +02: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
Matt Corallo
068d95ef9a
Merge pull request #3232 from cooltexture1/fix-#3209
Small fix for #3209
2024-08-08 00:32:37 +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
Elias Rohrer
0d2fe672c2
Merge pull request #3226 from TheBlueMatt/2024-08-rustfmt-contrib
Add a script to automatically `rustfmt` all required files
2024-08-07 01:19:46 -05:00
Matt Corallo
4c650b9830 Force locale in rustfmt shell scripts that rely on sort order 2024-08-06 15:13:59 +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