EL
← All projectsElectrum

Electrum

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

BitcoinSoftware walletsNormal
Repository coverage

1149 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.

90security candidates259second-pass queue1003AI analyses
132commits · 30 days
258commits · 60 days
541commits · 180 days
1001commits · 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.

66/100 average clarity
220Strong · 80–100
546Adequate · 60–79
339Thin · 40–59
44Opaque · 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.
ThomasV137891162
SomberNight39330362063
f321x40124385070
Sander van Grieken10910101057
ghost4341516070
Felix2439072
user323062
ekzyis222053
accumulator613071
Roman Zeyde515053
Sasha Zykov515075
Aaron Fiore414068
Analysis record

Published AI watches

Last scanned 29 minutes ago

Informational 15 AI analysisMessage 78 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10988 from f321x/update_security_review_ci_model

This commit updates Electrum's internal CI (continuous integration) script that runs an automated security review using Anthropic's Claude Code tool. It changes the AI model version used for reviews from 'claude-opus-5' to 'claude-opus-5-5…

CI hardening: detects and reports AI model downgrades during automated security reviewNo changes to application code, cryptography, network protocol, or build artifactsNo privilege escalation, injection, or data-exfiltration vectors introduced by the diff
638fbba8by Felix+75−111 file
No security note in commit
Informational 12 AI analysisMessage 90 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

ci: security review: warn if the model got downgraded

This commit updates Electrum's own CI security-review script. It adds detection and warnings when the automated code reviewer (Claude Code) silently falls back to a different AI model, for example after a content-policy refusal. It does no…

CI-only changeNo modification of wallet, crypto, networking, or build artifactsAdds detection for AI model fallback/downgrade in automated security review
ace2ca7aby f321x+74−101 file
No security note in commit
Low 44 AI analysisMessage 68 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10987 from spesmilo/fix_10986

This commit fixes a bug where Electrum failed to recognize certain already-signed Bitcoin transactions as complete. Specifically, for native SegWit inputs, Bitcoin Core can produce a finalized PSBT with a valid witness but an empty scriptS…

Logic error in transaction completeness detectionNative SegWit witness handling edge casePSBT interoperability issue with Bitcoin Core
bef80421by ghost43+11−02 files
No security note in commit
Low 35 AI analysisMessage 81 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

transaction: treat native segwit input with non-empty witness as complete

This commit fixes a bug where Electrum incorrectly treated finalized Bitcoin transactions as incomplete. Some wallet software (like Bitcoin Core and Sparrow) creates native SegWit transactions that omit an empty placeholder field Electrum …

Logic error in transaction completeness detectionPotential denial of service / user funds stuck due to refusal to broadcast valid finalized transactionInteroperability failure with Bitcoin Core and Sparrow PSBT output
e9bb42e6by ThomasV+11−02 files
No security note in commit
Moderate 68 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10981 from spesmilo/do_not_sign_txin_with_witness

This change prevents Electrum from re-signing Bitcoin transaction inputs that already contain a witness (the data proving the input was authorized). The patch fixes a bug where Electrum could incorrectly sign a non-SegWit input as if it we…

Incorrect signature algorithm selection for non-SegWit inputs when witness data is presentPSBT handling edge case where pre-existing witness data influences signing pathPotential invalid signature production during transaction signing
9da4c342by ThomasV+10−21 file
No security note in commit
Informational 15 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10974 from SomberNight/202609_nostr_psbt_xpub

This commit only adds a long code comment explaining a design choice in Electrum's PSBT-over-Nostr plugin. It does not change any program behavior. The comment documents that the plugin derives each cosigner's Nostr secret key from their B…

Documentation-only changeExplicit design tradeoff disclosure: cosigners can derive each other's Nostr secret keys from shared xpubsNo functional code change
46408a78by ThomasV+13−01 file
No security note in commit
Low 42 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10980 from spesmilo/add_input_from_network_do_not_ignore_exceptions

This is a one-line bugfix in Electrum's transaction handling. Previously, the code accidentally swallowed (hid) almost all exceptions when fetching extra transaction data from the network, only re-raising errors that were both network-rela…

