Commit Graph

3863 Commits

Author SHA1 Message Date
SomberNight
92bdc4d4ca daemon: load_wallet: add force_check_password arg, and use it in qml
- fix: qml gui errors when trying to open a wallets with only keystore-encryption
  - fixes https://github.com/spesmilo/electrum/issues/10171
- qml gui to prompt for password on wallet open even if wallet is not storage-encrypted
2025-08-23 16:54:48 +00:00
SomberNight
23a82f328f util: fix DebugMem helper
```
 28.99 | I | util.DebugMem | Start memscan
 29.10 | E | plugin.Plugins |
Traceback (most recent call last):
  File "...\electrum\util.py", line 405, in run_jobs
    job.run()
  File "...\electrum\util.py", line 376, in run
    self.mem_stats()
  File "...\electrum\util.py", line 368, in mem_stats
    if isinstance(obj, class_):
  File "...\Python310\lib\abc.py", line 119, in __instancecheck__
    return _abc_instancecheck(cls, instance)
  File "...\electrum\simple_config.py", line 609, in __getattribute__
    raise AttributeError()
AttributeError
```
2025-08-23 14:51:01 +00:00
ThomasV
864932c79a reverse swaps: in the CLI, replace 'server_mining_fee' with
'prepayment', which corresponds to the trusted part of the
lightning payment.

