1
0
Commit Graph

18850 Commits

Author SHA1 Message Date
f321x
c58ff7caec qt: wrap show_bitcoin_paper() in WaitingDialog
i noticed that the `show_bitcoin_paper()` call can be a bit slow on some
machines blocking the gui for multiple seconds without giving feedback.
Wrapping it in a waiting dialog gives the user some feedback that
something is happening.
2025-06-16 10:08:11 +02:00
ghost43
56d50251b7 Merge pull request #9958 from nabijaczleweli/cachet
address_synchronizer: add a cache in front of get_utxos()
2025-06-15 20:21:43 +00:00
наб
e28836eb1d address_synchronizer: add a cache in front of get_utxos()
get_utxos() is called pretty often, both spuriously,
and on focus change, on tab switch, &c.

It blocks as it iterates, functionally, /every/ address the wallet knows of.

On large wallets (like testnet
  vpub5VfkVzoT7qgd5gUKjxgGE2oMJU4zKSktusfLx2NaQCTfSeeSY3S723qXKUZZaJzaF6YaF8nwQgbMTWx54Ugkf4NZvSxdzicENHoLJh96EKg
from #6625 with 11k TXes and 10.5k addresses),
this takes 1.3s of 100%ed CPU usage,
basically in a loop from the UI thread.

get_utxos() is 50-70% of the flame-graph when sampling
a synced wallet process.

This data is a function of the block-chain state,
and we have hooks that notify us of when the block-chain state changes:
we can just cache the result and only re-compute it then.

For example, here's a trace log where get_utxos() has
  print(end - start, len(domain), block_height)
and a transaction is clearing:
  1.3775344607420266 10540 4507192
  0.0010390589013695717 10540 4507192 cached!
  0.001393263228237629 10540 4507192 cached!
  0.0009001069702208042 10540 4507192 cached!
  0.0010241391137242317 10540 4507192 cached!
  ...
  0.00207632128149271 10540 4507192 cached!
  0.001397700048983097 10540 4507192 cached!
  invalidate_cache
  1.4686454269103706 10540 4507192
  0.0012429207563400269 10540 4507192 cached!
  0.0015075239352881908 10540 4507192 cached!
  0.0010459059849381447 10540 4507192 cached!
  0.0009669591672718525 10540 4507192 cached!
  ...
  on_event_blockchain_updated
  invalidate_cache
  1.3897203942760825 10540 4507193
  0.0010689008049666882 10540 4507193 cached!
  0.0010420521721243858 10540 4507193 cached!
  ...
  invalidate_cache
  1.408584670163691 10540 4507193
  0.001336586195975542 10540 4507193 cached!
  0.0009196233004331589 10540 4507193 cached!
  0.0009176661260426044 10540 4507193 cached!
  ...
about 30s of low activity.

Without this patch, the UI is prone to freezing,
running behind, and I wouldn't be surprised if UI thread blocking
on Windows ends up crashing to some extent as the issue notes.
In the log, this manifests as a much slower but consistent
stream of full 1.3-1.4s updates during use,
and every time the window is focused.
2025-06-15 22:08:30 +02:00
наб
fdaafd5abf address_synchronizer: apply @with_lock where applicable 2025-06-15 21:22:27 +02:00
SomberNight
4887fb3e7f util.with_lock: add support for chaining with @event_listener
Consider e.g.:
```
class AddressSynchronizer(Logger, EventListener):
[... snip ...]
    @event_listener
    @with_lock
    def on_event_blockchain_updated(self, *args):
        self._get_balance_cache = {}  # invalidate cache
        self.db.put('stored_height', self.get_local_height())
```

was raising:
```
func.__qualname__='with_lock.<locals>.func_wrapper'
Traceback (most recent call last):
  File "...\electrum\run_electrum", line 105, in <module>
    from electrum.logging import get_logger, configure_logging  # import logging submodule first
  File "...\electrum\electrum\__init__.py", line 19, in <module>
    from .wallet import Wallet
  File "...\electrum\electrum\wallet.py", line 70, in <module>
    from .address_synchronizer import (
  File "...\electrum\electrum\address_synchronizer.py", line 75, in <module>
    class AddressSynchronizer(Logger, EventListener):
  File "...\electrum\electrum\address_synchronizer.py", line 205, in AddressSynchronizer
    def on_event_blockchain_updated(self, *args):
  File "...\electrum\electrum\util.py", line 2005, in event_listener
    classname, method_name = func.__qualname__.split('.')
ValueError: too many values to unpack (expected 2)
```
2025-06-15 19:06:10 +00:00
SomberNight
051b7eb56c Merge branch 'pr/9957': run_electrum: improve check_imports()
merges https://github.com/spesmilo/electrum/pull/9957
2025-06-15 18:28:49 +00:00
SomberNight
8a99219456 follow-up prev: electrum-ecc should search for libsecp dll in electrum/
The hack needs to be applied before we try importing electrum_ecc, i.e. it needs to be in the main script.
However, it should also be applied if the main script is not invoked directly, but e.g. the user imports electrum directly.
Hence the duplication.
2025-06-15 18:25:42 +00:00
наб
20e690226c run_electrum: improve check_imports()
$ ./run_electrum
Error: No module named 'dns'. Try 'sudo python3 -m pip install <module-name>'
$ pip install dns
ERROR: Could not find a version that satisfies the requirement dns (from versions: none)
ERROR: No matching distribution found for dns
$ pip install dnspython
Collecting dnspython
  Downloading dnspython-2.7.0-py3-none-any.whl (313 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 313.6/313.6 kB 3.4 MB/s eta 0:00:00
Installing collected packages: dnspython
Successfully installed dnspython-2.7.0
$ ./run_electrum
Error: No module named 'certifi'. Try 'sudo python3 -m pip install <module-name>'

$ ./run_electrum
Error: No module named 'google'. Try 'sudo python3 -m pip install <module-name>'
$ pip install google
Collecting google
  Downloading google-3.0.0-py2.py3-none-any.whl (45 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.3/45.3 kB 569.4 kB/s eta 0:00:00
Collecting beautifulsoup4
  Downloading beautifulsoup4-4.13.4-py3-none-any.whl (187 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 187.3/187.3 kB 3.4 MB/s eta 0:00:00
Collecting soupsieve>1.2
  Downloading soupsieve-2.7-py3-none-any.whl (36 kB)
Collecting typing-extensions>=4.0.0
  Using cached typing_extensions-4.14.0-py3-none-any.whl (43 kB)
Installing collected packages: typing-extensions, soupsieve, beautifulsoup4, google
Successfully installed beautifulsoup4-4.13.4 google-3.0.0 soupsieve-2.7 typing-extensions-4.14.0
$ ./run_electrum
Error: No module named 'google'. Try 'sudo python3 -m pip install <module-name>'
$ pip install protobuf
Collecting protobuf
  Downloading protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl (321 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 321.1/321.1 kB 3.6 MB/s eta 0:00:00
Installing collected packages: protobuf
Successfully installed protobuf-6.31.1
$ ./run_electrum
Error: No module named 'aiorpcx'. Try 'sudo python3 -m pip install <module-name>'

$ ./run_electrum
Traceback (most recent call last):
  File "/home/nabijaczleweli/uwu/electrum/./run_electrum", line 95, in <module>
    from electrum.logging import get_logger, configure_logging  # import logging submodule first
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nabijaczleweli/uwu/electrum/electrum/__init__.py", line 18, in <module>
    from .util import format_satoshis
  File "/home/nabijaczleweli/uwu/electrum/electrum/util.py", line 58, in <module>
    import aiohttp
ModuleNotFoundError: No module named 'aiohttp'
$ ./run_electrum
Traceback (most recent call last):
  File "/home/nabijaczleweli/uwu/electrum/./run_electrum", line 95, in <module>
    from electrum.logging import get_logger, configure_logging  # import logging submodule first
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nabijaczleweli/uwu/electrum/electrum/__init__.py", line 18, in <module>
    from .util import format_satoshis
  File "/home/nabijaczleweli/uwu/electrum/electrum/util.py", line 59, in <module>
    from aiohttp_socks import ProxyConnector, ProxyType
ModuleNotFoundError: No module named 'aiohttp_socks'
$ pip install aiohttp aiohttp-socks
Requirement already satisfied: aiohttp in ./venv/lib/python3.11/site-packages (3.12.13)
Collecting aiohttp-socks
  Downloading aiohttp_socks-0.10.1-py3-none-any.whl (10 kB)
Requirement already satisfied: aiohappyeyeballs>=2.5.0 in ./venv/lib/python3.11/site-packages (from aiohttp) (2.6.1)
Requirement already satisfied: aiosignal>=1.1.2 in ./venv/lib/python3.11/site-packages (from aiohttp) (1.3.2)
Requirement already satisfied: attrs>=17.3.0 in ./venv/lib/python3.11/site-packages (from aiohttp) (25.3.0)
Requirement already satisfied: frozenlist>=1.1.1 in ./venv/lib/python3.11/site-packages (from aiohttp) (1.7.0)
Requirement already satisfied: multidict<7.0,>=4.5 in ./venv/lib/python3.11/site-packages (from aiohttp) (6.4.4)
Requirement already satisfied: propcache>=0.2.0 in ./venv/lib/python3.11/site-packages (from aiohttp) (0.3.2)
Requirement already satisfied: yarl<2.0,>=1.17.0 in ./venv/lib/python3.11/site-packages (from aiohttp) (1.20.1)
Collecting python-socks[asyncio]<3.0.0,>=2.4.3
  Downloading python_socks-2.7.1-py3-none-any.whl (54 kB)
$ ./run_electrum
Traceback (most recent call last):
  File "/home/nabijaczleweli/uwu/electrum/./run_electrum", line 95, in <module>
    from electrum.logging import get_logger, configure_logging  # import logging submodule first
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nabijaczleweli/uwu/electrum/electrum/__init__.py", line 19, in <module>
    from .wallet import Wallet
  File "/home/nabijaczleweli/uwu/electrum/electrum/wallet.py", line 44, in <module>
    import electrum_ecc as ecc
ModuleNotFoundError: No module named 'electrum_ecc'
$ pip install electrum_ecc
Collecting electrum_ecc
  Downloading electrum_ecc-0.0.5.tar.gz (2.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 7.9 MB/s eta 0:00:00
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: electrum_ecc
  Building wheel for electrum_ecc (pyproject.toml) ... done
  Created wheel for electrum_ecc: filename=electrum_ecc-0.0.5-py3-none-linux_x86_64.whl size=1285621 sha256=f2d27f7635ad82efa533055a4952e92f4db08ccab60d5dea0f3443e1ab57d5a7
  Stored in directory: /mnt/filling/store/nabijaczleweli/.cache/pip/wheels/ad/4d/86/1607d5642f3437553a45658305d979155f8007a7108f5e6d79
Successfully built electrum_ecc
Installing collected packages: electrum_ecc
Successfully installed electrum_ecc-0.0.5
$ ./run_electrum
Error: at least one of ('pycryptodomex', 'cryptography') needs to be installed.
$ ./run_electrum
Traceback (most recent call last):
  File "/home/nabijaczleweli/uwu/electrum/./run_electrum", line 97, in <module>
    from electrum.logging import get_logger, configure_logging  # import logging submodule first
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nabijaczleweli/uwu/electrum/electrum/__init__.py", line 19, in <module>
    from .wallet import Wallet
  File "/home/nabijaczleweli/uwu/electrum/electrum/wallet.py", line 47, in <module>
    from . import util, keystore, transaction, bitcoin, coinchooser, bip32, descriptor
  File "/home/nabijaczleweli/uwu/electrum/electrum/keystore.py", line 53, in <module>
    from .plugin import run_hook
  File "/home/nabijaczleweli/uwu/electrum/electrum/plugin.py", line 53, in <module>
    from .simple_config import SimpleConfig
  File "/home/nabijaczleweli/uwu/electrum/electrum/simple_config.py", line 12, in <module>
    from . import invoices
  File "/home/nabijaczleweli/uwu/electrum/electrum/invoices.py", line 7, in <module>
    from .json_db import StoredObject, stored_in
  File "/home/nabijaczleweli/uwu/electrum/electrum/json_db.py", line 29, in <module>
    import jsonpatch
ModuleNotFoundError: No module named 'jsonpatch'

$ ./run_electrum
Traceback (most recent call last):
  File "/home/nabijaczleweli/uwu/electrum/./run_electrum", line 99, in <module>
    from electrum.logging import get_logger, configure_logging  # import logging submodule first
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nabijaczleweli/uwu/electrum/electrum/__init__.py", line 19, in <module>
    from .wallet import Wallet
  File "/home/nabijaczleweli/uwu/electrum/electrum/wallet.py", line 77, in <module>
    from .lnworker import LNWallet
  File "/home/nabijaczleweli/uwu/electrum/electrum/lnworker.py", line 78, in <module>
    from .submarine_swaps import SwapManager
  File "/home/nabijaczleweli/uwu/electrum/electrum/submarine_swaps.py", line 16, in <module>
    import electrum_aionostr as aionostr
ModuleNotFoundError: No module named 'electrum_aionostr'
2025-06-15 20:00:32 +02:00
SomberNight
4c9ab617e3 dpcs: rm some instances of "sudo pip" recommendations
we should not recommend users to invoke pip with sudo
2025-06-15 17:57:22 +00:00
ghost43
95b8af3401 Merge pull request #9953 from SomberNight/202506_ci_bump_ex
ci: update electrumx
2025-06-14 01:12:21 +00:00
SomberNight
fc93e2ca4c ci: update electrumx 2025-06-13 23:53:29 +00:00
SomberNight
2f05ca09c9 contrib/.../check_submodules.sh: fix stale locale path 2025-06-13 23:43:54 +00:00
SomberNight
f8cfedb27b prepare release 4.6.0b1 4.6.0b1 2025-06-13 16:50:58 +00:00
ghost43
25bef1161e Merge pull request #9952 from f321x/add_felix_pgp_key
add @f321x gpg pubkey
2025-06-13 16:46:03 +00:00
f321x
5eeea7337e add @f321x gpg pubkey 2025-06-13 18:28:21 +02:00
ghost43
54f823bace Merge pull request #9950 from f321x/support_3rd_party_signers_release_sh
release.sh: better support for 3rd party signers
2025-06-13 16:09:18 +00:00
f321x
bffc00672a release.sh: better support 3rd party signers
adds binary downloading from website if the specified signer is not one
of the two hardcoded signers with sftp access to the airlock server.
This makes it easier for other signers to run the script and create
signatures for spesmilo/electrum-signatures.
2025-06-13 18:06:32 +02:00
SomberNight
ae5aa2cc85 mac build: downgrade pyqt to 6.6, to make camera work 2025-06-13 15:52:43 +00:00
ghost43
104230ac66 Merge pull request #9951 from SomberNight/202506_qtmultimedia
qt gui: be more resilient against import issues with QtMultimedia
2025-06-13 14:50:49 +00:00
SomberNight
02249e3992 win/mac build: don't exclude QtNetwork, as it is needed by QtMultimedia (used for camera)
fixes https://github.com/spesmilo/electrum/issues/9949

follow-up b6e4ec8f95
2025-06-13 14:22:34 +00:00
SomberNight
f366f3e7fb qt gui: be more resilient against import issues of QtMultimedia
The user should still be able to open the Preferences dialog, despite the camera functionality being broken.

see https://github.com/spesmilo/electrum/issues/9949

```
  6.36 | E | gui.qt.exception_window.Exception_Hook | exception caught by crash reporter
Traceback (most recent call last):
  File "electrum\gui\qt\main_window.py", line 2672, in settings_dialog
  File "electrum\gui\qt\settings_dialog.py", line 229, in __init__
  File "electrum\gui\qt\qrreader\__init__.py", line 96, in find_system_cameras
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 450, in exec_module
  File "electrum\gui\qt\qrreader\qtmultimedia\__init__.py", line 28, in <module>
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 450, in exec_module
  File "electrum\gui\qt\qrreader\qtmultimedia\camera_dialog.py", line 32, in <module>
RuntimeError: PyQt6.QtMultimedia cannot import type '���d�⌂' from PyQt6.QtCore

```
2025-06-13 14:22:31 +00:00
SomberNight
694c03e647 (trivial) release notes: fix typo 2025-06-13 13:07:30 +00:00
ThomasV
40e244dfe9 Merge pull request #9948 from f321x/disable_disabling_i_agree_ToU
qt: fix: ToU 'I Accept' button not getting enabled
2025-06-13 15:06:06 +02:00
ThomasV
787d5fca19 Merge pull request #9947 from f321x/fix_missing_menu_icons_macos
qt: fix: set ApplicationAttribute.AA_DontShowIconsInMenus False
2025-06-13 15:00:26 +02:00
f321x
52e2ced62e qt: fix: ToU 'I Accept' button not getting enabled
The 'I Accept' button might not get enabled for some users where startup
is very slow.
The first check if the 'I Agree' button should be enabled gets fired
100ms after constructing the Dialog, which might not be enough.
So we can either remove the logic completely (done here) to prevent these
issues, or alternatively increase the initial timer to some large timout
after which the window should be assembled fully (e.g. 2 seconds). As
the user is not able to read the whole terms in few seconds this would
be a viable option too.
2025-06-13 14:45:27 +02:00
f321x
cc848be61c qt: fix: set ApplicationAttribute.AA_DontShowIconsInMenus False
Explicitly sets the AA_DontShowIconsInMenus attribute to false as it
defaults to true on some Qt versions / environments which causes icons
to not show up in the menus (e.g. MacOS).
see https://forum.qt.io/post/813228
The attribute has to be set on self.app after the QApplication has been
instanciated (https://doc.qt.io/qt-6/qt.html#ApplicationAttribute-enum)
2025-06-13 12:21:57 +02:00
ThomasV
440c1e91a0 release script: set+x before printing info messages 2025-06-13 09:01:53 +02:00
ThomasV
4305845643 update locale 4.6.0b0 2025-06-12 21:02:58 +02:00
SomberNight
d4a57dcd9e prepare release 4.6.0b0 2025-06-12 18:47:39 +00:00
SomberNight
87f3df7170 release notes: add more stuff for 4.6.0 2025-06-12 18:42:38 +00:00
ThomasV
dcf16df1c9 Merge pull request #9946 from SomberNight/202506_apk_versioncode_beta
android/get_apk_versioncode.py: add support for beta/alpha releases
2025-06-12 20:25:42 +02:00
SomberNight
51dfb1ee3d android/get_apk_versioncode.py: add support for beta/alpha releases 2025-06-12 18:15:49 +00:00
ThomasV
253b0989b8 cli: rename clearconfig -> unsetconfig 2025-06-12 19:56:14 +02:00
ThomasV
7d9bcfa7af osx/extract_sigs: add more search paths for signed files
- pyinstaller 6.0 changed the file layout of macos binaries
    https://pyinstaller.org/en/stable/CHANGES.html#id81
    https://github.com/pyinstaller/pyinstaller/pull/7619
- this adapts the extract_sigs script to the new layout
2025-06-12 16:23:40 +00:00
SomberNight
c0b235a74e mac build: document "codesigning" and "notarization" 2025-06-12 13:20:27 +00:00
SomberNight
bc672fd2f4 mac build: compare_dmg: "hdiutil attach" to different paths
was experiencing some weird race, maybe hdiutil attach/detach is not blocking?
2025-06-12 13:09:26 +00:00
Sander van Grieken
3c9c6a286c imports, whitespace, type hints, copyright headers 2025-06-12 14:32:00 +02:00
Sander van Grieken
2c7afacbe1 timelock_recovery: remove redundant pi.parse_output() call and use pi fields directly 2025-06-12 10:07:28 +02:00
accumulator
09f99a25d7 Merge pull request #9941 from f321x/fix_bolt11_pi_exceptions
fix: handle ! amount for payment identifiers more gracefully
2025-06-12 09:40:36 +02:00
SomberNight
b6e4ec8f95 mac build: fix broken symlinks inside .app, due to rm-ed qt parts
probably since qt6 migration many symlinks inside the .app in bundled PyQt were broken:
```
$ cp -r $HOME/electrum/dist/Electrum.app Electrum-ghost3.app
cp: /Users/vagrant/electrum/dist/Electrum.app/Contents/Resources/PyQt6/Qt6/lib/QtMultimediaQuick.framework/QtMultimediaQuick: No such file or directory
cp: /Users/vagrant/electrum/dist/Electrum.app/Contents/Resources/PyQt6/Qt6/lib/QtQuickTimeline.framework/QtQuickTimeline: No such file or directory
cp: /Users/vagrant/electrum/dist/Electrum.app/Contents/Resources/PyQt6/Qt6/lib/QtQuickControls2.framework/QtQuickControls2: No such file or directory
```
We were stripping out lots of datas/binaries from Qt from the mac build artifact, leaving behind dangling symlinks.

Instead of adding more hacks on top of the current hacks to also rm the dangling links, I tried to clean up this blacklisting.

There was no issue re the Windows build, no symlinks there, but I like to keep these two spec files in sync.

-----

Some numbers:
- mac:
  - without any exclusions at all, the mac .dmg is 80 MiB.
  - with these exclusions it is 57 MiB.
- win:
  - (haven't built without exclusions.)
  - with the previous stripping strategy, exes were 68M/68M/50M
  - with these exclusions, exes are 66M/66M/50M
2025-06-11 21:35:44 +00:00
SomberNight
2645456130 build: pyinstaller: add type hint imports for spec namespace stuff
see cef4d530e3/PyInstaller/building/build_main.py (L1189)
2025-06-11 21:35:41 +00:00
SomberNight
a042eb9eac mac build: take control of pip's caching mechanism
just like in e.g. appimage build
2025-06-11 18:15:08 +00:00
f321x
97f9521cb1 fix: handle ! amount for payment identifiers
fixes exceptions ocurring when entering a '!' amount with a payment
identifier that is not allowed to send max (e.g. bolt11).
fixes exception when "Max" is still set from previous PI and the PI gets
replaced by one that doesn't allow max sending.
2025-06-11 19:26:26 +02:00
SomberNight
fc574b4c2f mac build: readme: add more sanity checks for repro 2025-06-11 16:54:15 +00:00
SomberNight
8398a8ae2e mac build: don't compile C extensions for "propcache"
makes build not reproducible

random temporary paths leak into a compiled .so:
dist_ghost43/Electrum.app/Contents/Resources/propcache/_helpers_c.cpython-312-darwin.so
2025-06-11 16:54:12 +00:00
SomberNight
376d5eb6e0 mac build: call "git describe" without "--dirty"
as we dirty the git clone ourselves, well the locale submodule, when we rm the .po files
2025-06-11 16:54:09 +00:00
ThomasV
1d7a5cbe16 android/build.sh: do not log password 2025-06-11 15:03:17 +02:00
ghost43
39371fb0e6 Merge pull request #9939 from f321x/allow_more_genesis_in_crash_reporter
allow testnet4 and signet in crash reporter
2025-06-11 12:34:01 +00:00
f321x
6a8478695d allow testnet4 and signet in crash reporter
allows to submit crash reports from testnet 4 and signet too in addition
to testnet3 and mainnet.
2025-06-11 14:14:49 +02:00
ThomasV
3f24cea5bb Merge pull request #9938 from f321x/fix_history_export
fix: update do_export_history to use wallet.get_full_history
2025-06-11 13:12:18 +02:00