]> git.bitcoin.ninja Git - rust-lightning/log
rust-lightning
2 years agoMake `max_total_cltv_expiry_delta` include the final CLTV 2022-03-max-cltv
Matt Corallo [Wed, 9 Mar 2022 23:04:15 +0000 (23:04 +0000)]
Make `max_total_cltv_expiry_delta` include the final CLTV

This fixes an integer underflow found by the `router` fuzz target
in CI.

2 years agoMake routing benchmark robust against path changes
Matt Corallo [Thu, 10 Mar 2022 21:07:37 +0000 (21:07 +0000)]
Make routing benchmark robust against path changes

If the scoring in the routing benchmark causes us to take a
different path from the original scan, we may end up deciding that
the only path to a node has a too-high total CLTV delta, causing us
to panic in the benchmarking phase.

Here we simply check for that possibility and remove paths that
fail post-scoring.

2 years agoMerge pull request #1348 from TheBlueMatt/2022-03-timer-tick-count
Matt Corallo [Wed, 9 Mar 2022 21:28:05 +0000 (21:28 +0000)]
Merge pull request #1348 from TheBlueMatt/2022-03-timer-tick-count

Reduce the number of timer ticks a peer is allowed to take

2 years agoMerge pull request #1355 from lightningdevkit/dependabot/cargo/lightning/regex-0...
Matt Corallo [Wed, 9 Mar 2022 21:27:50 +0000 (21:27 +0000)]
Merge pull request #1355 from lightningdevkit/dependabot/cargo/lightning/regex-0.2.11

Update regex requirement from 0.1.80 to 0.2.11 in /lightning

2 years agoMerge pull request #1286 from tnull/add_random_cltv_offsets
Jeffrey Czyz [Wed, 9 Mar 2022 19:08:57 +0000 (13:08 -0600)]
Merge pull request #1286 from tnull/add_random_cltv_offsets

Add random 'shadow route' CLTV delta offsets to improve privacy

2 years agoUpdate regex requirement from 0.1.80 to 0.2.11 in /lightning
dependabot[bot] [Wed, 9 Mar 2022 17:38:53 +0000 (17:38 +0000)]
Update regex requirement from 0.1.80 to 0.2.11 in /lightning

Updates the requirements on [regex](https://github.com/rust-lang/regex) to permit the latest version.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/0.1.80...0.2.11)

---
updated-dependencies:
- dependency-name: regex
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2 years agoAdd a random per-path CLTV offset for privacy.
Elias Rohrer [Wed, 9 Mar 2022 17:13:47 +0000 (11:13 -0600)]
Add a random per-path CLTV offset for privacy.

2 years agoMerge pull request #1347 from jkczyz/2022-03-log-approximation
Jeffrey Czyz [Wed, 9 Mar 2022 16:19:25 +0000 (10:19 -0600)]
Merge pull request #1347 from jkczyz/2022-03-log-approximation

Use log approximation in ProbabilisticScorer

2 years agoCheck for no-std compatibility across dependencies
Jeffrey Czyz [Fri, 4 Mar 2022 07:59:44 +0000 (23:59 -0800)]
Check for no-std compatibility across dependencies

To ensure no-std is honored across dependencies, add a crate depending
on lightning crates supporting no-std. This should ensure any
regressions are caught. Otherwise, cargo doesn't seem to catch some
incompatibilities (e.g., f64::log10 unavailable in core) and seemingly
across other dependencies as describe here:

https://blog.dbrgn.ch/2019/12/24/testing-for-no-std-compatibility/

2 years agoFix compilation warnings with --features=no-std
Jeffrey Czyz [Thu, 3 Mar 2022 23:41:44 +0000 (15:41 -0800)]
Fix compilation warnings with --features=no-std

2 years agoUse log approximation in ProbabilisticScorer
Jeffrey Czyz [Thu, 3 Mar 2022 19:52:39 +0000 (11:52 -0800)]
Use log approximation in ProbabilisticScorer

Since f64::log10 exists in std but not core, unconditionally use log
approximation so --feature=no-std will compile.

2 years agoReduce the number of timer ticks a peer is allowed to take 2022-03-timer-tick-count
Matt Corallo [Mon, 7 Mar 2022 19:02:15 +0000 (19:02 +0000)]
Reduce the number of timer ticks a peer is allowed to take

In 2d3a2108979adca6b7632e2d59c10e4b131e8bf4, we increased the
default ping timer in `lightning-background-processor` to ten
seconds from five. However, we didn't change the timer count at
which we disconnect peers if they're not responding, which we
likely should have done. We do so here, as well as update the
documentation for `PeerManager::timer_tick_occurred` to suggest
always ticking the timer every ten seconds instead of five.

2 years agoMerge pull request #1317 from TheBlueMatt/2022-02-fix-bunk-test
Matt Corallo [Sat, 5 Mar 2022 20:54:57 +0000 (20:54 +0000)]
Merge pull request #1317 from TheBlueMatt/2022-02-fix-bunk-test

Fix what `bolt2_open_channel_sending_node_checks_part1` tests

2 years agoClean up `TestKeysInterface` random bytes override interface 2022-02-fix-bunk-test
Matt Corallo [Fri, 4 Mar 2022 21:31:55 +0000 (21:31 +0000)]
Clean up `TestKeysInterface` random bytes override interface

Its very confusing to have multiple fields that do the same thing,
one of which isn't even used for its stated purpose anymore after
the previous few commits.

2 years agoFix what `bolt2_open_channel_sending_node_checks_part1` tests
Matt Corallo [Wed, 16 Feb 2022 05:36:54 +0000 (05:36 +0000)]
Fix what `bolt2_open_channel_sending_node_checks_part1` tests

There are currently two issues with
`bolt2_open_channel_sending_node_checks_part1` which counteract
each other and hide that the test isn't testing what it should be.

First of all, the final `create_channel` call actually fails
because we try to open a channel with ourselves, instead of
panicing as the test is supposed to check for.

However, when we fix the create_channel call to panic, when we
drop `nodes[1]` after `create_channel` panics, we fail the
no-pending-messages test as it as an expeted `accept_channel` in
its outbound buffer. This causes a double-panic.

Previously, these two offset each other - instead of panicing in
`create_channel` we'd panic in the Node drop checks.

This fixes both by fetching the `accept_channel` before we go into
the panic'ing `create_channel` call (who's arguments were
corrected).

2 years agoMerge pull request #1343 from lightningdevkit/dependabot/github_actions/actions/check...
valentinewallace [Thu, 3 Mar 2022 19:35:01 +0000 (14:35 -0500)]
Merge pull request #1343 from lightningdevkit/dependabot/github_actions/actions/checkout-3

Bump actions/checkout from 2 to 3

2 years agoMerge pull request #1346 from TheBlueMatt/2022-03-clones
valentinewallace [Thu, 3 Mar 2022 19:34:07 +0000 (14:34 -0500)]
Merge pull request #1346 from TheBlueMatt/2022-03-clones

Add Clone to a few structs which contain only a few fields

2 years agoAdd Clone to a few structs which contain only a few fields 2022-03-clones
Matt Corallo [Thu, 3 Mar 2022 18:09:46 +0000 (18:09 +0000)]
Add Clone to a few structs which contain only a few fields

Specifically, `PhantomRouteHints`, `FixedPenaltyScorer`, and
`ScoringParamters`.

2 years agoMerge pull request #1310 from TheBlueMatt/2022-02-bump-msrv
Matt Corallo [Wed, 2 Mar 2022 19:09:14 +0000 (19:09 +0000)]
Merge pull request #1310 from TheBlueMatt/2022-02-bump-msrv

Bump MSRV to 1.41.1.

2 years agoBump actions/checkout from 2 to 3
dependabot[bot] [Wed, 2 Mar 2022 17:35:18 +0000 (17:35 +0000)]
Bump actions/checkout from 2 to 3

Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2 years agoMerge pull request #1339 from TheBlueMatt/2022-02-0.0.105-sec v0.0.105
Matt Corallo [Tue, 1 Mar 2022 04:13:19 +0000 (04:13 +0000)]
Merge pull request #1339 from TheBlueMatt/2022-02-0.0.105-sec

0.0.105 Security Fixes

2 years agoUpdate CHANGELOG with security info for 0.0.105 2022-02-0.0.105-sec
Matt Corallo [Mon, 28 Feb 2022 22:53:16 +0000 (22:53 +0000)]
Update CHANGELOG with security info for 0.0.105

2 years agoMerge branch '2022-02-bal-panic' into 2022-02-0.0.105-sec
Matt Corallo [Tue, 1 Mar 2022 02:23:14 +0000 (02:23 +0000)]
Merge branch '2022-02-bal-panic' into 2022-02-0.0.105-sec

2 years agoMerge branch '2022-02-fix-multi-hop-hint-panic' into 2022-02-0.0.105-sec
Matt Corallo [Tue, 1 Mar 2022 02:23:07 +0000 (02:23 +0000)]
Merge branch '2022-02-fix-multi-hop-hint-panic' into 2022-02-0.0.105-sec

2 years agoMerge pull request #1322 from TheBlueMatt/2022-02-0.0.105
Matt Corallo [Tue, 1 Mar 2022 02:22:00 +0000 (02:22 +0000)]
Merge pull request #1322 from TheBlueMatt/2022-02-0.0.105

Cut 0.0.105

2 years agoEnsure `get_claimable_balances` never panicks in tests
Matt Corallo [Fri, 25 Feb 2022 05:18:29 +0000 (05:18 +0000)]
Ensure `get_claimable_balances` never panicks in tests

... by calling it both before and after every chain event in
testing and fuzzing.

This requires fixing some blockchain inconsistencies in
`do_test_onchain_htlc_reorg`, `do_retry_with_no_persist`, and
`do_test_dup_htlc_onchain_fails_on_reload` where we'd connect
conflicting transactions in the same chain.

2 years agoFix HTLC tx balance calculation on local commitment transactions
Matt Corallo [Fri, 25 Feb 2022 05:14:00 +0000 (05:14 +0000)]
Fix HTLC tx balance calculation on local commitment transactions

When handling the broadcast of a local commitment transactions
(with associated CSV delays prior to spendability), we incorrectly
handled the CSV delays on HTLC transactions. This caused us to miss
spendable outputs for HTLCs which were awaiting a CSV delay.

Further, because of this, we could hit an assertion as
`get_claimable_balances` asserted that HTLCs were resolved after
the funding spend was resolved, which was not true if the HTLC did
not have a CSV delay attached (due to the above bug or due to it
being an HTLC claim by our counterparty).

This fixes both bugs, also converting some assertions to
`debug_assert`s to avoid future issues as balance mis-calculation
is not currently an indication of potential funds loss.

Thanks to Cash App for reporting this bug.

2 years agoBump crate versions to 0.0.105/invoice 0.13 2022-02-0.0.105
Matt Corallo [Fri, 18 Feb 2022 22:13:21 +0000 (22:13 +0000)]
Bump crate versions to 0.0.105/invoice 0.13

2 years agoFill out CHANGELOG for 0.0.105
Matt Corallo [Fri, 18 Feb 2022 22:12:14 +0000 (22:12 +0000)]
Fill out CHANGELOG for 0.0.105

2 years agoCorrect default value for A* heuristic for non-public nodes
Matt Corallo [Thu, 10 Feb 2022 21:33:26 +0000 (21:33 +0000)]
Correct default value for A* heuristic for non-public nodes

This doesn't (appear) to change behavior, however if we have a
non-public node, we assign an A* heuristic of max-u32 fees, which
may result in us de-prioritizing the path in some rare cases around
multi-hop route hints which compete with public nodes.

2 years agoFix panic when routing through multiple private last-hops
Matt Corallo [Thu, 10 Feb 2022 21:29:43 +0000 (21:29 +0000)]
Fix panic when routing through multiple private last-hops

When we added support for routing through a multi-hop invoice hint
we failed to remove an assertion that we always are able to fill
in features for each hop except the last one. However, when a
multi-hop invoice hint is used, we will not have features for any
of the hinted hops, causing us to panic.

2 years agoMerge pull request #1327 from TheBlueMatt/2022-02-log-before-panic
Arik Sosman [Mon, 28 Feb 2022 22:03:03 +0000 (14:03 -0800)]
Merge pull request #1327 from TheBlueMatt/2022-02-log-before-panic

2 years agoMerge pull request #1303 from jkczyz/2022-02-docs-with-features
Matt Corallo [Mon, 28 Feb 2022 21:00:05 +0000 (21:00 +0000)]
Merge pull request #1303 from jkczyz/2022-02-docs-with-features

Generate docs with features for docs.rs

2 years agoMerge pull request #1335 from TheBlueMatt/2022-02-fix-honggfuzz-regression
valentinewallace [Mon, 28 Feb 2022 18:50:03 +0000 (13:50 -0500)]
Merge pull request #1335 from TheBlueMatt/2022-02-fix-honggfuzz-regression

Pin rustc in fuzzing to 1.58 due to honggfuzz-rs regression

2 years agoMerge pull request #1324 from valentinewallace/2022-02-phantom-followup
Matt Corallo [Mon, 28 Feb 2022 18:16:21 +0000 (18:16 +0000)]
Merge pull request #1324 from valentinewallace/2022-02-phantom-followup

#1199 Followup

2 years agoMerge pull request #1332 from TheBlueMatt/2022-02-persister-ignore-tmp
Matt Corallo [Sat, 26 Feb 2022 01:30:29 +0000 (01:30 +0000)]
Merge pull request #1332 from TheBlueMatt/2022-02-persister-ignore-tmp

Ignore .tmp files when loading ChannelMonitors in persister

2 years agoPin rustc in fuzzing to 1.58 due to honggfuzz-rs regression 2022-02-fix-honggfuzz-regression
Matt Corallo [Fri, 25 Feb 2022 22:09:30 +0000 (22:09 +0000)]
Pin rustc in fuzzing to 1.58 due to honggfuzz-rs regression

2 years agoFix bug where we encode flags field into all updates on htlc fail
Valentine Wallace [Thu, 24 Feb 2022 03:20:43 +0000 (22:20 -0500)]
Fix bug where we encode flags field into all updates on htlc fail

Failing an HTLC with onion error channel_disabled requires encoding a 'flags' field into the failure
packet. However, we were encoding this 'flags' field for all failures packets that were failing on
update_add_htlc with an update (error 0x1000 UPDATE).

Discovered in the course of adding phantom payment failure tests, which also added testing for this bug

2 years agoCorrectly wrap phantom onion errors
Valentine Wallace [Fri, 25 Feb 2022 03:28:58 +0000 (22:28 -0500)]
Correctly wrap phantom onion errors

In any place where fail_htlc_backwards_internal was called for a phantom payment
failure, we weren't encoding the onion failure as if the phantom were the one
failing. Instead, we were encoding the failure as if it were coming from the
second-to-last hop. This caused our failures to not be parsed properly on the
payer's side.