Exception swallowing bug fixedNetwork/transaction input enrichment logic changedSilent failure mode removed
bb9d3280by ghost43+1−11 file
No security note in commit
Moderate 60 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10970 from f321x/fix_bolt11_bugs_2

This commit fixes several bugs in Electrum's handling of BOLT11 Lightning invoices. The most user-visible fixes are: stricter validation of invoice amounts (rejecting zero, negative, sub-millisatoshi, and leading-zero amounts), correct pad…

Stricter BOLT11 amount validation prevents acceptance of zero, negative, sub-millisatoshi, and leading-zero amountsFixed int_to_data5 padding bug that corrupted small timestamp values during invoice round-tripMalformed 'r' routing tags now raise exceptions instead of being silently skipped
4b92c0f2by ghost43+82−939 files
No security note in commit
Moderate 61 AI analysisMessage 80 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

add_info_from_network: do not swallow exceptions

Electrum's transaction builder had a bug where it would ignore certain consistency errors when fetching extra transaction data from the network. A malicious or misbehaving server could supply a wrong input amount, and Electrum would silent…

Swallowed exception leading to use of attacker-controlled input valuePSBT input consistency check bypassedPotential malicious Electrum server influence on transaction signing
3f67b21bby ThomasV+1−11 file
Vendor flagged security relevance
Informational 15 AI analysisMessage 60 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

bolt11: remove tag arg from get_routing_info

This is a small code cleanup change. A function that reads routing hints from Lightning invoices no longer takes a tag argument because only one type of routing hint ('r') is now supported. All callers are updated accordingly. There is no …

e78fba28by f321x+12−127 files
No security note in commit
Moderate 62 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10940 from accumulator/fix_10937

This commit tightens how Electrum parses Bitcoin payment requests (BOLT11 lightning invoices and BIP21 URIs). It turns previously uncaught internal errors into proper validation failures, rejects malformed invoice fields that used to be si…

Stricter input validation for externally supplied BOLT11 invoices and BIP21 URIsPreviously uncaught exceptions (ValueError, UnicodeDecodeError, ecc errors) are now wrapped in domain-specific decode exceptionsMalformed fallback addresses are skipped rather than aborting or crashing
a57ef6e7by Felix+707−9610 files
No security note in commit
Low 40 AI analysisMessage 36 · Opaque
EL ElectrumElectrum BitcoinSoftware wallets

bolt11: followup #10940

This commit tightens how Electrum parses BOLT11 Lightning invoices. It now rejects duplicate 'n' (node pubkey) tags instead of silently keeping only the first one, and it rejects invoice timestamps that are negative or too far in the futur…

Stricter validation of invoice timestamp boundsDuplicate 'n' tag now raises an exception instead of being silently droppedFollow-up to prior PR #10940, indicating a recent area of security-sensitive review
3026fbdbby f321x+14−232 files
No security note in commit
Low 32 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10737 from sashazykov/hw-close-wallet-thread-leak

This commit fixes a shutdown bug in Electrum's hardware wallet support. Previously, if disconnecting from a hardware wallet failed, the cleanup thread could keep running, which could crash the application when closing. The fix stops the th…

Process abort/crash at shutdown due to leaked QThreadException during cleanup not handled, potentially causing abnormal terminationHardware wallet client close made best-effort with error logging
5b77ca46by Felix+9−22 files
No security note in commit
Informational 23 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10958 from SomberNight/202609_deps

This commit is a routine dependency update for the Electrum Bitcoin wallet. It bumps versions of Python, OpenSSL, secp256k1, and various Python packages used in builds and runtime. The commit itself does not fix any known security bug in E…

Dependency version bumps for cryptographic libraries (OpenSSL, libsecp256k1, electrum-ecc)Routine maintenance commit with no explicit security claimHash-only changes in deterministic requirements files
8bd8c3fbby ghost43+57−5612 files
No security note in commit
Informational 21 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10965 from SomberNight/202609_header_checkpoints

This commit only adds new Bitcoin block header checkpoints to Electrum's built-in chain data files. Checkpoints are hardcoded reference points that help the wallet verify it is following the real blockchain and not a fake one. Updating the…

Hardcoded blockchain checkpoints extended for all supported networksNo executable code or cryptographic logic changedNo bug fix, privilege change, or input validation change present
9e0b7e64by ghost43+276−04 files
No security note in commit
Informational 15 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

update block header checkpoints

This commit simply refreshes Electrum's built-in list of Bitcoin blockchain checkpoints. Checkpoints are known-good block hashes that help the wallet verify it is following the real chain. The update adds newer checkpoints for mainnet, sig…

e11c579bby SomberNight+276−04 files
No security note in commit
Low 46 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10945 from accumulator/stale_utxo_data_fixes

This commit fixes cases where Electrum's wallet cache could hold onto outdated information about coins and transactions after blockchain reorganizations or mempool changes. For example, if a transaction was previously thought to be mined b…

stale cached state after reorg/mempool evictionincorrect confirmation metadata displayed to userscache invalidation added at multiple state transitions
e20b24c0by Felix+132−239 files
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

transaction: add set_mined_info setter to TxInput

This commit is a simple code cleanup: it replaces two repeated lines that set a transaction input's block height and position with a single helper method called set_mined_info. There is no change in behavior, no bug fix, and no security re…

61f71acbby f321x+7−73 files
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

qt/util: consolidate short_id check pattern

This is a small internal code cleanup in the Electrum Bitcoin wallet. It moves the logic that builds a compact transaction identifier (like '123x4') into one shared helper method, and removes a duplicate helper class. There is no user-faci…

2af9e26aby f321x+7−133 files
No security note in commit
Informational 19 AI analysisMessage 85 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

contrib: build appimage: fetch ca-certificates from pinned sources

This commit changes how the Electrum AppImage build container first obtains trusted web certificates. Because the build's pinned Debian package sources use HTTPS, the container needs certificates before it can talk to them. The old method …

build pipeline changetemporary downgrade from HTTPS to HTTP for package bootstrappackage integrity still protected by apt GPG signatures
fd687940by f321x+11−41 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.

AI review queuedMerge pull request #10798 from SomberNight/202608_base43by Felix · 0e9f1a0d · Aug 7, 2026 · 2 filesMessage 73 · AdequateModerate 51Details
Commit message · Felix

Merge pull request #10798 from SomberNight/202608_base43

transaction: cap max tx size we allow for base43

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathmerge-commit duplicate discountsecond-pass: security-sensitive path
AI analysis · Moderate 51/100

This commit fixes a performance weakness in Electrum's handling of large Bitcoin transactions encoded in 'base43'. The base43 encoding and decoding functions run in quadratic time, meaning the work grows much faster than the input size. An attacker could send or feed Electrum a very large base43 transaction string and cause the program to freeze or become unresponsive for a noticeable period (a denial-of-service effect). The patch limits how large a base43 string Electrum will try to decode and also makes the encoder slightly faster. It does not fix the underlying quadratic algorithm.

AI review queuedMerge pull request #10799 from SomberNight/202608_android_secure_windowby accumulator · 4622390c · Aug 7, 2026 · 5 filesMessage 73 · AdequateLow 41Details
Commit message · accumulator

Merge pull request #10799 from SomberNight/202608_android_secure_window

qml/android: protect WIF keys from screenshots in more places

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathmerge-commit duplicate discountsecond-pass: security-sensitive path
AI analysis · Low 41/100

This update tightens a privacy feature on Electrum's Android app that prevents the screen from being captured while sensitive Bitcoin private keys or seed phrases are visible. Before, the protection could be accidentally turned off when multiple wallet windows overlapped, potentially letting malware or a malicious screenshot grab secret key material. The fix makes sure protection stays active whenever any sensitive screen is actually visible.

AI review queuedqml/android: protect WIF keys from screenshots in more placesby SomberNight · 739cba5d · Aug 5, 2026 · 5 filesMessage 81 · StrongLow 48Details
Commit message · SomberNight

