1
0
Commit Graph

18634 Commits

Author SHA1 Message Date
SomberNight
5fd6603ea6 ci: regtests: bump e-x 2025-05-29 17:29:27 +00:00
ThomasV
e580373c82 test_redeem_offered_htlcs: reduce bob's target because they might send anchor output sweeping tx 2025-05-29 19:27:06 +02:00
SomberNight
400934b771 network: hardcoded servers: add a few more 2025-05-29 15:02:04 +00:00
SomberNight
5e2c52081d update block header checkpoints 2025-05-29 15:02:01 +00:00
SomberNight
807832a769 logging: follow-up "rm verbosity_shortcuts option"
follow-up 853b793bef
2025-05-29 14:57:58 +00:00
ThomasV
11fc3ccf33 CLI: cosmetic changes and cleanup 2025-05-29 16:44:01 +02:00
ThomasV
853b793bef rm verbosity_shortcuts option (unused, redundant) 2025-05-29 16:20:41 +02:00
ThomasV
743f5c8311 CLI: remove -W shortcut 2025-05-29 15:44:53 +02:00
SomberNight
bf168ce6f8 interface: log block height of main interface on new block
follow-up 7a7c0f1606
- before ref commit, we logged new headers for every interface
- after ref commit, we logged new header only for fastest interface
- now, we log new header for fastest interface and for main interface
  - useful to see if main interface is very slow
2025-05-28 17:05:13 +00:00
ghost43
b10b93f130 Merge pull request #9797 from SomberNight/202505_ci_bump_ex
ci: regtests: bump e-x
2025-05-28 15:03:47 +00:00
SomberNight
8198209149 ci: regtests: bump e-x 2025-05-28 14:45:47 +00:00
ThomasV
c61e0f5cf9 CLI: show the list of commands if run_electrum -h is invoked
This fixes a regression likely introduced with the docstring parameter parser.
The short description is the first period-separated sentence of the docstring.

Also remove the 'commands' command.
2025-05-28 15:36:15 +02:00
ThomasV
fb9e300165 Merge pull request #9824 from accumulator/qml_bip21_request_if_label_or_amount
invoices: only skip generating BIP21 URI for payment request if both …
2025-05-28 11:05:34 +02:00
ThomasV
04da854291 follow-up 49d2f87dcf 2025-05-28 10:46:00 +02:00
ThomasV
b110179409 fix #9870 2025-05-28 10:42:59 +02:00
ThomasV
49d2f87dcf wizard: make NewWalletWizard inherit from KeystoreWizard 2025-05-28 10:20:15 +02:00
ThomasV
5ed020f924 Merge pull request #9873 from SomberNight/202505_network_oneserver_text
gui: oneserver option: make text more verbose
2025-05-28 09:20:36 +02:00
ThomasV
4567150ecb Merge pull request #9874 from SomberNight/202505_adb_get_tx_height_test
adb.get_tx_height: allow future txs to be partially signed
2025-05-28 09:07:54 +02:00
SomberNight
db759765d6 adb.get_tx_height: allow future txs to be partially signed
If the full tx is missing, we should force mempool/confirmed txs to be LOCAL height,
however future txs should not be forced to LOCAL, they should remain FUTURE.

follow-up 197933debf
2025-05-27 18:19:01 +00:00
SomberNight
329ba13093 gui: oneserver option: make text more verbose 2025-05-27 17:17:17 +00:00
ThomasV
eb05210a00 simple_config: handle unexpected non-dict in recursive get/set_key methods 2025-05-27 11:43:28 +02:00
ThomasV
f842ce0737 submarine_swaps: consider is_redeemed as sufficient for swap not
to be pending
2025-05-27 10:15:27 +02:00
ghost43
0689a7274f Merge pull request #9871 from SomberNight/202505_adb_get_tx_height
adb.get_tx_height: return "LOCAL" height if missing full signed tx
2025-05-26 16:58:34 +00:00
SomberNight
197933debf adb.get_tx_height: return "LOCAL" height if missing full signed tx
get_tx_height previously did not consider whether the walletDB has the full tx for
the corresponding txid, and could consider a tx even "mined" and spv-ed, even if
we were missing the raw tx.
Now if the full tx is missing or the tx in the db is partial,
get_tx_height considers it to be LOCAL.

In particular the txbatcher, in `run_iteration`,
- first saves a tx as local *unsigned* (to reserve UTXOs),
- then signs it and tries to broadcast it.

The history tx will later transition to local and signed,
after we get back the broadcasted tx via the Synchronizer dance.
In the meantime there is a race where we have an unsigned tx in the history,
but the txid could already transition to mempool or even to mined,
before we download the full raw tx from the server.
During that time window, it makes the adb state more consistent
to just consider the history tx to be local, as done here.
2025-05-26 16:57:51 +00:00
SomberNight
36d46ea2c1 tests: regtest.extract_preimage: nicer error msg in some failure cases
also rm an incorrect comment from overly-eager copy-paste
2025-05-26 16:53:17 +00:00
SomberNight
df6057bc9f i18n: forbid "English" translations
This adds an additional layer of defense.
Potential attack:
- "English" gets added as a language on the crowdin project
  - (this can only be done by a moderator or the crowdin devs)
- malicious strings get added on crowdin as English translations
- we don't notice and pull the updates into the locale git submodule
- users with the "default" lang option selected who have their OS lang set to English
  - and users with "English" explicitly selected in Electrum
  - would see the malicious strings
2025-05-26 15:31:08 +00:00
SomberNight
7b531a7378 i18n: make "language" field private 2025-05-26 15:30:12 +00:00
ThomasV
df4bbf1d72 KeystoreWizard: fix regression (follow-up e1ac476bcf) 2025-05-26 17:11:37 +02:00
ThomasV
b0131c96f0 wallet.bump_fee: do not change nsequence of already existing inputs
Fixes tx rejection by network if the original tx has a csv:
> non-mandatory-script-verify-flag (Locktime requirement not satisfied)

Also add unit test
2025-05-26 14:52:37 +02:00
ThomasV
58480a69db TxBatcher: store fee policy names instead of fee descriptors
This allows to change the fee policy of batches dynamically.
Config.fee_policy is a mapping between policy names and descriptors.
2025-05-26 13:30:25 +02:00
ThomasV
b91c5d18cb call lnwatcher.trigger_callbacks in offline mode 2025-05-26 11:48:00 +02:00
ThomasV
e1ac476bcf KeystoreWizard: support seed extension 2025-05-26 10:35:41 +02:00
ThomasV
ce8242c29c txbatcher: remove fixme 2025-05-25 09:47:36 +02:00
ThomasV
bd20d6e0af follow-up 51ced92f44 2025-05-24 17:34:00 +02:00
ThomasV
51ced92f44 Qt: let user enable/disable keystores with seed or hw wallet 2025-05-24 11:18:07 +02:00
ThomasV
553aef519b Qt wizard: clean up first page a bit 2025-05-24 11:00:18 +02:00
ThomasV
45c35c0b00 allow password encryption in hardware wallets 2025-05-23 18:42:54 +02:00
SomberNight
f95d4ce287 util.profiler: add support for async functions 2025-05-23 16:18:59 +00:00
SomberNight
37350edeae plugins: use util.make_dir for creating external plugin dir
This sets more restrictive unix permissions on the folder.
Also, util.make_dir is "multiprocess-safe".
2025-05-23 15:49:14 +00:00
SomberNight
5084f75724 util.make_dir: handle multi-process race
When launching an electrum daemon and an electrum cli command quickly after each other,
in a test using a random fresh datadir, they both try to create the same folder hierarchy
and race on the "if not exist: mkdir" commands.
2025-05-23 15:49:11 +00:00
ThomasV
22fd7a9440 Merge pull request #9842 from spesmilo/txbatcher_notenoughfunds
txbatcher: remove outputs if NotEnoughFunds is raised
2025-05-23 17:42:10 +02:00
ThomasV
25dabf3105 txbatcher: if we raise NotEnoughFunds, remove
the largest output from the current tx and retry

In the unit test, this results in waiting until the current tx is mined.
2025-05-23 17:11:56 +02:00
Sander van Grieken
84322500ef lnworker: imports, formatting, whitespace 2025-05-23 14:00:57 +02:00
SomberNight
9b24316915 plugin: _execute_commands_in_subprocess: make sure pipes get closed 2025-05-22 21:48:27 +00:00
ghost43
ddaa204b70 Merge pull request #9853 from SomberNight/202505_adb_transaction_lock
adb: merge `transaction_lock` and `lock`, protect more critical sections
2025-05-22 21:45:32 +00:00
ghost43
51753a4d62 Merge pull request #9855 from accumulator/test_is_private_netaddress_expand
tests: also test for RFC1918 IPv4 and IPv4-in-IPv6 and IPv6 link-local addresses
2025-05-22 14:20:09 +00:00
Sander van Grieken
caef77d45d tests: also test for RFC1918 IPv4 and IPv4-in-IPv6 and IPv6 link-local addresses 2025-05-22 11:02:46 +02:00
SomberNight
4543192e1a adb: take lock in more places
for example, adb.get_utxos() could previously return an inconsistent result
2025-05-21 18:43:36 +00:00
SomberNight
3b37a920d6 adb/wallet: merge transaction_lock and lock
The distinction was no longer clear.
2025-05-21 18:43:33 +00:00
SomberNight
e75476430c requirements: bump min dnspython to 2.2.0
follow-up 713a20e309
https://github.com/spesmilo/electrum/pull/9833

On Windows, above commit broke dns_hacks.py with dnspython==2.0.0 and 2.1.0.
Newer dnspython works.
Root cause not immediately obvious. Probably not worth debugging, I will just bump the required version instead.

With dnspython==2.0.0, the log gets spammed and dns fails:
```
$ python3 -m pip install --user "dnspython==2.0.0"

 10.59 | E | asyncio | Exception in callback _ProactorBasePipeTransport._call_connection_lost(None)
handle: <Handle _ProactorBasePipeTransport._call_connection_lost(None)>
Traceback (most recent call last):
  File "...\Python310\lib\asyncio\events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "...\Python310\lib\asyncio\proactor_events.py", line 158, in _call_connection_lost
    self._protocol.connection_lost(exc)
  File "...\Python310\site-packages\dns\_asyncio_backend.py", line 38, in connection_lost
    self.recvfrom.set_exception(exc)
asyncio.exceptions.InvalidStateError: invalid state
```
With dnspython==2.1.0, no more log spam but all dns resolutions time out:
```
$ python3 -m pip install --user "dnspython==2.1.0"

 33.29 | I | dns_hacks | dnspython failed to resolve dns (AAAA) for 'testnet.qtornado.com' with error: Timeout('The DNS operation timed out after 31.591506242752075 seconds')
 33.29 | I | dns_hacks | dnspython failed to resolve dns (AAAA) for 'api.coingecko.com' with error: Timeout('The DNS operation timed out after 31.590490579605103 seconds')
 33.29 | I | dns_hacks | dnspython failed to resolve dns (A) for 'testnet.qtornado.com' with error: Timeout('The DNS operation timed out after 31.591506242752075 seconds')
 33.29 | I | dns_hacks | dnspython failed to resolve dns (A) for 'api.coingecko.com' with error: Timeout('The DNS operation timed out after 31.590490579605103 seconds')
 33.35 | I | dns_hacks | dnspython failed to resolve dns (AAAA) for 'blockstream.info' with error: Timeout('The DNS operation timed out after 31.59534502029419 seconds')
 33.35 | I | dns_hacks | dnspython failed to resolve dns (A) for 'blockstream.info' with error: Timeout('The DNS operation timed out after 31.594367265701294 seconds')
 33.38 | I | dns_hacks | dnspython failed to resolve dns (AAAA) for 'electrum.blockstream.info' with error: Timeout('The DNS operation timed out after 31.602211713790894 seconds')
 33.38 | I | dns_hacks | dnspython failed to resolve dns (A) for 'electrum.blockstream.info' with error: Timeout('The DNS operation timed out after 31.60122585296631 seconds')
```
2025-05-21 18:41:25 +00:00