EL
← All projectsElectrum

Electrum

Long-running lightweight Bitcoin wallet for desktop and mobile platforms.

BitcoinSoftware walletsNormal
Repository coverage

924 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

64security candidates205second-pass queue42AI analyses
55commits · 30 days
108commits · 60 days
454commits · 180 days
924commits · 365 days
Backfill bands
Aug 5 → Feb 6470 seen11 candidatesComplete
Feb 6 → Jun 6346 seen10 candidatesComplete
Jun 6 → Jul 653 seen2 candidatesComplete
Jul 6 → Aug 554 seen3 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

65/100 average clarity
191Strong · 80–100
409Adequate · 60–79
285Thin · 40–59
39Opaque · 0–39
2security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
SomberNight3492515063
f321x3712116070
Sander van Grieken98105057
ThomasV7221056
user322062
Roman Zeyde510053
Sasha Zykov411076
Aaron Fiore411068
Ferdinando Ametrano111096
Oren200043
Ilya Artemov200050
Felipe Micaroni Lalli100050
Analysis record

Published AI watches

Last scanned 43 minutes ago

Informational 19 AI analysisMessage 96 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

wallet: sign_message: strip whitespaces in GUIs, do not strip in CLI

This commit tidies up how Electrum handles extra spaces around Bitcoin addresses, messages, and signatures when signing or verifying messages. Previously, different parts of the program (desktop GUI, mobile-style GUI, command line) behaved…

Behavior normalization across GUI and CLI interfacesNo cryptographic primitive changedNo privilege boundary crossed
4c3064f5by SomberNight+27−185 files
No security note in commit
Informational 19 AI analysisMessage 96 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

qml: strip whitespace from message before signing, as in qt gui

This commit fixes a minor consistency bug in Electrum's newer QML (mobile-style) user interface. When signing a message, the app now removes accidental spaces at the start or end of the message and address, just like the older desktop Qt i…

Behavioral inconsistency between GUI implementations could cause user confusion or failed verificationNo cryptographic weakness introduced; change is input normalizationNo memory-unsafe code, no privilege changes, no network changes
72507328by Ferdinando Ametrano+3−01 file
No security note in commit
Low 25 AI analysisMessage 68 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

trezor: drop session after closing it

This commit fixes a bug in Electrum's support for Trezor hardware wallets. After a Trezor session times out or is closed, Electrum now forgets the old session ID. Previously it kept the stale session ID, so the next attempt to sign a trans…

Fixes a stale-session reference that caused InvalidSessionError on re-authenticationEnsures PIN re-prompt after session timeout/closureFailure mode was denial-of-service (transaction signing crash), not unauthorized signing
071b1e24by f321x+8−51 file
No security note in commit
Informational 18 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

qml: update ConfirmTxDialog onValidChanged

This is a small user-interface fix for the Electrum mobile/QML app. When sweeping private keys, the confirmation dialog that shows how much money will be moved initially displayed an amount of 0 because it did not refresh after the transac…

bd776e24by f321x+3−01 file
No security note in commit
Low 42 AI analysisMessage 85 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

wallet.check_sighash: don't assume tx.add_info_from_wallet alrdy ran

This commit fixes a defensive check in the Electrum Bitcoin wallet. Before signing a transaction, Electrum checks whether the transaction uses unusual 'sighash' flags that could allow someone else to move coins unexpectedly. The bug was th…

Sighash sanity check could be bypassed for beyond-gap-limit wallet inputsFix adds defensive deep-copy and wallet-info population inside check_sighashRegression test demonstrates dangerous sighash is now caught even with gap_limit=2
b57327fbby SomberNight+48−02 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

hw_wallet/qt: reuse device message dialog across button requests

This commit is a user-interface performance and polish fix for Electrum's hardware wallet integration. It stops the app from destroying and recreating the same on-screen prompt every time a hardware wallet asks the user to confirm a transa…

