• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

spesmilo / electrum / 5781997408223232
60%
master: 63%

Build:
Build:
LAST BUILD BRANCH: fingerprint
DEFAULT BRANCH: master
Ran 15 May 2025 07:59AM UTC
Jobs 5
Files 87
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

15 May 2025 07:51AM UTC coverage: 59.739% (+0.01%) from 59.727%
5781997408223232

Pull #9753

CirrusCI

f321x
suggest_splits: don't exclude single part configs for too small multi
part configs

I noticed certain ln payments become very unreliable. These payments are ~21k sat, from gossip to gossip sender, with direct, unannounced channel.

Due to the recent fix https://github.com/spesmilo/electrum/pull/9723 `LNPathFinder.get_shortest_path_hops()` will not use channels for the last hop of a route anymore that aren't also passed to it in `my_sending_channels`:

```python
if edge_startnode == nodeA and my_sending_channels:  # payment outgoing, on our channel
    if edge_channel_id not in my_sending_channels:
        continue
```

Conceptually this makes sense as we only want to send through `my_sending_channels`, however if the only channel between us and the receiver is a direct channel that we got from the r_tag and it's not passed in `my_sending_channel` it's not able to construct a route now.

Previously this type of payment worked as `get_shortest_path_hops()` knew of the direct channel between us and `nodeB` from the invoices r_tag and then just used this channel as the route, even though it was (often) not contained in `my_sending_channels`.

`my_sending_channels`, passed in `LNWallet.create_routes_for_payment()` is either a single channel or all our channels, depending on `is_multichan_mpp`:

```python
for sc in split_configurations:
	  is_multichan_mpp = len(sc.config.items()) > 1
```

This causes the unreliable, random behavior as `LNWallet.suggest_splits()` is supposed to `exclude_single_part_payments` if the amount is > `MPP_SPLIT_PART_MINAMT_SAT` (5000 sat).
As `mpp_split.py suggest_splits()` is selecting channels randomly, and then removes single part configs, it sometimes doesn't return a single configuration, as it removes single part splits, and also removes multi part splits if a part is below 10 000 sat:

```python
if target_parts > 1 and config.is_any_amount_smaller_than_min_part_size():
    continue
```

This will result in a fallback to all... (continued)
Pull Request #9753: ln: don't exclude single part configs for too small payments

9 of 10 new or added lines in 2 files covered. (90.0%)

335 existing lines in 3 files now uncovered.

21540 of 36057 relevant lines covered (59.74%)

2.98 hits per line

New Missed Lines in Diff

Lines Coverage ∆ File
1
49.83
0.07% electrum/lnworker.py

Uncovered Existing Lines

Lines Coverage ∆ File
1
82.79
-0.03% electrum/simple_config.py
137
49.83
0.07% electrum/lnworker.py
197
58.19
0.09% electrum/lnpeer.py
Jobs
ID Job ID Ran Files Coverage
1 5781997408223232.1 15 May 2025 07:59AM UTC 87
59.71
2 5781997408223232.2 15 May 2025 07:59AM UTC 87
59.7
3 5781997408223232.3 15 May 2025 07:59AM UTC 87
59.7
4 5781997408223232.4 15 May 2025 07:59AM UTC 87
59.71
5 5781997408223232.5 15 May 2025 08:19AM UTC 87
59.69
Source Files on build 5781997408223232
  • Tree
  • List 87
  • Changed 5
  • Source Changed 0
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Build #57819974...
  • Pull Request #9753
  • PR Base - master (#54584972...)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc