20399 Commits
Author SHA1 Message Date
MPins ec42b9acd0 routing: add logging for routes discarded due to low success probability
Create the ChanIDString function to return a string representation
of the route's channel IDs, formatting them in the order they appear
in the route (e.g., "chanID1 -> chanID2").

Discarded routes with a success probability lower than the minimum
threshold are now logged accordingly when finding a blinded path.
2025-05-13 19:42:36 -03:00
MPins c84804f81f itest: add the test for incoming channel list on blinded invoice 2025-05-13 17:02:44 -03:00
MPins b95d48971d lntest: add the function RPC call to asserts errors on AddInvoice 2025-05-13 17:02:44 -03:00
MPins a7da230ffa commands: add option to set the incoming channel on blinded path
Including the blinded path incoming channel list argument to the
addinvoice command, parsing and verifying that it has one or a
comma separeted list of channels id.
2025-05-13 17:02:44 -03:00
MPins 85c92805e9 rpcserver: start reading incoming blinded chan chain
Adds support for specifying a blinded path in addinvoice using
a list of chained incoming channels.
2025-05-13 17:02:43 -03:00
MPins 795b46a6fd lnrpc: add incoming chan list to BlindedPathConfig
Add an option to the addinvoice rpc which allows to specify
the blinded path via a list of chained channels.
2025-05-13 17:02:43 -03:00
MPins f541c442cf routing: add incoming channel chain to blinded paths
In this commit, the blindedPathRestrictions are expanded to include a
list of incoming channels that must be included in any blinded path. The
unit tests are expanded to test this new logic.
2025-05-13 17:02:43 -03:00
Oliver Gugger b0cba7dd08 Merge pull request #9804 from ellemouton/removeChanGraphCacheMu
graph/db: remove ChannelGraph cacheMu
2025-05-13 16:10:17 +02:00
Oliver Gugger 1db6c31e20 Merge pull request #9798 from ellemouton/graphFixNotificationSubs
graph/db: synchronous topology client subscriptions/cancellations
2025-05-12 17:10:44 +02:00
Elle Mouton 0155d5d7b0 graph/db: handle topology updates in a single location
In this commit, we ensure that any topology update is forced to go via
the `handleTopologySubscriptions` handler so that client subscriptions
and updates are handled correctly and in the correct order.

This removes a bug that could result from a client missing a
notification about a channel being closed if the client is subscribed
and shortly after, `PruneGraph` is called which would notify all
subscribed clients and possibly do so before the client subscription has
actually been persisted.
2025-05-12 14:42:22 +02:00
Oliver Gugger 8044891df4 Merge pull request #9799 from guggero/function-call-formatting
docs: document previously implicit formatting rule
2025-05-12 13:13:14 +02:00
Elle Mouton 765fc6c132 graph/db: remove ChannelGraph cacheMu
We remove the mutex that was previously held between DB calls and calls
that update the graphCache. This is done so that the underlying DB calls
can make use of any batch requests which they currently cannot since the
mutex prevents multiple requests from calling the methods at once.

The reason the cacheMu was originally added here was during a code
refactor that moved the `graphCache` out of the `KVStore` and into the
`ChannelGraph` and the aim was then to have a best effort way of
ensuring that updates to the DB and updates to the graphCache were as
consistent/atomic as possible.
2025-05-12 08:29:40 +02:00
Oliver Gugger 12dbeb99c3 docs: document previously implicit formatting rule
Adds a formatting rule to the code style documentation that is being
used widely throughout the codebase but isn't properly documented.
2025-05-12 07:00:51 +02:00
Oliver Gugger ee25c228e9 Merge pull request #8330 from bitromortac/2401-bimodal-improvements
bimodal pathfinding probability improvements
2025-05-08 21:35:49 +02:00
bitromortac 86249fbe6c docs: update release notes 2025-05-08 18:31:31 +02:00
Oliver Gugger 43e822c3b0 Merge pull request #9789 from ellemouton/updateTLVDep
multi: use updated TLV SizeFunc signature
2025-05-08 10:20:37 +02:00
Olaoluwa Osuntokun 1a5432368e Merge pull request #9785 from Roasbeef/go-1-23-9
build: bump Go version to v1.23.9
2025-05-07 16:17:00 -07:00
Elle Mouton ad38ed73c7 go.mod+lnwire: bump TLV dep and fix MilliSatoshi Record
In this commit, we update the `tlv` package version which includes type
constraints on the `tlv.SizeBigSize` method parameter. This exposes a
bug in the MilliSatoshi Record method which is fixed here.

This was not caught in tests before since currently only
our TLV encoding code makes use of this SizeFunc (so we would write 0
size to disk) but then when we read the bytes from disk and decode, we
dont use the SizeFunc and our MilliSatoshi decode method makes direct
use of the `tlv.DBigSize` function which _currently does not make use of
the `l` length variable passed to it_. So it currently does correctly
read the data.
2025-05-07 19:36:25 +02:00
Oliver Gugger 8b413e89f1 Merge pull request #9793 from ellemouton/tlvSizeBigSize
tlv: catch unhandled type in SizeBigSize
2025-05-07 19:21:57 +02:00
Elle Mouton ecb9755e19 tlv: constrain the types passed to MakeBigSizeRecord and SizeBigSize
Protect against unhandled types being passed to these methods.
2025-05-07 15:45:12 +02:00
Olaoluwa Osuntokun 1c76c6198c build: bump Go version to v1.23.9 2025-05-06 15:50:16 -07:00
Oliver Gugger 67a40c90ad Merge pull request #9782 from Roasbeef/v19-rc4
build: bump to version v0.19 rc4
2025-05-06 18:36:20 +02:00
Oliver Gugger 221b7634a6 Merge pull request #9783 from bitromortac/2505-loadmc-fixes
lncli: establish connection after parsing of mc data for loadmc
2025-05-06 13:52:57 +02:00
bitromortac 306df7048f docs: update release notes 2025-05-06 11:16:36 +02:00
bitromortac d33c92bd19 lncli: option to skip prompts for loadmc
This makes the command scriptable.
2025-05-06 11:13:30 +02:00
bitromortac 725a80a3b7 lncli: remove possibility to discard mission control from loadmc
This can already be done with resetmc and was only included here because
loadmc was used in a different context.
2025-05-06 10:59:41 +02:00
bitromortac 452022ee75 lncli: establish connection after mc parsing for loadmc
It can take some time to unmarshal large mission control data sets such
that the macaroon can expire during that phase. We postpone the
connection establishment to give the user more time to answer the
prompt.
2025-05-06 10:59:38 +02:00
bitromortac 56ccf60267 lncli: correct docs for loadmc 2025-05-06 10:53:37 +02:00
Olaoluwa Osuntokun 850f1edc5f build: bump to version v0.19 rc4 2025-05-05 12:58:35 -07:00
Olaoluwa Osuntokun 7b6c1cf840 Merge pull request #9781 from bitromortac/2505-loadmc
lncli: add loadmc command
2025-05-05 12:00:32 -07:00
bitromortac aaccc2bcaa docs: update release notes 2025-05-05 15:02:55 +02:00
bitromortac 8351018f8b lncli: add loadmc command
This command lets one import data exported by `lncli querymc > mc.json`
via `lncli loadmc --mcdatapath mc.json`.
2025-05-05 15:02:55 +02:00
bitromortac 180f61b9eb lncli: change importmc category 2025-05-05 15:02:55 +02:00
Oliver Gugger 334a7d1123 Merge pull request #9770 from bitromortac/2504-mc-migration-fix
routing+migration: fix mission control migration with nil failure msg
2025-05-02 14:22:59 +02:00
bitromortac 07f863a2a5 routing: refine amount scaling
Mission control may have outdated success/failure amounts for node pairs
that have channels with differing capacities. In that case we assume to
still find the liquidity as before and rescale the amounts to the
according range.
2025-05-02 10:30:28 +02:00
bitromortac 5afb0de8a8 routing: forget info for contradictions
If we encounter invalid mission control data, we fall back to no
knowledge about the node pair.
2025-05-02 10:30:28 +02:00
bitromortac 5ba9619d22 routing: don't compute prob for success amounts
We skip the evaluation of probabilities when the amount is lower than
the last success amount, as the probability would be evaluated to 1 in
that case.
2025-05-02 10:30:28 +02:00
bitromortac 3819941c12 routing: regularize bimodal model
If the success and fail amounts indicate that a channel doesn't obey a
bimodal distribution, we fall back to a uniform/linear success
probability model. This also helps to avoid numerical normalization
issues with the bimodal model.

This is achieved by adding a very small summand to the balance
distribution P(x) ~ exp(-x/s) + exp((x-c)/s), 1/c that helps to
regularize the probability distribution. The distribution becomes finite
for intermediate balances where the exponentials would be evaluated to
an exact zero (float) otherwise. This regularization is effective in
edge cases and leads to falling back to a uniform model should the
bimodal model fail.

This affects the normalization to be s * (-2 * exp(-c/s) + 2 + 1/s) and
the primitive function to receive an extra term x/(cs).

The previously added fuzz seed is expected to be resolved with this.
2025-05-02 10:30:12 +02:00
bitromortac fe32105b3e routing: add test for small scale
This test demonstrates that the current bimodal model leads to numerical
inaccuracies in a certain regime of successes and failures.
2025-05-02 10:26:13 +02:00
bitromortac 615b617cda routing: add test for fuzz test special case
This test demonstrates an error found in a fuzz test by adding a
previously found seed, which will be fixed in an upcoming commit.

The following fuzz test is expected to fail:
go test -v -fuzz=Prob ./routing/
2025-05-02 10:25:19 +02:00
bitromortac 04eec71d54 routing: use default tolerance for bimodal testing 2025-05-02 10:24:22 +02:00
bitromortac 55e7343b14 routing: update to realistic test values
The bimodal model doesn't depend on the unit, which is why updating to
more realistic values doesn't require changes in tests.

We pin the scale in the fuzz test to not invalidate the corpus.
2025-05-02 10:23:56 +02:00
bitromortac 5020e1f98b docs: update release notes 2025-05-02 08:43:04 +02:00
bitromortac 15f0888fa8 routing: fix mission control migration
This commit is temporary and demonstrates a panic. To be squashed with
the following commit.
2025-05-02 08:42:25 +02:00
bitromortac aa9abb3d96 routing: make sure failure message is valid 2025-04-30 17:43:58 +02:00
bitromortac a450d85309 routing: remove paymentFailure pointer
This introduces an option instead to signal whether there was a failure
for result interpretation.
2025-04-30 17:43:58 +02:00
bitromortac 4498a78cb0 routing: remove paymentFailureInfo
We can remove paymentFailureInfo since we can gate the result
interpretation on the source index, meaning that if we don't have a
source index, we deal with an unknown payment outcome because we
couldn't pinpoint the failing hop.
2025-04-30 17:43:57 +02:00
bitromortac e5c541407f routing: make msg and index optional
This is later used to handle their nil values.
2025-04-30 17:42:53 +02:00
Oliver Gugger b068d79dfb Merge pull request #9776 from saubyk/19.0-releasenotes-update
docs: update release notes with more detail on the RBF coop close section
2025-04-30 08:14:07 +02:00
saubyk 52e1764e0a docs: update release notes with more detail on the RBF coop close section 2025-04-29 21:07:51 -07:00