1
0
Commit Graph

19687 Commits

Author SHA1 Message Date
f321x
dd1d98e37c pi: allow emaillike pi with 'lightning:' prefix
Lightning addresses with 'lightning:' do occur in the wild and make
sense (how else would e.g. the smartphone know to open a lightning
wallet instead of the e-mail client). So we should allow this.
2025-12-22 18:06:26 +01:00
f321x
2cd1de4f21 pi: fix incorrectly parsing emaillike with 'ln' prefix
Fixes a bug where we incorrectly parsed emaillike payment identifiers as
bech32 lightning payment identifier if they start with a 'ln' prefix.
2025-12-22 18:06:17 +01:00
ghost43
ec7a5906f4 Merge pull request #10366 from f321x/fix_tc_submarine_payment
qt: minor improvements and bugfix
2025-12-22 16:43:20 +00:00
f321x
d1368db313 android: qr scanner: allow tap to focus
Allow tap to focus in the android qr scanner as some devices don't
support autofocus. This should allow them to focus on some qr code.
2025-12-22 15:02:01 +01:00
f321x
e09794c232 android: bump barcode scanner version
Bumps the BarcodeScannerView and zxing++ version which allows us to
remove the 16kb page alignment patch as this is now done upstream.
Ref 87d82f38c5
2025-12-22 14:44:32 +01:00
f321x
82c006e0e4 qt: Submarine Payments: update tab on_channels_updated
Updates the submarine payments tab if the channels get updated so the
user isn't stuck with a liquidity warning if they open the tab before
the channels are initialized (e.g. on wallet startup).
2025-12-22 14:08:08 +01:00
f321x
d233e4ffa8 qt: Add help button to submarine payments tab
Adds a help button with explanation to the submarine payments tab.
2025-12-22 14:08:01 +01:00
f321x
4c44620d4d qt: ConfirmTxDialog: also show Tools text
Also show the `Tools` text besides the preferences icon so it looks
equal to the main window.
Originally this was a followup part of #10300 which got closed
due to other reasons.
2025-12-22 11:02:17 +01:00
f321x
db45606288 qt: disable ln configs in ConfirmTxDialog if no ln
Disables the lightning related config options in the ConfirmTxDialog
tools and shows an according tooltip if lightning is not available in
the wallet. This should prevent confusion of users.
2025-12-22 11:02:15 +01:00
f321x
93d85a0b0e qt: disable Submarine Payment tab if not swap_manager
Disable the `Submarine Payments` tab if the swap_manager is None (the
wallet has no lightning support).
2025-12-22 11:02:13 +01:00
f321x
71bc9af511 qt: channels_list: add tooltip to New Channel btn
Adds tooltips to the "New Channel" button so users understand why it is
disabled and what it does when it is enabled.
2025-12-22 11:02:12 +01:00
ghost43
81a288a1f9 Merge pull request #10382 from f321x/fix_exc_in_htlc_switch
lnpeer: fix callback exception handling, fix type hint
2025-12-19 15:42:15 +00:00
f321x
14977e4cee lnpeer: fix callback type hint
asyncio.create_task expects a Coroutine, not all Awaitables are
Coroutines.
2025-12-19 16:37:23 +01:00
f321x
ff61596598 lnpeer: fix callback exception handler
The done_callback for the callback tasks in _run_htlc_switch_iteration
tried to access mpp_sets by key but they might already have been deleted
when the callback is called, causing an KeyError. Instead forward the
exceptions to the crash reporter so we get notice of them and they get
logged correctly.

```
20251219T131356.946565Z |    ERROR | asyncio | Exception in callback Peer._run_htlc_switch_iteration.<locals>.<lambda>(<Task finishe.../util.py:1773>) at /home/user/code/electrum-fork/electrum/lnpeer.py:2907
handle: <Handle Peer._run_htlc_switch_iteration.<locals>.<lambda>(<Task finishe.../util.py:1773>) at /home/user/code/electrum-fork/electrum/lnpeer.py:2907 created at /usr/lib64/python3.14/asyncio/events.py:94>
source_traceback: Object created at (most recent call last):
  File "/usr/lib64/python3.14/threading.py", line 1082, in _bootstrap_inner
    self._context.run(self.run)
  File "/home/user/code/electrum-fork/electrum/util.py", line 1145, in run_with_except_hook
    run_original(*args2, **kwargs2)
  File "/usr/lib64/python3.14/threading.py", line 1024, in run
    self._target(*self._args, **self._kwargs)
  File "/home/user/code/electrum-fork/electrum/util.py", line 1705, in run_event_loop
    loop.run_until_complete(stopping_fut)
  File "/usr/lib64/python3.14/asyncio/base_events.py", line 706, in run_until_complete
    self.run_forever()
  File "/usr/lib64/python3.14/asyncio/base_events.py", line 677, in run_forever
    self._run_once()
  File "/usr/lib64/python3.14/asyncio/base_events.py", line 2038, in _run_once
    handle._run()
  File "/usr/lib64/python3.14/asyncio/events.py", line 94, in _run
    self._context.run(self._callback, *self._args)
Traceback (most recent call last):
  File "/usr/lib64/python3.14/asyncio/events.py", line 94, in _run
    self._context.run(self._callback, *self._args)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/code/electrum-fork/electrum/lnpeer.py", line 2909, in <lambda>
    f"{self.lnworker.received_mpp_htlcs[pk]=}", exc_info=t.exception()) if t.exception() else None
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^
KeyError: '0000980000010001:1'
```
2025-12-19 16:37:15 +01:00
SomberNight
08f101a7e5 tests: lnpeer/onion_msg: rm dead code 2025-12-19 14:53:28 +00:00
ghost43
a2088137d4 Merge pull request #10381 from f321x/donation_address_remove_prefix
interface: remove prefix from donation addresses
2025-12-19 12:47:15 +00:00
f321x
c56c27966a interface: remove prefix from donation addresses
Some servers seem to serve their donation address with `bitcoin:`
prefix, preventing them from getting donations. This removes the prefix.