qml/android: protect WIF keys from screenshots in more places

also fix bug in AddressDetails where we were never unsetting the secure flag

notes re dialog stacking:
- if we stack two "secure" dialogs and then pop one of them, the remaining "secure" dialog should still have secureWindow == true.
- we could either impl some refcounting for the number of alive "secure" dialogs
- or perhaps simpler but less robust, qml binding magic using the "when" as done here might work?
- ref https://doc.qt.io/qt-6/qml-qtqml-binding.html#restoreMode-prop
- the default restoreMode (Binding.RestoreBindingOrValue) seems to do what we want here
- I don't explicitly set it as the Qt docs have this note:
> Note: This property exists for backwards compatibility with earlier versions of Qt. Don't use it in new code.
- seems to work on my phone

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 48/100

This commit tightens screen-shot protection for private Bitcoin wallet keys (WIF keys and seed phrases) in Electrum's Android/QML user interface. It also fixes a bug where one screen (AddressDetails) was leaving the 'secure window' flag permanently on, which could leave the app in a protected state at the wrong time. The change makes sure the secure flag follows whether the dialog is actually visible, and adds the same protection to two more dialogs that handle private keys.

AI review queuedMerge pull request #10791 from SomberNight/202608_wallet_sign_message2by ghost43 · b1aa52d7 · Aug 3, 2026 · 5 filesMessage 73 · AdequateInformational 18Details
Commit message · ghost43

Merge pull request #10791 from SomberNight/202608_wallet_sign_message2

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

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathmerge-commit duplicate discountsecond-pass: security-sensitive path
AI analysis · Informational 18/100

This change moves the trimming of leading/trailing spaces in message-signing fields from the user-interface code into the shared wallet code. For the graphical interfaces (Qt and QML), spaces are still stripped automatically for convenience. For the command-line interface, a new option disables that stripping so that exact user input is preserved. It is a usability/behavior consistency fix, not a fix for an active security vulnerability.

AI review queuedwallet: decrypt_message: nicer error msg if pubkey is unrelatedby SomberNight · 92e938f4 · Aug 3, 2026 · 1 fileMessage 50 · ThinInformational 22Details
Commit message · SomberNight

wallet: decrypt_message: nicer error msg if pubkey is unrelated

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
AI analysis · Informational 22/100

This commit improves the error handling in Electrum's message decryption feature. Previously, if a user tried to decrypt a message using a public key that did not belong to their wallet, the code could proceed and likely fail with a confusing internal error. Now it explicitly checks whether the public key is wallet-related and shows a clear, user-friendly error message ('Pubkey unrelated to wallet.'). This is a defensive hardening change, not a fix for an active security vulnerability.

AI review queuedwallet: sign_message: force kwargsby SomberNight · e1eb2a34 · Aug 3, 2026 · 4 filesMessage 35 · OpaqueLow 29Details
Commit message · SomberNight

wallet: sign_message: force kwargs

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Low 29/100

This commit changes how Electrum's message-signing function is called so that callers must explicitly name each argument (address, message, password) rather than passing them by position. The main practical effect is to prevent accidental mix-ups of argument order, which could lead to signing the wrong message or using the wrong credentials. There is no direct evidence in the commit that this fixes an active security bug or reported vulnerability.

AI review queuedwallet: sign_message: consolidate checks from UIsby SomberNight · 48893760 · Aug 3, 2026 · 6 filesMessage 45 · ThinLow 39Details
Commit message · SomberNight

wallet: sign_message: consolidate checks from UIs

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 39/100

This commit moves input-validation checks for signing, verifying, encrypting, and decrypting messages out of the user-interface code and into the shared wallet logic. It also adds type checks so that non-text inputs are rejected earlier. The change is a defensive hardening/refactoring patch: it reduces the chance that different Electrum interfaces (command line, desktop Qt, mobile QML) handle errors inconsistently or skip checks, and it makes the code easier to maintain safely. There is no direct evidence in the commit of an active vulnerability being fixed, but consolidating security checks is a security-relevant improvement.