898a4c27by Sasha Zykov+15−11 file
No security note in commit
Low 25 AI analysisMessage 88 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

lnmsg: add new primitive type `bip340sig`, add tlv merkle root calculation and schnorr-sign over tlvs, implicit en/decode utf8 fields, schnorr signature verification.

This commit adds new Lightning Network message handling code to Electrum. It introduces a new BIP-340 Schnorr signature field type, computes Merkle roots over TLV (type-length-value) records, signs and verifies those roots, and adds implic…

New cryptographic signing/verification path addedNew BIP-340 tagged-hash Merkle root constructionSignature TLVs excluded from the Merkle root they sign
759ef10dby Sander van Grieken+160−111 file
No security note in commit
Moderate 55 AI analysisMessage 68 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

lnpeer: on_ping: drain out-socket buffer

This change fixes a potential denial-of-service weakness in Electrum's Lightning network peer handling. Previously, when Electrum replied to a peer's 'ping' message, it would add the reply to the outgoing socket buffer without waiting to c…

memory exhaustion / DoS mitigationunbounded outbound buffer growth preventedbackpressure added to peer ping/pong handling
9b206576by SomberNight+6−12 files
Vendor flagged security relevance
Informational 20 AI analysisMessage 100 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

ci: security review: give more permissions to claude

This commit changes Electrum's automated CI security-review bot so that the Claude AI assistant is allowed to run shell commands and modify files on its own, rather than only answering questions. The change is intentional and runs inside a…

New command-line flag named `--dangerously-skip-permissions` introducedCI script now permits an AI agent to execute commands and modify files without interactive permission checksExecution context changed from root to unprivileged `node` user to satisfy Claude's refusal to run as root
39cdb23eby f321x+4−12 files
No security note in commit
Informational 15 AI analysisMessage 90 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

tests: regtest: make test_just_in_time less flaky

This commit only changes a test script. It adds a wait helper so a test that opens two Lightning channels in a row does not fail randomly on continuous integration. There is no change to Electrum's actual wallet or Lightning code, so users…

12547f94by f321x+23−01 file
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

qml: styling updates qt6.10

This commit is a routine user-interface refresh for Electrum's mobile/desktop QML app, adjusting colors, spacing, button containers, and placeholder text to match newer Qt 6.10 styling. There is no security-relevant change and no indicatio…

cdb5c0b8by Sander van Grieken+209−17540 files
No security note in commit
Low 25 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

qml: add workarounds for issue assigning custom types to QObject properties

This commit changes how the Electrum mobile/desktop QML GUI passes custom data objects between Python and the user interface. It switches many typed properties to the generic QVariant/'var' type and adds runtime type checks (asserts) in Py…

Type system relaxation: custom typed QML/Python properties changed to generic QVariant/varRuntime type enforcement added via assert statements in Python settersNo explicit security framing in commit message or diff
9772a6d5by Sander van Grieken+86−5924 files
No security note in commit
Informational 15 AI analysisMessage 35 · Opaque
EL ElectrumElectrum BitcoinSoftware wallets

qml: additional styling updates

This commit is purely a user-interface styling refresh for Electrum's QML (mobile/desktop) GUI. It swaps some visual components (highlight panes, button containers, padding, colors) and introduces a new shared 'DialogHighlightPane' control…

28f744f7by Sander van Grieken+136−8525 files
No security note in commit
Moderate 62 AI analysisMessage 93 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

verifier.py: fix CVE-2012-2459: reject left-sibling duplicates

This commit fixes a known Bitcoin weakness (CVE-2012-2459) in Electrum's light-client verification. Because Bitcoin's Merkle tree duplicates the last hash when a level has an odd number of items, an attacker can craft a block proof that ma…

Fixes CVE-2012-2459 (Merkle tree duplicate-node weakness)Adds explicit LeftSiblingDuplicate exceptionStrengthens SPV Merkle proof verification
3d390742by SomberNight+106−262 files
Vendor flagged security relevance
Moderate 65 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