Places we were encoding failures incorrectly include:
* on failure of a call to inbound_payment::verify
* on a user call to fail_htlc_backwards

Also drop some unnecessary panics when reading OnionHopData objects. This also
enables one of the phantom failure tests because we can construct OnionHopDatas
with invalid amounts.

Lastly, remove a bogus comment

2 years agoFix phantom malformed onion error packet
Valentine Wallace [Fri, 25 Feb 2022 03:19:20 +0000 (22:19 -0500)]
Fix phantom malformed onion error packet

Ensure we fail back phantom malformed payments with an update_fail_htlc s.t.
the error contains the sha256 of the onion, per LN protocol.

2 years agoAdd phantom shared secret to HTLCPreviousHopData
Valentine Wallace [Fri, 25 Feb 2022 03:14:02 +0000 (22:14 -0500)]
Add phantom shared secret to HTLCPreviousHopData

This also fixes a bug where we were failing back phantom payments with the
wrong scid, causing them to never actually be failed backwards (L3022 in
channelmanager.rs)

This new field will be used in upcoming commit(s) to encrypt phantom payment failure
packets.

2 years agoAdd phantom shared secret to PendingHTLCRouting::Receive
Valentine Wallace [Fri, 25 Feb 2022 02:18:48 +0000 (21:18 -0500)]
Add phantom shared secret to PendingHTLCRouting::Receive

This will be used in upcoming commit(s) to encrypt phantom payment failure packets.

2 years agoMerge pull request #1318 from jurvis/jurvis/2022-02-log-router-penalty-data-4
Matt Corallo [Thu, 24 Feb 2022 19:50:51 +0000 (19:50 +0000)]
Merge pull request #1318 from jurvis/jurvis/2022-02-log-router-penalty-data-4

Implement custom debug for PathBuildingHop

2 years agoIgnore .tmp files when loading ChannelMonitors in persister 2022-02-persister-ignore-tmp
Matt Corallo [Wed, 23 Feb 2022 22:06:33 +0000 (22:06 +0000)]
Ignore .tmp files when loading ChannelMonitors in persister

If we are in the middle of persisting an update to a
`ChannelMonitor` when we shutdown (or crash), we'll start up with
a .tmp file lying around. We should ignore it, as failure to
return from the update call should have prevented the
`ChannelManager` from taking any irrevocable action based on the
update.

We're somewhat protected from any filesystem inconsistency behavior
as the `ChannelManager` will refuse to load if we're outright
missing `ChannelMonitor`s.

Fixes #1330.

2 years agoImplement custom debug for PathBuildingHop
Jurvis Tan [Sat, 12 Feb 2022 04:38:13 +0000 (20:38 -0800)]
Implement custom debug for PathBuildingHop

Add other fields to log for PathBuildingHop

Use DebugStruct to print PathBuildingHop

Fix PathBuildingHop visibility

Add more useful fee print-outs

Remove Features<NodeContext> from hop print-out

Remove logging fields we don’t need

Add fields to log back to PathBuildingHop

2 years agoMerge pull request #1309 from TheBlueMatt/2022-02-first-hop-log
valentinewallace [Tue, 22 Feb 2022 17:23:32 +0000 (12:23 -0500)]
Merge pull request #1309 from TheBlueMatt/2022-02-first-hop-log

Specify whether we have first-hop hints when routing

2 years agoFollow-up nits from #1199 (phantom node support)
Valentine Wallace [Sat, 19 Feb 2022 21:41:38 +0000 (16:41 -0500)]
Follow-up nits from #1199 (phantom node support)

2 years agoLog more during ChannelMonitor updating 2022-02-log-before-panic
Matt Corallo [Tue, 22 Feb 2022 00:18:09 +0000 (00:18 +0000)]
Log more during ChannelMonitor updating

Fixes #1323.

2 years agoMerge pull request #1314 from TheBlueMatt/2022-02-accept_chan_type
Arik Sosman [Fri, 18 Feb 2022 21:53:09 +0000 (13:53 -0800)]
Merge pull request #1314 from TheBlueMatt/2022-02-accept_chan_type

Update channel-type implementation to upstream spec as merged

2 years agoGenerate docs with features for docs.rs
Jeffrey Czyz [Sat, 12 Feb 2022 04:22:20 +0000 (22:22 -0600)]
Generate docs with features for docs.rs

Enable generating docs using --all-features or --features="std" where
applicable. Additionally, use doc_auto_cfg to tag items requiring a
feature.

https://doc.rust-lang.org/nightly/rustdoc/unstable-features.html#doc_auto_cfg-automatically-generate-doccfg

This requires building with nightly, which is what is used by docs.rs.

https://docs.rs/about/builds

To test locally, use:

RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc ...

2 years agoFix rustdoc error on nightly
Jeffrey Czyz [Sat, 12 Feb 2022 04:17:27 +0000 (22:17 -0600)]
Fix rustdoc error on nightly

2 years agoUnhide struct docs in scoring module
Jeffrey Czyz [Sat, 12 Feb 2022 04:14:06 +0000 (22:14 -0600)]
Unhide struct docs in scoring module

The docs were hidden since a type alias should be used. However, the
alias docs don't contain much useful information and don't link to the
corresponding struct.

2 years agoFix `cargo doc` warning in lightning-block-sync
Jeffrey Czyz [Sat, 12 Feb 2022 04:12:33 +0000 (22:12 -0600)]
Fix `cargo doc` warning in lightning-block-sync

2 years agoSpecify whether we have first-hop hints when routing 2022-02-first-hop-log
Matt Corallo [Tue, 15 Feb 2022 20:59:40 +0000 (20:59 +0000)]
Specify whether we have first-hop hints when routing

This is incredibly useful when debugging issues with the router,
and is somewhat of an oversight currently.

2 years agoMerge pull request #1316 from TheBlueMatt/2022-02-no-fuzztarget
Matt Corallo [Fri, 18 Feb 2022 19:18:30 +0000 (19:18 +0000)]
Merge pull request #1316 from TheBlueMatt/2022-02-no-fuzztarget

Drop `fuzztarget` feature entirely

2 years agoAdd explicit compile errors when cfg=fuzzing is mis-set 2022-02-no-fuzztarget
Matt Corallo [Fri, 18 Feb 2022 15:54:56 +0000 (15:54 +0000)]
Add explicit compile errors when cfg=fuzzing is mis-set

2 years agoDrop `fuzztarget` feature entirely
Matt Corallo [Thu, 17 Feb 2022 19:29:59 +0000 (19:29 +0000)]
Drop `fuzztarget` feature entirely

Some time ago we started transitioning to `cfg(fuzzing)` instead of
exposing a full feature. Here we complete the transition.

2 years agoMerge pull request #1315 from TheBlueMatt/2022-02-fix-tokio-msrv
Matt Corallo [Thu, 17 Feb 2022 19:51:13 +0000 (19:51 +0000)]
Merge pull request #1315 from TheBlueMatt/2022-02-fix-tokio-msrv

Restrict tokio to 1.14 as a dev-dependency

2 years agoRestrict tokio to 1.14 as a dev-dependency 2022-02-fix-tokio-msrv
Matt Corallo [Thu, 17 Feb 2022 17:41:15 +0000 (17:41 +0000)]
Restrict tokio to 1.14 as a dev-dependency

This maintains our MSRV for simple `cargo test` runs, but doesn't
restrict users to any specific 1.X tokio version.

2 years agoMerge pull request #1266 from TheBlueMatt/2022-01-fix-double-fail-panic
Matt Corallo [Thu, 17 Feb 2022 03:41:50 +0000 (03:41 +0000)]
Merge pull request #1266 from TheBlueMatt/2022-01-fix-double-fail-panic

Fix a debug panic caused by receiving MPP parts after a failure

2 years agoFix a debug panic caused by receiving MPP parts after a failure 2022-01-fix-double-fail-panic
Matt Corallo [Wed, 19 Jan 2022 03:52:56 +0000 (03:52 +0000)]
Fix a debug panic caused by receiving MPP parts after a failure

Prior to cryptographic payment secrets, when we process a received
payment in `process_pending_htlc_fowards` we'd remove its entry
from the `pending_inbound_payments` map and give the user a
`PaymentReceived` event.

Thereafter, if a second HTLC came in with the same payment hash, it
would find no entry in the `pending_inbound_payments` map and be
immediately failed in `process_pending_htlc_forwards`.

Thus, each HTLC will either result in a `PaymentReceived` event or
be failed, with no possibility for both.

As of 846487555556d8465c5b7b811f976e78f265c48f, we no longer
materially have a pending-inbound-payments map, and thus
more-than-happily accept a second payment with the same payment
hash even if we just failed a previous one for having mis-matched
payment data.

This can cause an issue if the two HTLCs are received back-to-back,
with the first being accepted as valid, generating a
`PaymentReceived` event. Then, when the second comes in we'll hit
the "total value {} ran over expected value" condition and fail
*all* pending HTLCs with the same payment hash. At this point,
we'll have a pending failure for both HTLCs, as well as a
`PaymentReceived` event for the user.

Thereafter, if the user attempts to fail the HTLC in response to
the `PaymentReceived`, they'll get a debug panic at channel.rs:1657
'Tried to fail an HTLC that was already failed'.

The solution is to avoid bulk-failing all pending HTLCs for a
payment. This feels like the right thing to do anyway - if a sender
accidentally sends an extra HTLC after a payment has ben fully
paid, we shouldn't fail the entire payment.

Found by the `chanmon_consistency` fuzz test.

2 years agoUpdate channel-type implementation to upstream spec as merged 2022-02-accept_chan_type
Matt Corallo [Wed, 16 Feb 2022 21:34:16 +0000 (21:34 +0000)]
Update channel-type implementation to upstream spec as merged

Somehow, our channel type implementation doesn't echo back the
channel type as we believe it was negotiated, as we should. Though
the spec doesn't explicitly require this, some implementations may
require it and it appears to have been in the BOLTs from the start
of the channel type logic.

2 years agoDrop spurious whitespace in channel.rs
Matt Corallo [Wed, 16 Feb 2022 21:12:22 +0000 (21:12 +0000)]
Drop spurious whitespace in channel.rs

2 years agoUse "Minimum", not "Minmal" for MSRV. 2022-02-bump-msrv
Matt Corallo [Tue, 15 Feb 2022 22:18:49 +0000 (22:18 +0000)]
Use "Minimum", not "Minmal" for MSRV.

2 years agoMerge pull request #1199 from valentinewallace/2021-11-phantom-node
Jeffrey Czyz [Tue, 15 Feb 2022 21:43:10 +0000 (15:43 -0600)]
Merge pull request #1199 from valentinewallace/2021-11-phantom-node

Add support for multi-node receive

2 years agoBump MSRV to 1.41.1.
Matt Corallo [Tue, 8 Feb 2022 21:28:11 +0000 (21:28 +0000)]
Bump MSRV to 1.41.1.

1.41.1 is currently the Firefox ESR MSRV, which means its also the
version several Linux distros ship. Further, rust-bitcoin is likely
to make a similar change soon, see
https://github.com/rust-bitcoin/rust-bitcoin/issues/510.

2 years agoDon't send channel updates for private chans on error 2022-02-multi-node-review-mark
Valentine Wallace [Fri, 4 Feb 2022 20:21:01 +0000 (15:21 -0500)]
Don't send channel updates for private chans on error

This commit also adds additional checks for the second-to-last (phantom) hop for phantom payments.

2 years agoSupport phantom payment receive in ChannelManager, with invoice util
Valentine Wallace [Thu, 20 Jan 2022 20:29:41 +0000 (15:29 -0500)]
Support phantom payment receive in ChannelManager, with invoice util

See PhantomKeysManager and invoice util's create_phantom_invoice for more info

2 years agoAdd get_phantom_scid and get_phantom_route_hints + scid_utils::fake_scid module
Valentine Wallace [Thu, 30 Dec 2021 21:13:56 +0000 (16:13 -0500)]
Add get_phantom_scid and get_phantom_route_hints + scid_utils::fake_scid module

See method and module docs for more details

2 years agochannelmanager: DRY PendingHTLCInfo creation for receives
Valentine Wallace [Mon, 10 Jan 2022 20:58:28 +0000 (15:58 -0500)]
channelmanager: DRY PendingHTLCInfo creation for receives

Will be used to facilitate decoding multiple onion layers for phantom payment receive

2 years agoscid_utils: add utils for retrieving txindex and vout
Valentine Wallace [Fri, 31 Dec 2021 22:14:48 +0000 (17:14 -0500)]
scid_utils: add utils for retrieving txindex and vout

2 years agokeysinterface: adapt get_node_secret for phantom payments
Valentine Wallace [Wed, 9 Feb 2022 22:22:53 +0000 (17:22 -0500)]
keysinterface: adapt get_node_secret for phantom payments

We want LDK to be able to retrieve the phantom secret key when we see that a payment
is destined for a phantom node.

2 years agoKeysInterface::sign_invoice: indicate whether invoice is a phantom
Valentine Wallace [Tue, 1 Feb 2022 22:33:57 +0000 (17:33 -0500)]
KeysInterface::sign_invoice: indicate whether invoice is a phantom

2 years agokeysmanager: support phantom payments with PhantomKeysManager
Valentine Wallace [Mon, 27 Dec 2021 20:11:03 +0000 (15:11 -0500)]
keysmanager: support phantom payments with PhantomKeysManager

To support the feature of generating invoices that can be paid to any of
multiple nodes, a key manager need to be able to share an inbound_payment_key
and phantom secret key. This is because a phantom payment may be received by
any node participating in the invoice, so all nodes must be able to decrypt the
phantom payment (and therefore must share decryption key(s)) in the act of
pretending to be the phantom node. Thus we add a new `PhantomKeysManager` that
supports these features.

To be more specific, the inbound payment key must be shared because it is used
to decrypt the payment details for verification (LDK avoids storing inbound
payment data by encrypting payment metadata in the payment hash and/or payment
secret).

The phantom secret must be shared because enables any real node included in the
phantom invoice to decrypt the final layer of the onion packet, since the onion
is encrypted by the sender using the phantom public key provided in the
invoice.

2 years agoDRY shared hkdf_extract_expand code to new module
Valentine Wallace [Thu, 27 Jan 2022 18:40:30 +0000 (13:40 -0500)]
DRY shared hkdf_extract_expand code to new module

2 years agoImplement serialization for ChannelDetails
Valentine Wallace [Thu, 27 Jan 2022 19:56:02 +0000 (14:56 -0500)]
Implement serialization for ChannelDetails

Will be used in upcoming commit(s) where it may be desirable to cache ChannelDetails routehints

2 years agoRefactor out decode_next_hop util from ChannelManager::decode_update_add_htlc
Valentine Wallace [Tue, 9 Nov 2021 00:49:35 +0000 (19:49 -0500)]
Refactor out decode_next_hop util from ChannelManager::decode_update_add_htlc