AI review queuedwallet: decrypt_message: consolidate checks from UIsby SomberNight · 9a0cc0d6 · Aug 3, 2026 · 3 filesMessage 50 · ThinLow 27Details
Commit message · SomberNight

wallet: decrypt_message: consolidate checks from UIs

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
AI analysis · Low 27/100

This commit moves input-validation and wallet-type checks for message decryption out of the user-interface and command-line layers and into the core wallet code. It also removes a faster, separate decryption path for imported wallets so all wallet types now go through the same central check. The change is a defensive consolidation: it makes it harder for future user interfaces or scripts to accidentally skip the watching-only, multisig, type, and hex-pubkey checks. There is no direct evidence in the diff of an exploitable bug being fixed, but the consolidation reduces the chance that a missing check in one UI could lead to a confusing error or unexpected behavior.

AI review queuedwallet: refactor: add encrypt_message method, consolidated from UIsby SomberNight · 5e9c8df0 · Aug 3, 2026 · 3 filesMessage 50 · ThinInformational 15Details
Commit message · SomberNight

wallet: refactor: add encrypt_message method, consolidated from UIs

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
AI analysis · Informational 15/100

This commit is a simple code cleanup: it moves the message-encryption logic from two separate places (the command-line tool and the Qt graphical interface) into a single shared method on the wallet class. The actual encryption behavior is unchanged, and no security vulnerability is introduced or fixed.

AI review queuedwallet: refactor: add verify_message method, consolidated from UIsby SomberNight · ff5bbb04 · Aug 3, 2026 · 4 filesMessage 50 · ThinInformational 13Details
Commit message · SomberNight

wallet: refactor: add verify_message method, consolidated from UIs

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
AI analysis · Informational 13/100

This commit is a routine code cleanup: it moves message-signature verification out of three user-interface files into a single shared helper method in the wallet module. There is no security-relevant behavior change visible in the diff. The new helper behaves the same as the old inline code, and the remaining edits only tighten some unrelated error messages.

AI review queuedlnwallet: don't blacklist htlc failures without channel updateby f321x · a865e336 · Jul 30, 2026 · 2 filesMessage 93 · StrongModerate 52Details
Commit message · f321x

lnwallet: don't blacklist htlc failures without channel update

The lightning spec changed so that htlc failures don't have to include
a channel_update message anymore (https://github.com/lightning/bolts/pull/1173).
We shouldn't blacklist a channel for not including a channel_update
if the error code signals a liquidity issue (TEMPORARY_CHANNEL_FAILURE), instead
it is sufficient to just record the liquidity hint and try with a smaller
part.

93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Moderate 52/100

This change fixes how Electrum's Lightning wallet reacts when a payment route fails but the failing node no longer provides a channel update message, as now allowed by the Lightning protocol spec. Previously, Electrum would permanently blacklist the channel, which could make payments fail unnecessarily and degrade routing reliability. Now it records a liquidity hint and retries with a smaller amount instead, but only for liquidity-related failures. For other failure types without an update, it still blacklists the channel.

AI review queuedhww/qt: followup 898a4c270by f321x · f3af41de · Jul 30, 2026 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · f321x

hww/qt: followup 898a4c270

Also make the other attribute private

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit simply renames an internal variable from `dialog_label` to `_dialog_label` to mark it as private. It is a minor code cleanup with no visible behavior change and no security relevance.

AI review queuedtest_lnwallet: add unittest for unchanged channel update from failed htlcby f321x · 1f5b9adb · Jul 30, 2026 · 1 fileMessage 83 · StrongInformational 12Details
Commit message · f321x

test_lnwallet: add unittest for unchanged channel update from failed htlc

Tests that a TEMPORARY_CHANNEL_FAILURE whose channel update leaves the
policy unchanged does not blacklist the channel (the liquidity hint is
sufficient), while other failure codes still blacklist.

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
AI analysis · Informational 12/100

This commit only adds a new unit test to Electrum's Lightning wallet test suite. It checks that when a payment fails due to a temporary lack of liquidity (TEMPORARY_CHANNEL_FAILURE) and the accompanying channel policy update is identical to what the wallet already knows, the channel is not blacklisted. Instead, only a 'liquidity hint' is recorded so smaller retry amounts can still use the channel. For other failure types, even an unchanged update still causes blacklisting. There is no production code change here.

AI review queuedtest_lnwallet: add unittest for single channel mpp split configby f321x · 14f7fa0b · Jul 28, 2026 · 1 fileMessage 83 · StrongInformational 15Details
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
AI analysis · Informational 15/100

This commit adds a new automated test to the Electrum project. It does not change any production wallet or Lightning code. The test verifies that when Electrum splits a multi-part payment across a single channel, all payment parts actually use that chosen channel rather than letting the pathfinder pick a different cheaper route. It is purely a test-case addition.

AI review queuedjson_db: set_modified after incomplete databy f321x · f75f1958 · Jul 21, 2026 · 2 filesMessage 80 · StrongLow 47Details
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
AI analysis · Low 47/100

This commit fixes a bug in Electrum's wallet storage recovery. If a wallet file was partially corrupted (a 'patch' was cut off mid-write), the app could recover the old data but then fail to mark the wallet as changed. As a result, later updates might be appended to the still-corrupted file instead of replacing it, and those updates could be lost the next time the wallet was opened. The fix marks the wallet as modified after recovery so it gets rewritten cleanly. This is a data-loss bug, not a remote attack.

AI review queuedwallet_db: register onion_keys converterby f321x · 5b2eb060 · Jul 21, 2026 · 2 filesMessage 58 · ThinLow 44Details
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
AI analysis · Low 44/100

This commit fixes a bug in Electrum's Lightning wallet database handling. After a wallet restart, a specific type of encryption key used in Lightning payments was being loaded as a text string instead of raw bytes. This mismatch could cause payment error decoding to fail or behave incorrectly, potentially leading to misleading error reports or degraded handling of failed Lightning transactions. The patch registers a proper converter so the keys are loaded as bytes, and adds a warning log when decoding fails.

AI review queuedqml: emit a single dataChanged when updating blockchain heightby f321x · fbe9e2d8 · Jul 13, 2026 · 1 fileMessage 73 · AdequateInformational 18Details
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 analysis · Informational 18/100

This change is a performance cleanup in Electrum's mobile/QML user interface. When the wallet learns that the Bitcoin blockchain has grown taller, it now refreshes the transaction list with a single 'everything changed' signal instead of sending one signal per transaction. That reduces UI lag and log noise, but it does not fix a security vulnerability.

AI review queuedqml: don't compute notification balance delta for large tx batchesby f321x · 7b4759c5 · Jul 13, 2026 · 1 fileMessage 85 · StrongInformational 20Details
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 analysis · Informational 20/100

This commit is a performance fix, not a security patch. It stops the Electrum mobile/QML wallet from calculating the total balance change when more than 20 new transactions arrive at once, because that calculation could freeze the user interface for several seconds. The change simply shows a generic message like '25 new transactions' instead of a detailed balance delta.

AI review queuedqml: change event callback logs to debugby f321x · a6cc4e08 · Jul 13, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
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 analysis · Informational 15/100

This commit simply changes two logging messages from 'info' level to 'debug' level in the mobile/QML wallet interface. It reduces routine log output when many transactions occur. There is no security-relevant change.

AI review queuedqml: don't force-build address model from tx event handlersby f321x · 35fc4a13 · Jul 13, 2026 · 1 fileMessage 73 · AdequateInformational 18Details
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 analysis · Informational 18/100

This is a performance and responsiveness fix for the Electrum mobile/QML wallet. It stops the app from doing heavy work (building the address coin list) every time a new transaction arrives, which was causing the user interface to freeze. Instead, the list is only built when the user actually opens it. There is no security vulnerability being fixed here.

AI review queuedqml: skip per-tx balance updates during syncby f321x · 54cccd4f · Jul 13, 2026 · 1 fileMessage 68 · AdequateInformational 18Details
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 analysis · Informational 18/100

This commit is a performance optimization for Electrum's mobile/QML user interface. It prevents the wallet balance from being recalculated and redrawn on every incoming transaction during synchronization, because the balance isn't shown during sync anyway. It is not a security fix and does not change how transactions are validated or stored.

AI review queuedqml: QETransactionListModel: add txid->row indexby f321x · 997e8a2d · Jul 13, 2026 · 1 fileMessage 68 · AdequateInformational 13Details
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
AI analysis · Informational 13/100

This commit is a performance improvement for the Electrum mobile/QML wallet. It replaces repeated scanning of the transaction history list with a simple dictionary lookup (txid -> row index). There is no security-relevant change visible in the diff.

AI review queuedqml: android on-screen keyboard submit trigger acceptedby Sander van Grieken · 5fe0a292 · Jul 9, 2026 · 1 fileMessage 50 · ThinInformational 18Details
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
AI analysis · Informational 18/100

This commit tweaks the Android on-screen keyboard behavior in Electrum's QML wallet search screen. It sets the Enter key to 'Done' and hides the 'Create Wallet' button while the user is typing a search. There is no clear security problem here; it appears to be a minor user-interface fix to prevent accidental wallet creation while searching.

AI review queuedqml: add wallets search option, allow loading hidden wallet iff search string matches exact wallet nameby Sander van Grieken · 836ef252 · Jul 7, 2026 · 2 filesMessage 65 · AdequateLow 29Details
Commit message · Sander van Grieken

qml: add wallets search option, allow loading hidden wallet iff search string
matches exact wallet name

65/100 · AdequateMessage clarity
✓ Specific, 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 analysis · Low 29/100

This commit adds a search box to Electrum's mobile-style QML wallet list. It also changes how 'hidden' wallets (those whose filenames begin with a dot) are handled: previously they were blocked entirely, now they are allowed but kept out of the normal list. A user can load a hidden wallet only by typing its exact name into the search box. The change appears to be a deliberate feature, not a fix for an active security bug, but it slightly widens what wallet files the GUI will load.

AI review queuedhw_wallet: fix crash on exit if device unpairing failsby Sasha Zykov · b0ae14a5 · Jul 3, 2026 · 2 filesMessage 73 · AdequateLow 29Details
Commit message · Sasha Zykov

hw_wallet: fix crash on exit if device unpairing fails

On wallet close, the close_wallet hook unpaired the device before
stopping the keystore TaskThread. Unpairing does device I/O and can
raise, e.g. if the device was unplugged while the wallet was open:

Plugin error. plugin: trezor, hook: close_wallet
Traceback (most recent call last):
File "electrum/plugin.py", line 833, in run_hook
r = f(*args)
File "electrum/hw_wallet/plugin.py", line 89, in close_wallet
self.device_manager().unpair_pairing_code(keystore.pairing_code())
File "electrum/plugin.py", line 1118, in unpair_pairing_code
self._close_client(_id)
File "electrum/plugin.py", line 1134, in _close_client
client.close()
...
File "electrum/plugins/trezor/clientbase.py", line 286, in close
self.client.lock()
...
trezorlib.transport.bridge.BridgeException: trezord: acquire/62/null failed with code 400: device not found

run_hook() swallows the exception, so the thread was never stopped.
A still-running QThread (child of the wallet window) at interpreter
shutdown then makes Qt abort the process:

QThread: Destroyed while thread '' is still running

Stop the thread before unpairing, and make DeviceMgr._close_client
treat client.close() as best-effort, as closing a missing device is
a normal condition during cleanup.

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: broader security terminologysecond-pass: security-sensitive path
AI analysis · Low 29/100

This commit fixes a crash that could happen when closing an Electrum wallet that uses a hardware device (like a Trezor). If the device was unplugged before closing, the wallet's cleanup step could fail and leave a background Qt thread running. At shutdown, Qt would then forcefully abort the whole program. The fix stops the thread first and treats device-close failures as harmless during cleanup.