daemon: set restrictive permission on RPC-server unix domain socket

Electrum's background daemon runs a local control server using a Unix domain socket. Previously, that socket file was created with permissions 0775, meaning any user in the same group could connect to it and potentially control the wallet.…

permission tightening on local RPC socketacknowledged race condition between socket creation and chmodlocal privilege boundary issue (group-writable socket)
9d204abfby SomberNight+8−11 file
Vendor flagged security relevance
Moderate 62 AI analysisMessage 78 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

in GUI mode, only start a limited minimal RPC server

This commit reduces the attack surface of Electrum's built-in remote-control server when running in normal GUI mode. Previously, the RPC server exposed many wallet-related commands; now, in GUI mode on mainnet, it only exposes two safe com…

Reduction of RPC attack surface in GUI modeUnencrypted localhost RPC with config-stored passwordWindows localhost TCP exposure of RPC server
d951a3d2by SomberNight+22−102 files
Vendor flagged security relevance
Low 37 AI analysisMessage 97 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

fix: remove negative fee assert from get_tx_fee_warning

This commit removes a hard crash (assertion) in Electrum's wallet code when a user loads a partially-signed Bitcoin transaction (PSBT) whose calculated fee is negative. Instead of crashing, Electrum now logs a warning and continues. A nega…

assertion replaced with warning lognegative transaction fee handlingPSBT loading robustness
06490657by f321x+2−11 file
No security note in commit
Moderate 63 AI analysisMessage 86 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

daemon: forbid "setconfig" command to change rpcserver settings in-flight

This commit fixes a security issue in Electrum's background daemon (the program that stays running to serve wallet requests). Previously, a user could run a command that would instantly strip the RPC password from a running daemon, leaving…

Authentication bypass via empty RPC passwordIn-flight weakening of daemon security settingsInconsistent security state across daemon restart
0dcef978by SomberNight+16−72 files
Vendor flagged security relevance
Informational 21 AI analysisMessage 71 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

wizard: catch NotLegacySinglesigScriptType

This commit fixes a bug in Electrum's wallet setup wizard. Previously, if a user tried to import an individual private key for an unusual script type (like p2wsh), the wizard would crash with an internal error instead of showing a friendly…

Unhandled exception converted to user-facing errorImproves input validation and error handling in wallet import pathNo memory corruption, privilege escalation, or cryptographic weakness evident
543b73beby f321x+7−21 file
No security note in commit
Informational 15 AI analysisMessage 65 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

transaction: use dummy DER ECDSA sig from descriptor.py

This commit is a minor code cleanup. It replaces a locally-defined placeholder fake cryptographic signature with a shared constant from another file. The placeholder is only used to estimate transaction size and is never broadcast or used …

e9ac3e93by f321x+2−31 file
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Lower-prioritylnrouter: LiquidityHints: add more type hintsby SomberNight · cee9f06d · Jul 29, 2026 · 3 filesMessage 68 · AdequateTriage 0Details
Commit message · SomberNight

lnrouter: LiquidityHints: add more type hints

and rename "amount" to "amount_msat"
- it's an easy mistake to pass an amount with a different unit, and we don't have type-checking against that... this is the least we should do

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI review queuedtest_lnwallet: add unittest for single channel mpp split configby f321x · 14f7fa0b · Jul 28, 2026 · 1 fileMessage 83 · StrongTriage 12Details
Commit message · f321x

test_lnwallet: add unittest for single channel mpp split config

Tests that all parts of a multi-part payment over a single channel
are constructed using the channel of the split configuration.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
Lower-prioritytests: move ln graph definitions and prepare_invoice to lnhelpers.pyby f321x · e281a4c4 · Jul 28, 2026 · 2 filesMessage 83 · StrongTriage 0Details
Commit message · f321x

tests: move ln graph definitions and prepare_invoice to lnhelpers.py

This makes them reusable from test files other than test_lnpeer and
removes the deferred test_lnpeer import in prepare_chans_and_peers_in_graph.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Lower-prioritylnwallet: use split config channel for single channel mppby f321x · bf1b4a1b · Jul 28, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · f321x

lnwallet: use split config channel for single channel mpp

Use the channel returned by the split config when sending a
single channel mpp (multiple parts on a single channel), instead
of allowing the pathfinding to use any channel.
Otherwise it can happen that we have a good split config fitting a
specific channel, but the pathfinding then tries to put both parts
on another channel that cannot handle the sum of the parts, raising
at _assert_can_add_htlc later on and failing the payment.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-prioritytests: check liquidity hints are updated for all htlcsby f321x · 2f82eca1 · Jul 27, 2026 · 2 filesMessage 60 · AdequateTriage 0Details
Commit message · f321x

tests: check liquidity hints are updated for all htlcs

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Lower-prioritylnworker/lnrouter: update liquidity hints in htlc callbacksby f321x · b176c50a · Jul 27, 2026 · 2 filesMessage 73 · AdequateTriage 0Details
Commit message · f321x

lnworker/lnrouter: update liquidity hints in htlc callbacks

Update the channel liquidity hints in the
`htlc_fulfilled`/`htlc_failed` callbacks instead of the htlc
log handler (`_process_htlc_log()`).
`_process_htlc_log()` would raise `PaymentSuccess()` on the first fulfilled
htlc, removing the inflight htlcs counted in `LiquidityHintMgr` only for this
htlc's route.
All other htlcs that arrive later would leak and not get removed anywhere,
so the inflight htlc counter didn't get decreased and successful routes
would be punished by the penalty.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritytest_lnpeer: add unittest for mpp fee budget checkby f321x · 42cb99d0 · Jul 27, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · f321x

test_lnpeer: add unittest for mpp fee budget check

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-priorityLNWallet: fix fee budget check regressionby f321x · fc407c39 · Jul 27, 2026 · 1 fileMessage 78 · AdequateTriage 0Details
Commit message · f321x

LNWallet: fix fee budget check regression

The fee budget during local pathfinding route creation incorrectly
compared the full payment amount against the full budget on every
route instead of the partial amount against its fraction of the budget.
This is a regression introduced by df5c8c4c9 and makes it possible
for a payment to exceed the budget or a route to be incorrectly considered
too expensive.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Lower-priorityci: bump security review ci model to opus 5by Felix · 1334146d · Jul 27, 2026 · 1 fileMessage 77 · AdequateTriage 0Details
Commit message · Felix

ci: bump security review ci model to opus 5

Bump the LLM used by the security review CI script from Claude Opus 4.8 to Claude Opus 5

77/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Names security-relevant behavior explicitly
Lower-priorityqt: rename color themes (the user-visible names of the themes)by SomberNight · 1408d6d4 · Jul 23, 2026 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · SomberNight

qt: rename color themes (the user-visible names of the themes)

"Light" is actually the Platform-dependent system theme, where we let Qt define the palette and it leave it alone. Qt in turn mostly defers to the OS. On modern windows/macos/gnome/kde/etc, if the OS is set to "dark mode", Electrum will end up using a system-specific dark mode. Hence the name "Light" is confusing.

"Dark" is the qdarkstyle theme, which is largely platform-independent.

I think it's fine if these names are not completely "user-friendly".

closes https://github.com/spesmilo/electrum/issues/10767

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI review queuedjson_db: set_modified after incomplete databy f321x · f75f1958 · Jul 21, 2026 · 2 filesMessage 80 · StrongTriage 12Details
Commit message · f321x

json_db: set_modified after incomplete data

Set the JsonDB modified after `maybe_load_incomplete_data`
removed a corrupted patch. Otherwise we might not override
the file on disk, append more patches and lose them all again
on the next reload.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
Lower-priorityjson_db: escape '\' and '~' in json patch pointerby f321x · 97007d9e · Jul 21, 2026 · 2 filesMessage 88 · StrongTriage 0Details
Commit message · f321x

json_db: escape '\' and '~' in json patch pointer

> Because the characters '~' (%x7E) and '/' (%x2F) have special
meanings in JSON Pointer, '~' needs to be encoded as '~0' and '/'
needs to be encoded as '~1' when these characters appear in a
reference token.

https://www.rfc-editor.org/info/rfc6901/

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI review queuedwallet_db: register onion_keys converterby f321x · 5b2eb060 · Jul 21, 2026 · 2 filesMessage 58 · ThinTriage 12Details
Commit message · f321x

wallet_db: register onion_keys converter

`Channel.onion_keys` had no registered converter for hex -> bytes, causing
`pop_onion_key()` to return a hex str instead of bytes after the keys
got loaded from db following a restart.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
Security candidateqml: update ConfirmTxDialog onValidChangedby f321x · bd776e24 · Jul 14, 2026 · 1 fileMessage 58 · ThinInformational 18Details
Commit message · f321x

qml: update ConfirmTxDialog onValidChanged

Commit 2de11eac923d51befe44dcc748505714196a7f2c gated the
ConfirmTxDialog amount behind `finalizer.valid`.
When sweeping private keys from the sweep view the resulting
`ConfirmTxDialog` is not valid in the beginning, and after it
turns valid nothing causes it to update. This results in the amount
being displayed as `0` even after it finished fetching the keys balances.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
secret or key material
AI analysis · Informational 18/100

This is a small user-interface fix for the Electrum mobile/QML app. When sweeping private keys, the confirmation dialog that shows how much money will be moved initially displayed an amount of 0 because it did not refresh after the transaction became valid. The patch makes the dialog refresh its amount display when validity changes, so users see the correct amount before confirming. There is no security vulnerability here.

Lower-priorityswaps: destroy swap transport on failed initializationby f321x · c5a38e5a · Jul 14, 2026 · 2 filesMessage 85 · StrongTriage 0Details
Commit message · f321x

swaps: destroy swap transport on failed initialization

Call `swap_transport.destroy()` when the swap transport initialization
task fails, otherwise the task will keep the swap transport tasks alive,
leaking a swap transport for each failed connection attempt.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-prioritylntransport: wrap connection errors in send_bytes_and_drainby SomberNight · 9ff2a566 · Jul 13, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · SomberNight

lntransport: wrap connection errors in send_bytes_and_drain

LightningPeerConnectionClosed is handled in Peer.handle_disconnect.

```
162.39 | E | lnpeer.Peer.[LNGossip, 02ab5336d0-d8be58cb] | Exception in main_loop: ConnectionResetError('Connection lost')
Traceback (most recent call last):
File "/home/user/wspace/electrum/electrum/util.py", line 1218, in wrapper
return await func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/wspace/electrum/electrum/lnpeer.py", line 544, in wrapper_func
return await func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/wspace/electrum/electrum/lnpeer.py", line 558, in main_loop
async with self.taskgroup as group:
^^^^^^^^^^^^^^
File "/home/user/wspace/aiorpcX/aiorpcx/curio.py", line 304, in __aexit__
await self.join()
File "/home/user/wspace/electrum/electrum/util.py", line 1423, in join
task.result()
~~~~~~~~~~~^^
File "/home/user/wspace/electrum/electrum/lnpeer.py", line 897, in _message_loop
await self._process_message(msg)
File "/home/user/wspace/electrum/electrum/lnpeer.py", line 277, in _process_message
await f(*args)
File "/home/user/wspace/electrum/electrum/lnpeer.py", line 389, in on_ping
await self.transport.send_bytes_and_drain(raw_msg)
File "/home/user/wspace/electrum/electrum/lntransport.py", line 238, in send_bytes_and_drain
await self.writer.drain()
File "/usr/lib/python3.13/asyncio/streams.py", line 386, in drain
await self._protocol._drain_helper()
File "/usr/lib/python3.13/asyncio/streams.py", line 166, in _drain_helper
raise ConnectionResetError('Connection lost')
ConnectionResetError: Connection lost
```

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityandroid build: fix prev: chown fresh_clone base dir before git cloneby SomberNight · 7785865c · Jul 13, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · SomberNight

android build: fix prev: chown fresh_clone base dir before git clone

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI review queuedqml: emit a single dataChanged when updating blockchain heightby f321x · fbe9e2d8 · Jul 13, 2026 · 1 fileMessage 73 · AdequateTriage 12Details
Commit message · f321x

qml: emit a single dataChanged when updating blockchain height

emit a single dataChanged signal over the whole model index range
once in `QETransactionListModel.updateBlockchainHeight()` instead
of emitting a separate signal for each transaction.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedqml: don't compute notification balance delta for large tx batchesby f321x · 7b4759c5 · Jul 13, 2026 · 1 fileMessage 85 · StrongTriage 12Details
Commit message · f321x

qml: don't compute notification balance delta for large tx batches

Don't compute the wallet balance delta for the new tx notification
shown after synchronizing the wallet if the notification batch
exceeds 10 txs. Otherwise the calculation will block the UI, especially
for large wallets with many new txs after initial sync.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedqml: change event callback logs to debugby f321x · a6cc4e08 · Jul 13, 2026 · 1 fileMessage 60 · AdequateTriage 12Details
Commit message · f321x

qml: change event callback logs to debug

Change per-tx event callback logs to debug, might make the process
a bit less clogged if there are many txs.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedqml: don't force-build address model from tx event handlersby f321x · 35fc4a13 · Jul 13, 2026 · 1 fileMessage 73 · AdequateTriage 12Details
Commit message · f321x

qml: don't force-build address model from tx event handlers

The addressCoinModel property getter lazily constructs
QEAddressCoinListModel, whose __init__ runs a full (slow) initModel().
Instead of initializing it on a new transaction, blocking the UI,
just initialize it lazily when the user actually opens it.
Same pattern as importAddresses/importPrivateKeys.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedqml: skip per-tx balance updates during syncby f321x · 54cccd4f · Jul 13, 2026 · 1 fileMessage 68 · AdequateTriage 12Details
Commit message · f321x

qml: skip per-tx balance updates during sync

During synchronization, new_transaction fires for every incoming tx and
each balanceChanged emit makes QML recompute the balance on the GUI
thread. The balance isn't shown anyway during sync.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedqml: QETransactionListModel: add txid->row indexby f321x · 997e8a2d · Jul 13, 2026 · 1 fileMessage 68 · AdequateTriage 12Details
Commit message · f321x

qml: QETransactionListModel: add txid->row index

Add a txid -> model row index dict to `QETransactionListModel`
instead of re-iterating the `tx_history` list on each event
to find the tx item.
This noticeably unblocks the UI during sync of a large wallet.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
Lower-prioritycontrib/make_download: fix importsby SomberNight · 58ae11d8 · Jul 10, 2026 · 1 fileMessage 70 · AdequateTriage 0Details
Commit message · SomberNight

contrib/make_download: fix imports

not sure why this was not an issue before(?)
perhaps due to python version differences
```
$ ./contrib/make_download /home/user/wspace/electrum-web
Traceback (most recent call last):
File "/home/user/wspace/electrum/./contrib/make_download", line 17, in <module>
version_spec = importlib.util.spec_from_file_location('version', 'electrum/version.py')
^^^^^^^^^^^^^^
AttributeError: module 'importlib' has no attribute 'util'
```

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI review queuedqml: android on-screen keyboard submit trigger acceptedby Sander van Grieken · 5fe0a292 · Jul 9, 2026 · 1 fileMessage 50 · ThinTriage 12Details
Commit message · Sander van Grieken

qml: android on-screen keyboard submit trigger accepted

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path