We use 2*sm.mining_fee, where 'mining_fee' is the flat part of
the server fee. However, future protocol should probably allow
to set a value that does not depend on 'mining_fee'.
(note that LND uses a hardcoded amount).
2025-08-21 19:47:00 +02:00
ghost43
e85a3f2d3f Merge pull request #10157 from SomberNight/202508_swap_sanity_check_costs
swaps: add sanity-check for total swap costs
2025-08-20 18:05:13 +00:00
f321x
71c71a96f3 swaps: add sanity check to reverse swap mining fee 2025-08-20 17:57:36 +02:00
SomberNight
bb39ca5595 swaps: add sanity-check for total swap costs 2025-08-20 15:13:25 +00:00
SomberNight
74d2c6386a wallet: sweep_preparations to raise UserFacingException on p2sh/etc
closes https://github.com/spesmilo/electrum/issues/10145
2025-08-18 17:02:34 +00:00
ghost43
0c6ff6ab62 Merge pull request #10122 from accumulator/qml_invoice_validation_error
qml: handle invoice validation errors on save
2025-08-18 14:32:57 +00:00
ghost43
8feaa4bb66 Merge pull request #10141 from SomberNight/202508_kswizard_multisig
wizard: enable_keystore: fix for multisig
2025-08-18 14:27:45 +00:00
f321x
9fcf5f1581 qt: invoice_list: only show invoice if it is not None
Check if the invoice is not None when the user tries to open the
invoice details to prevent an Exception, update the list instead if the
invoice hasn't been found.
It can happen that the user deletes the invoice through the CLI
and then tries to open the details in the gui, which hasn't been
updated, at the same time.
Fixes #10144
2025-08-18 11:02:22 +02:00
SomberNight
dc999aa948 wizard: enable_keystore: fix for multisig
regression from 66c0fec1ea
2025-08-15 20:52:49 +00:00
SomberNight
14494c13dc qt wizard: start: merge "start_viewstate" and "initial_data" 2025-08-15 20:46:24 +00:00
ghost43
8a8ab26d44 Merge pull request #10140 from SomberNight/202508_test_keystore_wizard
wallet: enable/disable_keystore: some more fixes and tests
2025-08-15 18:16:38 +00:00
SomberNight
0ceb54b61f wallet: enable/disable_keystore: rm functionality from 2fa wallets
was already not working, but does not even really make sense without larger changes
2025-08-15 16:18:13 +00:00
Sander van Grieken
bd6dfc53a2 qml: avoid hue wrap-around for fees < 1sat/vbyte, limit precision. 2025-08-15 11:35:33 +02:00
Sander van Grieken
b4ffd3eeeb qt: contacts: stretch address, not name 2025-08-15 10:44:31 +02:00
ghost43
5a9f54fba0 Merge pull request #10133 from f321x/qml_timestamp_precision
qml: reduce tx history timestamp precision
2025-08-14 17:26:08 +00:00
SomberNight
0fea61ac3a tests: wizard: KeystoreWizard: also test disable_keystore() 2025-08-14 17:06:52 +00:00
SomberNight
e3d1c6aefd wallet: enable/disable_keystore: trivial clean-up 2025-08-14 16:16:31 +00:00
ghost43
5bfd5a858f Merge pull request #10123 from accumulator/keystorewizard_scriptandderivation
wizard: add script and derivation to keystorewizard flow. fixes #10063
2025-08-14 16:10:47 +00:00
ghost43
33dd45a2d9 Merge pull request #10096 from SomberNight/202508_lower_minrelayfee
change minrelayfee clamps from `[1, 50]` to `[0.1, 50]` sat/vbyte
2025-08-14 14:53:28 +00:00
f321x
0c7d8646d4 qml: stop showing seconds in tx history timestamps
Reduces the precision of the date field in the qml transaction history
list to minutes. Seconds don't seem very useful in practice and add
clutter to the UI. This adapts the behaviour to the Qt GUI.
2025-08-14 09:57:48 +02:00
Sander van Grieken
66c0fec1ea qt: wizard: pass wallet_type to Keystore wizard via initial viewstate 2025-08-13 11:40:08 +02:00
Sander van Grieken
4eccfdaa99 wizard: add script and derivation to keystorewizard flow. fixes #10063 2025-08-13 11:37:57 +02:00
Sander van Grieken
43c6f45040 qml: handle invoice validation errors on save 2025-08-12 20:27:58 +02:00
Sander van Grieken
9a7ca74992 qml: qetxdetails: update mempool depth on fee histogram 2025-08-12 12:35:16 +02:00
f321x
e6f73522cb fix: wizard: qml: call checkIfLast in WCHaveSeed
When the user has already loaded a wallet in QML and tries to restore a
new wallet `WCHaveSeed.qml` incorrectly shows a `Finish` button instead
of a `Next` button and raises a KeyError if the user clicks on Finish
instead of resolving the passphrase input view (regression from
https://github.com/spesmilo/electrum/pull/10016).

This happens because `last` of `have_seed` depends on
`NewWalletWizard.is_single_password()` and NewWalletWizard.wants_ext(wizard_data).
`is_single_password()` is true if a wallet is already loaded,
while `wants_ext(wizard_data)` is false as `wants_ext()` depends on `seed_extend: True` in
`wizard_data` which only gets set after `apply()` of `WCHaveSeed` gets
called, however the evaluation of `WCHaveSeed` being the last view
happens before the view is shown.
By calling `checkIsLast()` in the validation timer of `WCHaveSeed` the
`last` property gets set again after `apply()` has been called, so
the view is guaranteed to correctly show either the `Finish` or `Next` button
after a seed has been entered.
2025-08-11 15:05:17 +02:00
Sander van Grieken
f1c6798710 qt: wizard: xpub can be None, fixes #10109 2025-08-07 09:19:54 +02:00
Sander van Grieken
f79172c04f qml: sweep: handle network errors gracefully
fixes #10108
2025-08-06 11:02:58 +02:00
Sander van Grieken
9b1566705d qml: swap: disable choose provider button during active swap. 2025-08-04 12:56:46 +02:00
f321x
050b5b8076 qt: handle shutil.copyfail exc in add_plugin_dialog
Handles exceptions thrown by `shutil.copyfile()` in the
`add_plugin_dialog`.
In issue #10101 an user tried to access an onedrive vault directory which
made shutil fail to copy the file with:
```
OSError: [Errno 22] Invalid argument: 'odopen://unlockvault/?accounttype=personal'
```
2025-08-04 09:50:15 +02:00
SomberNight
db52ec7798 gui: cpfp: use wallet.relayfee() instead of hardcoded 1 sat/byte 2025-08-01 18:28:44 +00:00
SomberNight
5432228d17 fee calculation should round up satoshis
so that with a feerate of 0.1 sat/vbyte, for a tx of size 141 vbytes, the fee is 15 sat (instead of 14 sat)
(assuming a min relay fee of 0.1 s/b, the tx needs to pay a minimum of 15 sats to propagate)
2025-08-01 18:28:41 +00:00
accumulator
8e5f29e890 Merge pull request #10078 from accumulator/android_qml_qrscan_signals
simplify QR scanner QML interface, remove properties, add results to signals
2025-08-01 13:16:26 +02:00
ghost43
a9b47f7abd Merge pull request #10062 from f321x/handle_qe_swap_task_exceptions
qml: catch exceptions in QESwapHelper transport_task
2025-07-31 15:41:09 +00:00
f321x
30b146033d gui: detect if reserve inputs have been removed from tx
Adapts the gui(s) to detect if an existing reserve input has not been
used as input for the transaction even though the user tried to spend
max. This allows to show the lightning reserve warning not only for
reserve change outputs but also for existing reserve inputs that have
been ignored for this max spend transaction.
Still keeps the `is_utxo_reserve` flag on `PartialTxOutput` as it is
used in the qml gui.
2025-07-29 15:40:51 +02:00
Sander van Grieken
146a5438ff qml: guard against wallet.network is None, QEWallet timer can trigger this func
while wallet is closing (when app is closing)
2025-07-25 09:13:26 +02:00
Sander van Grieken
aaed64c45a android: pass on QR binary scan result data as well
qml: add signals for QEQRScanner and fallbacks, add QEBytes container type
so we can pass along byte arrays between QML and python, port qr scan
occurrences to new signals.
2025-07-24 13:58:45 +02:00
f321x
c7e3fec69e fix: remove .desktop from setDesktopFileName argument
Removes the '.desktop' suffix from the
`QGuiApplication.setDesktopFileName` argument to prevent the following
warning on startup of Electrum:
```
QGuiApplication::setDesktopFileName: the specified desktop file name ends with .desktop.
For compatibility reasons, the .desktop suffix will be removed.
Please specify a desktop file name without .desktop suffix
```

The [qt
docs](https://doc.qt.io/qtforpython-6/PySide6/QtGui/QGuiApplication.html#PySide6.QtGui.QGuiApplication.desktopFileName)
say that `desktopFileName` is "... is the file name, without the full
path or the trailing “.desktop” extension of the desktop entry that
represents this application according to the freedesktop desktop entry
specification."
2025-07-24 10:26:42 +02:00
Sander van Grieken
3947733d9f android: don't keep adding BarcodeScannerView instances to contentFrame when starting camera
When putting app to background with qr scanner active, then moved to foreground again,
SimpleScannerActivity instance is not destroyed, but the local mScannerView was re-initialized
with a new instance (through startCamera()) regardless of pre-existing instance, and added to
the contentFrame. This leaves the previous mScannerView instance in limbo, potentially getting
garbage collected at unpredictable times.
2025-07-22 10:16:02 +02:00
ghost43
43ae7e6df8 Merge pull request #10052 from SomberNight/202507_qt_crash_felix_2
crash reporter: rm `Never`, add confirm to `Send`, and only show window once per exc group
2025-07-21 13:50:35 +00:00
SomberNight
729003e557 wizard: move hw_unlock to base cls, and add test_wizard unlock_hw test 2025-07-21 03:33:43 +00:00
SomberNight
358728b316 qt wizard: don't log xpub of hw cosigner 2025-07-21 02:21:40 +00:00
SomberNight
bfd3c0e48c Merge branch spesmilo/pr/10016' into 202507_pr10016_qml_wizard_passphrase 2025-07-20 22:02:01 +00:00
f321x
4a1ac4784a qml: catch exceptions in QESwapHelper transport_task
Adds an on_done_callback to the QESwapHelper.transport_task future
to prevent the task from swallowing exceptions by retrieving exceptions
and calling `util.send_exception_to_crash_reporter` with them.
2025-07-20 17:43:42 +02:00
f321x
225ff4aba6 qt: NewChannelDialog: do some pre-validation for Ok button
Do some validation if the user input in `NewChannelDialog` before
allowing to click the `Ok` button. This is done to make the UI a bit
more intuitive and prevent issues like #10053 in which the user was able
to click `Ok` with a empty trampoline node list which raised an
`IndexError` (probably on testnet4).
2025-07-20 15:09:38 +02:00
SomberNight
c85272b546 crash reporter: only show reporter once per exception groupid
- don't show crash reporter multiple times for the "same" exception
  - at least until the user restart the program (there is no persistence)
- this is a ~replacement for the removed "Never show crash reporter" option
- in case there e.g. a thread with timer spamming an exception erroneously,
  this ensures we only offer to send the crash report once (per process lifecycle)
2025-07-18 16:44:15 +00:00
SomberNight
0e0e47c3c5 base_crash_reporter: change get_traceback_info to classmethod 2025-07-18 16:44:12 +00:00
SomberNight
970f84151d crash reporter: remove "Never" btn and config.SHOW_CRASH_REPORTER opt
- always hook into sys.excepthook and show the crash reporter
- if we don't hook into sys.excepthook and an exception propagates out on a Qt thread,
  that kills the Qt GUI
  - ref https://github.com/spesmilo/electrum/pull/10049#issuecomment-3089278083
2025-07-18 16:44:08 +00:00
SomberNight
2ed691b8f0 crash reporter: add popup asking to confirm to send_report 2025-07-18 16:44:05 +00:00