This will be used in upcoming commit(s) to facilitate decoding multiple onion layers for
multi-node payment receive

2 years agoMerge pull request #1301 from TheBlueMatt/2022-02-router-no-test
Matt Corallo [Mon, 14 Feb 2022 18:29:03 +0000 (18:29 +0000)]
Merge pull request #1301 from TheBlueMatt/2022-02-router-no-test

Work around rustc bug on nightly and make benchmarks not run test code

2 years agoMerge pull request #1305 from ConorOkus/update-readme
valentinewallace [Mon, 14 Feb 2022 18:01:55 +0000 (13:01 -0500)]
Merge pull request #1305 from ConorOkus/update-readme

Update README to include community invite links

2 years agoMerge pull request #1281 from ViktorTigerstrom/2022-01-accept-or-reject-channels
Matt Corallo [Mon, 14 Feb 2022 17:54:22 +0000 (17:54 +0000)]
Merge pull request #1281 from ViktorTigerstrom/2022-01-accept-or-reject-channels

Add option accept or reject channel requests

2 years agoMerge pull request #1304 from jkczyz/2021-12-remove-mut-ref
valentinewallace [Mon, 14 Feb 2022 17:23:02 +0000 (12:23 -0500)]
Merge pull request #1304 from jkczyz/2021-12-remove-mut-ref

Remove unnecessary mut from reference

2 years agoUpdate README to include community invite links
Conor Okus [Mon, 14 Feb 2022 11:47:00 +0000 (11:47 +0000)]
Update README to include community invite links

2 years agoAdd tests for responding to inbound channel reqs
Viktor Tigerström [Mon, 7 Feb 2022 23:54:41 +0000 (00:54 +0100)]
Add tests for responding to inbound channel reqs

Add functional tests for manually responding to inbound channel requests.
Responding to inbound channel requests are required when the
`manually_accept_inbound_channels` config flag is set to true.

The tests cover the following cases:
* Accepting an inbound channel request
* Rejecting an inbound channel request
* FundingCreated message sent by the counterparty before accepting the
inbound channel request
* Attempting to accept an inbound channel request twice
* Attempting to accept an unkown inbound channel

2 years agoAdd option to accept or reject inbound channels
Viktor Tigerström [Tue, 25 Jan 2022 23:21:22 +0000 (00:21 +0100)]
Add option to accept or reject inbound channels

Add a new config flag `UserConfig::manually_accept_inbound_channels`,
which when set to true allows the node operator to accept or reject new
channel requests.

When set to true, `Event::OpenChannelRequest` will be triggered once a
request to open a new inbound channel is received. When accepting the
request, `ChannelManager::accept_inbound_channel` should be called.
Rejecting the request is done through
`ChannelManager::force_close_channel`.

2 years agoRemove unnecessary mut from reference
Jeffrey Czyz [Sat, 4 Dec 2021 18:08:05 +0000 (12:08 -0600)]
Remove unnecessary mut from reference

chain::Listen's interface is defined in terms of non-mutable references,
so there's no need to use mutable references in lightning-block-sync.

2 years agoMerge pull request #1292 from TheBlueMatt/2022-02-override-handshake-limits
valentinewallace [Sat, 12 Feb 2022 00:45:44 +0000 (19:45 -0500)]
Merge pull request #1292 from TheBlueMatt/2022-02-override-handshake-limits

Store override counterparty handshake limits until we enforce them

2 years agoMerge pull request #1268 from TheBlueMatt/2022-01-balance-underflow
Arik Sosman [Fri, 11 Feb 2022 00:30:48 +0000 (16:30 -0800)]
Merge pull request #1268 from TheBlueMatt/2022-01-balance-underflow

Include inbound-claimed-HTLCs in reported channel balances

2 years agoMake router benchmarks more realistic by not running test-only code 2022-02-router-no-test
Matt Corallo [Thu, 10 Feb 2022 21:13:19 +0000 (21:13 +0000)]
Make router benchmarks more realistic by not running test-only code

`cargo bench` sets `cfg(test)`, causing us to hit some test-only
code in the router when benchmarking, throwing off our benchmarks
substantially. Here we swap from the `unstable` feature to a more
clearly internal feature (`_bench_unstable`) and also checking for
it when enabling test-only code.

2 years agoInclude inbound-claimed-HTLCs in reported channel balances 2022-01-balance-underflow
Matt Corallo [Thu, 20 Jan 2022 04:28:38 +0000 (04:28 +0000)]
Include inbound-claimed-HTLCs in reported channel balances

Given the balance is reported as "total balance if we went to chain
ignoring fees", it seems reasonable to include claimed HTLCs - if
we went to chain we'd get those funds, less on-chain fees. Further,
if we do not include them, its possible to have pending outbound
holding-cell HTLCs underflow the balance calculation, causing a
panic in debug mode, and bogus values in release.

This resolves a subtraction underflow bug found by the
`chanmon_consistency` fuzz target.

2 years agoWork around rustc compilation regression on nightly
Matt Corallo [Thu, 10 Feb 2022 21:11:59 +0000 (21:11 +0000)]
Work around rustc compilation regression on nightly

Apparently rustc doesn't (actually) provide any kind of
compilation-stability guarantees, despite their claims. Here we
work around rustc being unstable by making the trait call explicit.

See also https://github.com/rust-lang/rust/issues/93599

2 years agoMerge pull request #1299 from p2pderivatives/make-counterpartycommitmentsecrets-public
Matt Corallo [Thu, 10 Feb 2022 17:12:27 +0000 (17:12 +0000)]
Merge pull request #1299 from p2pderivatives/make-counterpartycommitmentsecrets-public

Make CounterpartyCommitmentSecrets public

2 years agoMake CounterpartyCommitmentSecrets public
Tibo-lg [Tue, 8 Feb 2022 01:25:12 +0000 (10:25 +0900)]
Make CounterpartyCommitmentSecrets public

2 years agoMerge pull request #1285 from TheBlueMatt/2022-01-remove-closed-issue-ref
Matt Corallo [Fri, 4 Feb 2022 19:42:26 +0000 (19:42 +0000)]
Merge pull request #1285 from TheBlueMatt/2022-01-remove-closed-issue-ref

Remove stale reference to incomplete BOLT compliance

2 years agoMerge pull request #1227 from jkczyz/2021-12-probabilistic-scorer
valentinewallace [Thu, 3 Feb 2022 15:50:49 +0000 (10:50 -0500)]
Merge pull request #1227 from jkczyz/2021-12-probabilistic-scorer

Probabilistic channel scoring

2 years agoAdd ProbabilisticScorer benchmarks
Jeffrey Czyz [Mon, 17 Jan 2022 04:54:42 +0000 (22:54 -0600)]
Add ProbabilisticScorer benchmarks

2 years agoDeprecate Scorer in favor of ProbabilisticScorer
Jeffrey Czyz [Mon, 17 Jan 2022 04:12:58 +0000 (22:12 -0600)]
Deprecate Scorer in favor of ProbabilisticScorer

2 years agoDecay channel liquidity balance offsets
Jeffrey Czyz [Wed, 5 Jan 2022 00:15:59 +0000 (18:15 -0600)]
Decay channel liquidity balance offsets

ProbabilisticScorer uses successful and unsuccessful payments to gain
more certainty of a channel's liquidity balance. Decay this knowledge
over time to indicate decreasing certainty about the liquidity balance.

2 years agoProbabilistic channel scoring
Jeffrey Czyz [Mon, 3 Jan 2022 14:35:19 +0000 (08:35 -0600)]
Probabilistic channel scoring

Add a Score implementation based on "Optimally Reliable & Cheap Payment
Flows on the Lightning Network" by Rene Pickhardt and Stefan Richter[1].
Given the uncertainty of channel liquidity balances, probability
distributions are defined based on knowledge learned from successful and
unsuccessful attempts. Then the negative log of the success probability
is used to determine the cost of routing a specific HTLC amount through
a channel.

[1]: https://arxiv.org/abs/2107.05322

2 years agoEffective channel capacity for router and scoring
Jeffrey Czyz [Wed, 29 Dec 2021 15:56:54 +0000 (09:56 -0600)]
Effective channel capacity for router and scoring

A channel's capacity may be inferred or learned and is used to make
routing decisions, including as a parameter to channel scoring. Define
an EffectiveCapacity for this purpose. Score::channel_penalty_msat takes
the effective capacity (less in-flight HTLCs for the same payment), and
never None. Thus, for hops given in an invoice, the effective capacity
is now considered (near) infinite if over a private channel or based on
learned information if over a public channel.

If a Score implementations needs the effective capacity when updating a
channel's score, i.e. in payment_path_failed or payment_path_successful,
it can access the channel's EffectiveCapacity via the NetworkGraph by
first looking up the channel and then specifying which direction is
desired using ChannelInfo::as_directed.

2 years agoStore override counterparty handshake limits until we enforce them 2022-02-override-handshake-limits
Matt Corallo [Tue, 1 Feb 2022 21:16:27 +0000 (21:16 +0000)]
Store override counterparty handshake limits until we enforce them

We currently allow users to provide an `override_config` in
`ChannelManager::create_channel` which it seems should apply to the
channel. However, because we don't store any of it, the only parts
which we apply to the channel are those which are set in the
`Channel` object immediately in `Channel::new_outbound` and used
from there.

This is great in most cases, however the
`UserConfig::peer_channel_config_limits` `ChannelHandshakeLimits`
object is used in `accept_channel` to bound what is acceptable in
our peer's `AcceptChannel` message. Thus, for outbound channels, we
are given a full `UserConfig` object to "override" the default
config, but we don't use any of the handshake limits specified in
it.

Here, we move to storing the `ChannelHandshakeLimits` explicitly
and applying it when we receive our peer's `AcceptChannel`. Note
that we don't need to store it anywhere because if we haven't
received an `AcceptChannel` from our peer when we reload from disk
we will forget the channel entirely anyway.