E.g.:
```
262.63 | I | interface.[2ex.digitaleveryware.com:50002] | invalid donation address from server: 'bitcoin:bc1q0q6lcajak7r8h8c8luzp0zj35v0usqd4pdzqjg'
```
2025-12-19 13:42:17 +01:00
ghost43
844a3143d4 Merge pull request #10378 from SomberNight/202512_network_gui_disconnected_servers
network gui: always show bookmarked servers in list
2025-12-19 12:26:09 +00:00
ThomasV
2529911df9 Merge pull request #10379 from SomberNight/202512_lnpeer_cleanup_anchors
LNWallet: require OPTION_CHANNEL_TYPE
2025-12-18 19:26:57 +01:00
ThomasV
baf877252d Merge pull request #10345 from f321x/enforce_unified_password_qml_button
qml: limit creation of new wallets to existing password
2025-12-18 19:25:04 +01:00
f321x
91b3a4a5dc daemon: reset CURRENT_WALLET if the wallet gets deleted
Set SimpleConfig.CURRENT_WALLET = None if the wallet gets deleted,
otherwise we try to open it on the next startup which will show an error
message in QML.
2025-12-18 17:54:56 +01:00
f321x
6bb8afebe5 qml: fix incorrect index when deleting wallet
QEWalletListModel.remove_wallet was calling beginRemoveRows with i
instead of remove as index, causing it to not delete the wallet from the
list and the wallet list becoming broken after deleting a wallet.
2025-12-18 17:54:54 +01:00
f321x
aee0f8fb54 qml: OpenWalletDialog: load any wallet if password matches
If the user has wallets with different passwords (non-unified pw) and
enters a password on startup that fails to unlock the recently used
wallet this change will automatically open any other wallet if there
is another wallet that can be unlocked with this password.
2025-12-18 17:54:52 +01:00
f321x
ba379b7da4 qml: LoadingWalletDialog: fix ressource leak
When closing the OpenWalletDialog without unlocking a wallet the
LoadingWalletDialog wouldn't get properly cleaned up as the
LoadingWalletDialog.visible was never set true. This causes the
connections to accumulate and the callbacks won't get unregistered after
closing the LoadingWalletDialog again.
2025-12-18 17:54:51 +01:00
f321x
70084750ef qml: show wallet list as root if no wallet is loaded
Shows Wallets.qml as root if no wallet is loaded and removes the logic
for no loaded wallet from the WalletMainView as WalletMainView won't be
shown anymore without a Daemon.currentWallet.
2025-12-18 17:54:28 +01:00
SomberNight
aab22a237b ln: require LnFeatures.OPTION_CHANNEL_TYPE as bolts now mandate it
This simplifies some code.

following 9d456b1c4a
2025-12-18 16:43:19 +00:00
SomberNight
85a45f9b1f lnutil: rm remnants of old unsupported original ANCHOR_OUTPUTS option 2025-12-18 16:09:49 +00:00
accumulator
519944c06e Merge pull request #10377 from accumulator/qml_process_request_status_update_via_eventloop
qml: QERequestDetails process request update via event loop.
2025-12-18 16:48:40 +01:00
ghost43
877dce551b Merge pull request #10375 from accumulator/qml_current_wallet_update
qml: store current wallet when switching to already open wallet
2025-12-18 14:52:12 +00:00
SomberNight
cb3c286fe2 network: disconnected servers: do not filter out bookmarked raw ":t"
In the GUI, when displaying the list of disconnected servers, we were
filtering to only ":s" servers. Instead now we also show ":t" servers
if they are bookmarked.

Also, if bookmarked, we also show disconnected .onion servers, even
when not using a Tor proxy.

