Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Renepay handle non mpp invoices #8155

Open
wants to merge 23 commits into
base: master
Choose a base branch
from

Conversation

Lagrang3
Copy link
Collaborator

@Lagrang3 Lagrang3 commented Mar 11, 2025

After adding a layer auto.no_mpp_support to askrene (see PR #8059), now it is possible to
impose a single path solution constraint to getroutes.
This PR uses that constraint to correctly pay using single path solutions for invoices that do not support MPP.

Depends on #8049.

Changelog-Fixed: renepay: Now able to handle invoices that don't support Multi-Path-Payments.

  • Implement solution.
  • Write test.

Changelog-Added: renepay: use external call to [askrene-]getroutes instead of computing routes internally.

Signed-off-by: Lagrang3 <[email protected]>
Use askrene API to account for route-hints and blinded paths.

Changelog-None.

Signed-off-by: Lagrang3 <[email protected]>
Changelog-None.

Signed-off-by: Lagrang3 <[email protected]>
The execution of the failure notification makes calls to askrene to
disable or bias channels that have returned weird errors.

Changelog-None.

Signed-off-by: Lagrang3 <[email protected]>
Changelog-None.

Signed-off-by: Lagrang3 <[email protected]>
Remove unnecessary rpc call to waitblockheight at the default payment's
ending.

Changelog-None.

Signed-off-by: Lagrang3 <[email protected]>
Changelog-None.

Signed-off-by: Lagrang3 <[email protected]>
Changelog-None.

Signed-off-by: Lagrang3 <[email protected]>
Remove the MCF solver from renepay.
Offload the route computation on askrene.

Changelog-None

Signed-off-by: Lagrang3 <[email protected]>
Changelog-None

Signed-off-by: Lagrang3 <[email protected]>
Use plugin_get_data API and make less use of the access to the global
plugin state when possible.

Changelog-None

Signed-off-by: Lagrang3 <[email protected]>
Sending requests with batches allow us to avoid race conditions
when the payment plugin goes to the next state before the sendpay RPC
have not yet completed.

Changelog-None

Signed-off-by: Lagrang3 <[email protected]>
Use askrene-reserve API to lock-in the liquidity of the channels in use
for pending payment route.

Changelog-None

Signed-off-by: Lagrang3 <[email protected]>
Use askrene-unreserve to remove reserved liquidity associated with
routes that have completed, either by success or failure.

Changelog-None

Signed-off-by: Lagrang3 <[email protected]>
Make extensive use of rpc batches so that we ensure all request have
been processed before the notification is closed as handled.

Changelog-None

Signed-off-by: Lagrang3 <[email protected]>
Use askrene-inform-channel to update the knowledge of the liquidity when
a payment attempt fails.

Changelog-None

Signed-off-by: Lagrang3 <[email protected]>
Splig send routes into two steps:
1. reserve liquidity,
2. call sendpay

Changelog-None

Signed-off-by: Lagrang3 <[email protected]>
struct rpcaction: encapsulates the concept of an RPC action,
ie. an RPC call object.
It can be attached to an rpcbatch.

Changelog-None.

Signed-off-by: Lagrang3 <[email protected]>
Calling askrene-unreserve using rpcActions.
Either:
- after geting a fail notification,
- or success notification,
- or if the route destructor is called.

Changelog-None

Signed-off-by: Lagrang3 <[email protected]>
- skip test on local htlc max limits which is not supported by askrene, on privacy
  leak issue.
- skip very extreme flow cases, where sats per HTLC in reserve must be taken
  into account.
- adjust the expected error response for messages coming from askrene.
- on getroutes failure return a command fail with the same error code as
  getroutes response.

Changelog-None

Signed-off-by: Lagrang3 <[email protected]>
Changelog-None

Signed-off-by: Lagrang3 <[email protected]>
that broke because of layers created by renepay

Changelog-None

Signed-off-by: Lagrang3 <[email protected]>
@Lagrang3 Lagrang3 force-pushed the renepay-handle-non-mpp-invoices branch from bd0b79f to ff05672 Compare March 11, 2025 14:31
@Lagrang3
Copy link
Collaborator Author

I've added a regression test for this fix. But I noticed that even if the receiving node has MPP disabled with dev-force-features=-17, it will still accept a MPP payment, so the test actually tests whether renepay produces a single
route payment when the invoice does not support MPP even if MPP would be considered the optimal solution.

@Lagrang3 Lagrang3 force-pushed the renepay-handle-non-mpp-invoices branch from ff05672 to fe8db11 Compare March 12, 2025 06:38
Changelog-Fixed: renepay: Now able to handle invoices that don't support Multi-Path-Payments.

Signed-off-by: Lagrang3 <[email protected]>
@Lagrang3 Lagrang3 force-pushed the renepay-handle-non-mpp-invoices branch from fe8db11 to 4a88991 Compare March 12, 2025 07:31
@Lagrang3 Lagrang3 requested a review from cdecker as a code owner March 12, 2025 07:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant