Commit Graph

19963 Commits

Author SHA1 Message Date
Sander van Grieken 29b5e1672b p4a ref 1098be6964cfc2156959e435e81c2c50f8398586 2026-04-22 11:17:30 +02:00
Sander van Grieken 7b7d7028bd android: hash-pin hostpython prerequisites for pyqt6sip and sip 2026-04-22 11:13:32 +02:00
Sander van Grieken 9d5b4a7cd9 android: use plain 'build' dependency (using 'venv') instead of 'build[virtualenv]',
remove setuptools as its use is now pinned via hostpython_prerequisites where applicable,
update depends asserts in pyqt6sip, sip, pyqt_builder
2026-04-22 10:15:30 +02:00
Sander van Grieken c8f5798d4e android: build pyqt_builder and sip ourselves, hash pin all hostpython_prerequisites 2026-04-22 10:15:30 +02:00
Sander van Grieken 854f95b794 android: openssl 3.0.18 2026-04-22 10:15:30 +02:00
Sander van Grieken 74f3c0427d android: pin hostpython3 PyProjectRecipe versions,
pin android and pyjnius recipes Cython version
2026-04-22 10:15:30 +02:00
Sander van Grieken f2e8b466cd qml: add type hints for QVariant pyqtProperty workarounds 2026-04-22 10:15:30 +02:00
f321x 323189874b android: update Qt6 to 6.10.2, PyQt6 to 6.10.2 2026-04-22 10:15:30 +02:00
Sander van Grieken 3f34e6bee0 qml: additional styling InfoTextArea in dialogs 2026-04-22 10:15:30 +02:00
Sander van Grieken 31b1974089 qml: FlatButton: show indicator for press-and-hold functionality 2026-04-22 10:15:30 +02:00
Sander van Grieken 8e78d74723 qml: remove unused components 2026-04-22 10:15:30 +02:00
Sander van Grieken 3c5dc66068 qml: various styling updates 2026-04-22 10:15:30 +02:00
Sander van Grieken 7c83e749ef icons: square closebutton.png and copy_bw.png so they don't resize on highlight (qml)
and upscale qrcode-[_white].png for the same reason and so we don't need to apply scaling
2026-04-22 10:15:30 +02:00
Sander van Grieken 895679a6be qml: styling History, ProxyConfig and NostrConfigDialog 2026-04-22 10:15:30 +02:00
Sander van Grieken 87bb63e442 qml: use standard Button for buttons outside of buttoncontainer 2026-04-22 10:15:30 +02:00
Sander van Grieken 3a740256c5 qml: add missing button containers 2026-04-22 10:15:30 +02:00
Sander van Grieken 1c0851c6eb styling OpenChannelDialog 2026-04-22 10:15:30 +02:00
Sander van Grieken 738992ac9e qml: don't add navigationbar padding when on-screen keyboard is visible,
also allow stackview pages to override navigationbar background color to
allow correct color runoff below buttons
2026-04-22 10:15:30 +02:00
Sander van Grieken 28f744f778 qml: additional styling updates 2026-04-22 10:15:30 +02:00
Sander van Grieken e99b3023e9 qml: wizard styling, password dialog styling 2026-04-22 10:15:30 +02:00
Sander van Grieken cdb5c0b86d qml: styling updates qt6.10 2026-04-22 10:15:30 +02:00
Sander van Grieken 42472a1e94 android: minimum API 26 required for Qt6.10 (Android 8.0) 2026-04-22 10:15:30 +02:00
Sander van Grieken 4d55b049b6 android: upgrade to androidx.core:core:1.16.0 from com.android.support:support-compat:28.0.0 2026-04-22 10:15:30 +02:00
Sander van Grieken fd5b867689 qml: don't import QtMultimedia when running on android (android 8 compat) 2026-04-22 10:15:30 +02:00
Sander van Grieken 9772a6d5b6 qml: add workarounds for issue assigning custom types to QObject properties
- on the python side, for pyqtProperty's with a setter, the pyqtProperty should be declared as QVariant type
- on the qml side, properties should be declared 'var', not the custom type.
2026-04-22 10:15:30 +02:00
Sander van Grieken dba6b751cc android: update for rebase p4a, update qt to 6.10, ndk to 28
p4a rebased on spesmilo/electrum_202602, 375a05de21b538d704174b1efeb3fc85d151f94e
2026-04-22 10:15:30 +02:00
ThomasV bca41d941d Merge pull request #10573 from f321x/qml_wallet_rename
qml: allow renaming wallets
2026-04-22 10:03:14 +02:00
ThomasV 294d21407a Merge pull request #10568 from SomberNight/202604_verifier_left_sibling_duplicates
verifier.py: fix CVE-2012-2459: reject left-sibling duplicates
2026-04-21 16:22:07 +02:00
ThomasV c189360120 Merge pull request #10590 from SomberNight/202604_test_lnpeer_flaky_hold_invoice_set
tests: lnpeer: fix flaky test "hold_invoice_set_doesnt_get_expired"
2026-04-21 13:30:21 +02:00
Felix 1bea23926f Merge pull request #10595 from f321x/update_ci_review_model
ci: bump code review ci claude version 4.6 -> 4.7
2026-04-21 13:27:30 +02:00
f321x 1ba31448a3 ci: bump code review ci claude version 4.6 -> 4.7
An improved Claude Opus version got released, this bumps the code review
CI to use it.
2026-04-21 13:24:02 +02:00
ghost43 b45d89e120 Merge pull request #10546 from f321x/bolt12_preparation_1
bolt12: preparation 1
2026-04-20 15:09:41 +00:00
SomberNight ca8bdba0c5 tests: lnpeer: fix flaky test "hold_invoice_set_doesnt_get_expired"
This test was flaky: the mpp_set resolution gets set to SETTLING several asyncio event loop iterations before the hold invoice callback "cb" gets called.
If the 0.1 sec polling triggers just in the middle of that interval, `assert cb_got_called` fails.

```
    async def check_mpp_state():
        async def wait_for_resolution():
            while True:
                await asyncio.sleep(0.1)
                if payment_key not in bob_w.received_mpp_htlcs:
                    continue
                if not bob_w.received_mpp_htlcs[payment_key].resolution == RecvMPPResolution.SETTLING:
                    continue
                return
        await util.wait_for2(wait_for_resolution(), timeout=2)
>       assert cb_got_called
E       assert False

tests/test_lnpeer.py:1898: AssertionError
```

see https://github.com/spesmilo/electrum/blob/16c8cb50e38c274cce8f9f66f28d8dd453f9f074/electrum/lnpeer.py#L3136-L3137

fixes https://github.com/spesmilo/electrum/issues/10589

-----

diff to reproduce the failure without present patch:
```
diff --git a/tests/test_lnpeer.py b/tests/test_lnpeer.py
index 8669931c24..e15973d68f 100644
--- a/tests/test_lnpeer.py
+++ b/tests/test_lnpeer.py
@@ -1885,6 +1885,7 @@ class TestPeerDirect(TestPeer):
             cb_got_called = False
             async def cb(_payment_hash):
                 self.logger.debug(f"hold invoice callback called. {bob_w.network.get_local_height()=}")
+                await asyncio.sleep(1)
                 nonlocal cb_got_called
                 cb_got_called = True
```
2026-04-19 15:23:33 +00:00
SomberNight 16c8cb50e3 lnchannel: (trivial) fix type hint of receive_fail_reasons 2026-04-18 17:16:57 +00:00
accumulator 3fbf597485 Merge pull request #10579 from f321x/qml_relay_list_padding
qml: add top padding to nostr relay url list
2026-04-14 18:18:05 +02:00
SomberNight 4a14feffd4 lnpeer: chan_reest: clarify my_current_per_commitment_point is ignored
`my_current_per_commitment_point` was only used prior to option_static_remotekey
2026-04-14 14:18:14 +00:00
f321x 24d93420fb qml: add top padding to nostr relay url list
The first relay url was close to the top of the ElTextArea and looked a
bit sliced. Adding some padding makes it look better.
2026-04-14 08:34:18 +02:00
SomberNight 016c8b5f4c bip21: add comment listing URI scheme handler registrations
It is sufficiently rare that we have to touch this stuff that I always have to re-discover where/how it is done. And it is impractical to grep for "bitcoin:" or "lightning:".

Putting this "master list" comment very close to the BITCOIN_BIP21_URI_SCHEME variable seems like a good spot - at least this is where I would look for it first.
2026-04-11 02:55:54 +00:00
ghost43 1235b4a6b9 Merge pull request #10572 from f321x/fix_coingecko
exchange rate: fix coingecko api
2026-04-08 09:46:42 +00:00
f321x 8a12874c8e qml: allow renaming wallets
Allows to rename a wallet file from the QML Wallet Details view.
This seems like a feature we should support as the use-case of a wallet can
change or maybe the user didn't think about a proper name when setting
up the wallet. Especially with lightning channels it is not possible to
restore from seed to change the name.