fixes https://github.com/spesmilo/electrum/issues/10374
2025-12-18 14:27:54 +00:00
SomberNight
21fa6114eb network: dedupe qt/qml get_disconnected_server_addrs code 2025-12-18 14:07:43 +00:00
ghost43
e025f1d17b Merge pull request #10376 from accumulator/fix_10335
qt: don't store python tuple in a qt QVariant.
2025-12-18 12:54:29 +00:00
f321x
02abc0e6cd qml: enforce single password on password change
If a qml user with non-uniform wallet passwords tries to change their wallet
password this will force them to change it to a password that is used by
at least one other wallet. This will guide them towards a single wallet
password and prevents the number of different passwords from increasing.
2025-12-18 13:10:36 +01:00
Sander van Grieken
0d812500e1 qml: QERequestDetails process request update via event loop.
This allows backend to process all callbacks before we start querying the payment database

should fix #10116
2025-12-18 12:40:53 +01:00
f321x
378a9e6112 qml: disable 'Create Wallet' before first unlock
If the user has not unlocked any wallet yet and tries to create a new
wallet in the overview a dialog will prompt them to first unlock an
existing wallet in order to be able to create a new wallet.

This ensures they remember at least one password so they can complete
the wizard. The wizard will ask them for an existing password later and
it would be annoying for the user to go through all steps (writing down
the seed etc.) only to find out they need a password they don't
remember. This way they can reinstall the app right before going through
the wizard.
2025-12-18 11:07:37 +01:00
Sander van Grieken
f2e6243e19 qt: don't store python tuple in a qt QVariant.
This is an educated guess in fixing #10335, Qt can be very picky w.r.t. wrapping types,
and we have additional complexity in the PyQt/SIP layer.

as the address index is only used to facilitate sorting, convert address index tuple
to a sortable string instead.

This assumes uniformity in the length of address indexes.
2025-12-18 10:59:56 +01:00
Sander van Grieken
7d5d51975f qml: store current wallet when switching to already open wallet 2025-12-18 09:48:09 +01:00
Sander van Grieken
fffcf4a90b qml: add FeePicker manual fee/feerate input validators 2025-12-18 08:32:46 +01:00
Sander van Grieken
7ef605ee5c qml: allow manual editing of fee/feerate
also improve warning box styling consistency across finalizers,
add CPFP new feerate > old feerate check,
add relayfee checks for CPFP, DSCancel,
proper warning string for no dynamic fee estimates
2025-12-18 08:32:46 +01:00
Sander van Grieken
4cab0ceddd qml: don't catch-all when making tx for sweep finalizer 2025-12-18 08:31:09 +01:00
ghost43
308ffb1f4c Merge pull request #10318 from SomberNight/202511_lnsweep_keepwatching
lnsweep: lnwatcher needs to keep_waiting for pending hold_invoice
2025-12-18 00:54:14 +00:00
Sander van Grieken
72daff3ae4 qml: improve HelpDialog styling
remove misalignment between pane and dialog, add bottom padding
2025-12-17 16:50:59 +01:00
Sander van Grieken
5a49161ae6 qml: fix FeePolicy regression
ref 840243e029
2025-12-17 15:50:04 +01:00
ThomasV
e4831c823a Merge pull request #10370 from f321x/tc_disable_signing_in_preview
qt: trustedcoin: only allow signing with broadcast
2025-12-17 15:16:22 +01:00
f321x
3b028b06a0 qml: enforce use of existing password for wallet creation
When creating a new wallet in a Electrum instance with existing wallets
this change forces the user to reuse a password of any existing wallet
if `SimpleConfig.WALLET_USE_SINGLE_PASSWORD` is True.
This prevents the amount of different passwords from increasing and
guides the user towards a single wallet password (the intended default).
2025-12-17 14:01:41 +01:00
SomberNight
f339a6b76d lnwatcher: follow-up prev 2025-12-17 10:23:16 +00:00
f321x
a105c50029 qt: trustedcoin: only allow signing with broadcast
Only allow signing a transaction if it also gets broadcast by disabling
the signing and broadcast button of the preview dialog when creating a
new tx. Makes it slightly less trivial to cheat with the fees.
2025-12-16 13:54:08 +01:00
SomberNight
5e53f82bc6 tests: lnpeer: simplify MockNetwork: rm dead code
not needed since 9224404108
2025-12-15 15:38:16 +00:00
SomberNight
166aa50a65 README: tests: add note about pytest-xdist 2025-12-15 15:13:55 +00:00
SomberNight
7e1fd008f0 lnsweep: lnwatcher needs to keep_watching if htlc in dont_settle_htlcs
If RHASH is in lnworker.dont_settle_htlcs, we should not reveal
the preimage. But also, we should not disregard the htlc either.

E.g. during a JIT channel open, payment going A->B->C,
C would release the preimage to B (lsp) to cover the costs of the
JIT channel-open. If the upstream A->B channel gets force-closed, B should
only pull the HTLC's funds if he is sure he can forward them to C.

lnwatcher needs to keep watching (i.e. wait) until the RHASH gets removed from
lnworker.dont_settle_htlcs, or until the CLTV of the HTLC expires.
2025-12-15 14:53:50 +00:00