spesmilo / spesmilo/electrum

"No path found" error gets stuck after the offline destination comes online

Open
#7,291 7 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug 🐞 lightning ⚡
Dominant language
Python
Stars
8.6k
Forks
3.5k
Avg merge
2d 8h
Merged PRs (30d)
61

Description

This is about Lightning payments with gossip enabled and no trampoline routing. Testing the following case on 4.1.2:

  • On testnet, run two instances of Electrum with different wallets, let's call them Alice and Bob for conformity.
  • They both open channels to some random nodes and have incoming liquidity, payments between them work fine.
  • Alice wants to pay Bob
  • Bob creates an invoice and sends it to Alice
  • For whatever reason Bob goes offline (we close the wallet B)
  • Alice pays the invoice but the process fails with "No path found", which is fully expected and fine.
  • Bob goes back online (we open the wallet B again) and notifies Alice.
  • Alice clicks Retry on the payment.
  • However, Electrum clearly doesn't even try to find a path instantly returning the "No path found" error. At the same time, status of the payment changes from Failed to Expires in about 24 hours which is also confusing. The Log menu item also disappears.
  • Alice restarts her Electrum (here you need to fully restart Electrum, not just close one of the wallets), waits until gossip is fully synchronized (important!) and chooses Pay... in the failed payment's context menu.
  • The payment should complete fine.

This error seems to be pretty sticky. If you only reopen the wallet without exiting Electrum (in case you run both Bob and Alice on the same machine) it doesn't go away and instantly says "Path not found". If you don't wait until gossip is downloaded and try to pay you'll get the same error, and it won't go away even after gossip is synchronized. So Electrum needs to be restarted fully again.

It seems that when using trampoline all of this above doesn't apply. As soon as the other node goes online it can be paid with a simple retry.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the testnet Lightning scenario with gossip enabled and no trampoline routing, focusing on Alice's Retry action after Bob comes back online. Trace the payment retry and gossip synchronization flow from the failed payment's context menu; done means retry succeeds without a full Electrum restart and the payment status and Log menu remain consistent.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
networking, payments
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.