Fixes #4377
2026-04-08 10:45:59 +02:00
f321x 9827734ab6 exchange rate: fix coingecko api
The CoinGecko API failed as the Honduran Lempira currency returned
null as value, rendering the API unusable:
```
11.19 | I | exchange_rate.CoinGecko | getting fx quotes for EUR
11.41 | E | exchange_rate.CoinGecko | failed fx quotes: InvalidOperation([<class 'decimal.ConversionSyntax'>])
Traceback (most recent call last):
  File "/var/home/user/code/vibecoding_vm/electrum/electrum/exchange_rate.py", line 87, in update_safe
    self._quotes = await self.get_rates(ccy)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/home/user/code/vibecoding_vm/electrum/electrum/exchange_rate.py", line 449, in get_rates
    return dict([(ccy.upper(), to_decimal(d['value']))
                               ~~~~~~~~~~^^^^^^^^^^^^
  File "/var/home/user/code/vibecoding_vm/electrum/electrum/util.py", line 243, in to_decimal
    return Decimal(str(x))
decimal.InvalidOperation: [<class 'decimal.ConversionSyntax'>]
```

```
"hnl":{"name":"Honduran Lempira","unit":"L","value":null,"type":"fiat"}
```
2026-04-08 10:20:01 +02:00
ThomasV 3304d76920 Merge pull request #10571 from f321x/nwc_handle_null_params
plugin: nwc: handle 'params: null' in request
2026-04-07 13:37:53 +02:00
f321x fd230cf9d1 plugin: nwc: handle 'null' params in request
Some clients send 'params: null' instead of 'params: {}' or no
params key at all.
2026-04-07 09:52:13 +02:00
SomberNight 3d39074294 verifier.py: fix CVE-2012-2459: reject left-sibling duplicates
Due to how the txid-commitment merkle tree used in the block headers is constructed, we need an extra check to be able to validate the *position* of a txid in a block.

I think this is low severity for us.

See https://bitcointalk.org/?topic=102395 :

> The Merkle hash implementation that Bitcoin uses to calculate the Merkle
> root in a block header is flawed in that one can easily construct multiple
> lists of hashes that map to the same Merkle root.
> For example, merkle_hash([a, b, c]) and merkle_hash([a, b, c, c]) yield
> the same result. This is because, at every iteration, the Merkle hash
> function pads its intermediate list of hashes with the last hash if the
> list is of odd length, in order to make it of even length.
>
> And so, the Merkle root function can be effectively preimaged by
> changing the input so that one of the intermediate lists is of even
> length with the last two elements equal (where originally it was
> of odd length with a last element equal to the earlier mentioned two).
> As was later noted, this extends to any input length that is
> not a power of two:
> merkle_hash([a, b, c, d, e, f]) == merkle_hash([a, b, c, d, e, f, e, f]).
> Note that to maintain the same root hash, the only flexibility that
> exists is duplication of elements.

Ported from https://github.com/Electron-Cash/Electron-Cash/commit/165146362b4cb0ad74770b36aca1f9acb2800195

Co-authored-by: bitcoincashautist <80100588+A60AB5450353F40E@users.noreply.github.com>
2026-04-03 02:22:01 +00:00
ThomasV 7a6a39d1aa add comments about xpub encryption 2026-04-02 14:46:50 +02:00
ghost43 2ea4874600 Merge pull request #10566 from f321x/release_script_apk
contrib: check for unsigned apk in release.sh
2026-04-02 12:44:31 +00:00
f321x 7adc833f21 contrib: check for unsigned apk in release.sh
release.sh expects signed apks. if a non-releasemanager uses
release.sh to build it will build the apks unsigned and then
rename them to the same name as the signed apks. However
if the apks have already been built separately and are still named
*-unsigned.apk it will not detect them and instead try to build them
again. Instead it should just rename them to *-release.apk as if built
directly through release.sh.
2026-04-02 13:49:32 +02:00
SomberNight e71616e673 update release notes for version 4.7.2 2026-04-01 15:50:28 +00:00
f321x 4254c9a051 onion_message: fix route construction to ip
Don't include first hop of the path,
this is the hop from us to the first node and we don't
need a payload for ourselves.

Also adds unittest checking this.
2026-04-01 09:07:36 +02:00
f321x 4134dc7b25 onion_message: split send_onion_message_to
Factor out code from `send_onion_message_to` into a separate
function `_create_route_to_introduction_point` to make it
easier to reason about it and more testable.
2026-04-01 09:07:36 +02:00