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 4 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 queuedupdate localeby ThomasV · c7ec118b · Jul 2, 2026 · 1 fileMessage 18 · OpaqueInformational 15Details
Commit message · ThomasV

update locale

18/100 · OpaqueMessage clarity
✓ Subject identifies a change! Too few words to establish purpose! No meaningful explanatory body
Why it was queued
translation-only discountsecond-pass: opaque commit message
AI analysis · Informational 15/100

This commit is a routine update to Electrum's language translation files (locale). It changes one line in one translation file. There is no indication of any security relevance.

AI review queuedupdate block header checkpointsby SomberNight · 9ebabef3 · Jul 1, 2026 · 4 filesMessage 58 · ThinInformational 15Details
Commit message · SomberNight

update block header checkpoints

```
>>> network.export_checkpoints(f"/home/user/wspace/electrum/electrum/chains/{electrum.constants.net.NET_NAME}/checkpoints.json")
```

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit simply adds newer Bitcoin block checkpoints to Electrum's built-in chain data files. Checkpoints are pre-recorded block hashes that help the wallet verify it is following the correct blockchain. There is no code change and no indication of a security vulnerability.

AI review queuedqt: fix crash through stale pi resolveby f321x · 299be410 · Jul 1, 2026 · 1 fileMessage 76 · AdequateInformational 24Details
Commit message · f321x

qt: fix crash through stale pi resolve

When multiple PIs get resolved consecutively through
repeated editing of the PI field, and the `on_resolve_done`
callback tries to access a PI that has been cleared by
a previous, failed callback an exception is raised.

I was able to reproduce this somehow by adding a sleep to
`PaymentIdentifier._do_resolve()` and entering lightning addresses.

Fixes https://github.com/spesmilo/electrum/issues/10724

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 24/100

This commit fixes a bug in Electrum's Qt send tab where the app could crash if a user edited the payment recipient field quickly while previous lookups were still finishing. The fix ignores results from outdated lookups instead of letting them trigger an error.

AI review queued(trivial) wallet: fix stale comment on on_event_invoice_statusby Sasha Zykov · 95317f4b · Jun 30, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Sasha Zykov

(trivial) wallet: fix stale comment on on_event_invoice_status

The followup rename (_paid_invoice_keys -> _paid_invoice_keys_cache) and
the de-sloppify left this comment referring to the old name and claiming
the listener only tracks LN-driven changes; it is now the population path
for onchain invoices too.

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 15/100

This commit only updates a stale code comment to match a recent variable rename and to correctly describe what the function now does. No actual code behavior was changed, so there is no security impact.

AI review queuedwallet: de-sloppify d2d4251c8 (paid invoice cache)by SomberNight · 63ee2f3a · Jun 30, 2026 · 2 filesMessage 50 · ThinLow 35Details
Commit message · SomberNight

wallet: de-sloppify d2d4251c8 (paid invoice cache)

arghhhhhh

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 35/100

This commit is a cleanup of a previous change that added a cache for paid invoices. The developer admits the earlier code was sloppy ('arghhhhhh'). The patch removes redundant logic that tried to update the paid-invoice cache in multiple places and instead lets a single method, get_invoice_status, decide whether an invoice is paid. The risk is that if the cache is not updated correctly, Electrum might wrongly report an invoice as paid or unpaid, which could mislead users or merchants about whether money was actually received. There is no direct evidence this is exploitable by an attacker, but it is a correctness fix in payment handling.

AI review queuedwallet: followup d2d4251c8 (paid invoice cache)by f321x · 4f897200 · Jun 29, 2026 · 2 filesMessage 68 · AdequateInformational 13Details
Commit message · f321x

wallet: followup d2d4251c8 (paid invoice cache)

Followup to d2d4251c8 (paid invoice caching) in wallet.py.
* rename cache attribute to indicate it is a in-memory cache
* some minor reordering/simplifications
* also update on adb_removed_tx

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 is a small internal cleanup commit for the Electrum Bitcoin wallet. It renames an in-memory cache used to remember which outgoing invoices have been paid, moves where the cache is initialized, simplifies some related logic, and makes sure the cache is also updated when a transaction is removed. There is no indication this fixes a security vulnerability or introduces a new security risk.

AI review queuedadd_tx_fee_from_server: check fee_sat typeby ThomasV · 671c08b6 · Jun 23, 2026 · 1 fileMessage 35 · OpaqueLow 32Details
Commit message · ThomasV

add_tx_fee_from_server: check fee_sat type

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 32/100

This commit adds a type check to ensure a transaction fee value coming from an external server is either a valid whole number or absent. Without the check, an unexpected type (such as a string or special object) could later cause errors or unusual behavior inside the wallet when it stores or compares fee data. The change is defensive and narrows the range of bad inputs the wallet will accept.

AI review queuedqml: QEWallet lifecycle fix, remove QEWallet from QEWallet.__instances on destruction.by Sander van Grieken · 34f83a07 · Jun 11, 2026 · 1 fileMessage 65 · AdequateInformational 21Details
Commit message · Sander van Grieken

qml: QEWallet lifecycle fix, remove QEWallet from QEWallet.__instances on destruction.

This never surfaced, as the mobile GUI currently has no option to unload/close a wallet.

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 · Informational 21/100

This commit fixes a bookkeeping bug in Electrum's mobile/QML wallet interface. When a wallet object is destroyed, it was not being removed from an internal list that tracks all active wallet objects. The commit adds that cleanup step. The commit message says this bug never caused visible problems because the mobile app currently has no way to unload or close a wallet, so the fix is preventive.

AI review queuedconstants: add basic sanity check for servers.jsonby Sander van Grieken · ab6308d6 · Jun 10, 2026 · 1 fileMessage 73 · AdequateInformational 23Details
Commit message · Sander van Grieken

constants: add basic sanity check for servers.json

Some users will fiddle with this file and if we don't sanity check the
error will pop out elsewhere and end up as a not immediately obvious
crash report on github

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 23/100

This commit adds a basic sanity check to Electrum's code that reads the built-in list of default servers (servers.json). Previously, if a user edited that JSON file incorrectly, the bad data would travel deeper into the program and cause a confusing crash later. Now the code checks early that each server entry is a dictionary and that all values inside it are strings, failing fast with a clearer error message. It is a hardening/quality improvement, not a fix for an externally exploitable vulnerability.

AI review queuedtest_lnmsg: add bolt 12 merkle tree test vectorby f321x · 5426f0a1 · Jun 9, 2026 · 2 filesMessage 55 · ThinInformational 15Details
Commit message · f321x

test_lnmsg: add bolt 12 merkle tree test vector

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
fuzzing or regression evidencesigning or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds a new test file and a unit test for BOLT 12 merkle root calculation. It does not change any production code, so it cannot introduce a security vulnerability or fix one. It is purely a test-suite addition.

AI review queuedwallet: cache paid-invoice keys to avoid prevout rescanby Sasha Zykov · d2d4251c · Jun 6, 2026 · 2 filesMessage 85 · StrongInformational 19Details
Commit message · Sasha Zykov

wallet: cache paid-invoice keys to avoid prevout rescan

On wallets with many outgoing invoices that share output scriptpubkeys,
broadcasting a new transaction froze the GUI for several seconds — up
to a minute on bigger wallets. The hot loops in set_broadcasting() and
_update_onchain_invoice_paid_detection() iterate every invoice touched
by the new tx's outputs, which is large when scriptpubkeys are shared
via _invoices_from_scriptpubkey_map. For each touched invoice they call
_is_onchain_invoice_paid(), which scans all of the invoice's output
scripthashes against _prevouts_by_scripthash and does a get_tx_height
per prevout. Both inner dimensions blow up together when invoices share
inputs/outputs across many past payments.

Add _paid_invoice_keys: Set[str], an in-memory cache of outgoing
invoice ids known to be PR_PAID, maintained incrementally:

- populated at wallet load by _prepare_onchain_invoice_paid_detection
- updated in _update_onchain_invoice_paid_detection (discard then
recompute, so reorgs still demote PAID->UNPAID)
- updated in save_invoice, delete_invoice, clear_invoices
- new on_event_invoice_status listener keeps it in sync with
LN-driven transitions from LNWallet.set_invoice_status

get_invoice_status() short-circuits to PR_PAID on cache hit, skipping
the prevout scan. set_broadcasting() skips already-paid invoices
entirely — broadcasting_status has no effect on a paid invoice and the
callback churn is what made the GUI freeze.

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 19/100

This commit is a performance optimization, not a security fix. It adds an in-memory cache of which outgoing invoices are already paid, so Electrum can skip expensive re-scanning of previous transaction outputs when many invoices share the same Bitcoin address. The goal is to stop the user interface from freezing for seconds or minutes when broadcasting a transaction. There is no indication this change fixes a vulnerability or changes security-critical behavior beyond making status lookups faster.

AI review queued(trivial) move StorageEncryptionVersion and StorageReadWriteError to stored_dict.pyby ThomasV · 1f4c0fc7 · Jun 6, 2026 · 4 filesMessage 50 · ThinInformational 15Details
Commit message · ThomasV

(trivial) move StorageEncryptionVersion and StorageReadWriteError to stored_dict.py

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 two definitions (a storage encryption version enum and a read/write error exception) from one file to another and updates the import statements in the files that use them. There is no functional change, no bug fix, and no security relevance.

AI review queuedstorage: add get_path methodby ThomasV · 6797e917 · Jun 6, 2026 · 7 filesMessage 35 · OpaqueInformational 15Details
Commit message · ThomasV

storage: add get_path method

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 is a simple internal code cleanup. It adds a new helper method called get_path() to the wallet storage class and updates various parts of the program to use that method instead of reading the storage path directly. There is no security fix or vulnerability here.

AI review queuedlnchan: if funding tx is coinbase tx, wait for maturityby SomberNight · 08f39f89 · Jun 5, 2026 · 2 filesMessage 73 · AdequateLow 42Details
Commit message · SomberNight

lnchan: if funding tx is coinbase tx, wait for maturity

ref https://github.com/lightning/bolts/commit/17ab3f0dfef50ab98c326a56cb4d109e6f733ab8

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 pathsecond-pass: security-sensitive path
AI analysis · Low 42/100

This commit adds a check so that if a Lightning channel is funded by a coinbase transaction (newly created bitcoins from mining), Electrum waits for the standard 100-block maturity period before treating the funding as settled. Before this change, Electrum might have accepted an immature coinbase funding transaction too early, which could lead to an invalid channel state or forced channel closure if the coinbase output later becomes invalid or reorganized. The fix follows a recent update to the Lightning protocol specification.

AI review queuedModify the 'stored_at' syntax, so that it includes the full pathby ThomasV · 5494e827 · Jun 5, 2026 · 5 filesMessage 85 · StrongLow 27Details
Commit message · ThomasV

Modify the 'stored_at' syntax, so that it includes the full path

This may prevent collisions. More importantly, it also makes
it possible to cache the subdict of 'registered_names' that
is relevant to a given StoredDict, so that we do not need to
walk the path on every conversion. (performance optimization,
not part of this commit)

This is a backport from the levelDB branch

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

This commit changes how Electrum tracks where certain data objects live in the wallet database. It switches from short names like 'invoices/*' to full paths like '/invoices/*', and updates the internal registry to handle these full paths. The stated goal is to prevent naming collisions and to enable future performance improvements. There is no direct evidence in the commit that this fixes an active security vulnerability, but path-collision bugs in serialization code can sometimes lead to wrong data being read or written, which could have security implications.

AI review queuedsimplify prevby SomberNight · 6a89dd30 · Jun 3, 2026 · 1 fileMessage 18 · OpaqueInformational 11Details
Commit message · SomberNight

simplify prev

18/100 · OpaqueMessage clarity
✓ Subject identifies a change! Too few words to establish purpose! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 11/100

This is a small code cleanup in Electrum's transaction handling. It simplifies how raw transaction bytes are converted to hex strings. There is no obvious security bug being fixed here; it appears to be a follow-up simplification to a previous change.

AI review queuedtx_from_any: make sanitization optionalby ThomasV · 271f079d · Jun 3, 2026 · 3 filesMessage 58 · ThinInformational 17Details
Commit message · ThomasV

tx_from_any: make sanitization optional

re.sub is expensive (calls re.sub), it is not necessary
to call it when instantiating transactions from the wallet file.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
defensive validationsigning or wallet pathsecond-pass: near security thresholdsecond-pass: security-sensitive path
AI analysis · Informational 17/100

This change is a performance optimization, not a security fix. It makes whitespace removal from transaction data optional, skipping it when loading transactions from the wallet's own stored files. The default behavior for user-provided input still removes whitespace. There is no direct security issue in the patch itself, though any future code that calls tx_from_any with untrusted input must remember to leave sanitization enabled.

AI review queuedunit tests: do not mock save_dbby ThomasV · f2ece0f4 · May 21, 2026 · 2 filesMessage 78 · AdequateInformational 15Details
Commit message · ThomasV

unit tests: do not mock save_db

Create in-memory wallets instead.

The logic of calling save_db() at specific places is specific to
the current JsonDB backend, and it does not generalize well.

78/100 · AdequateMessage clarity
✓ 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 only changes unit tests. It removes the practice of mocking (faking) the wallet save function and instead creates in-memory wallets that don't touch disk. There is no change to the actual Electrum wallet application or its security behavior.

AI review queuedtests: move create_test_channels to lnhelpers.pyby SomberNight · cf91aa86 · May 20, 2026 · 4 filesMessage 55 · ThinInformational 15Details
Commit message · SomberNight

tests: move create_test_channels to lnhelpers.py

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! 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 in the project's test suite. It moves a helper function used to create fake Lightning payment channels from one test file into a shared test-utility file, and updates other test files to import it from the new location. No production wallet code is changed, and there is no security fix or vulnerability introduced.

AI review queuedtest_lnwallet: unittest channel rebalancingby f321x · b183a529 · May 20, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · f321x

test_lnwallet: unittest channel rebalancing

Add some unittest coverage for the channel rebalance flow.

Co-authored-by: SomberNight <somber.night@protonmail.com>

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds new automated tests for an existing Lightning channel rebalancing feature in Electrum. It does not change any production wallet or network code, so it cannot introduce a security vulnerability or directly fix one.

AI review queuedlnwatcher: introduce loop to trigger callbacksby f321x · 2460b030 · May 20, 2026 · 3 filesMessage 68 · AdequateInformational 24Details
Commit message · f321x

lnwatcher: introduce loop to trigger callbacks

Introduce a taskgroup and polling loop to LNWatcher to guarantee
the callbacks get called at least once every
LNWatcher.MAX_CALLBACK_TRIGGER_DELAY_SEC (10 min).
This should prevent callbacks that operate on time instead of
blockheight from becoming (very) stale if there are no blockchain
events triggering the callbacks for a longer time.
Not entirely set about the 10 min delay, might as well be 5/2/1 min?

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 24/100

This commit adds a background polling loop to Electrum's Lightning watcher so that time-sensitive callbacks still run even when no new blockchain events occur for a while. It is a defensive reliability fix, not an obvious security patch, but stale watcher callbacks could in theory delay detection of channel problems. The change itself does not introduce a known vulnerability.

AI review queuednew 'stored_at' syntaxby ThomasV · 5f6a491f · May 14, 2026 · 7 filesMessage 28 · OpaqueInformational 12Details
Commit message · ThomasV

new 'stored_at' syntax

backported from levelDB branch

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 12/100

This commit is a pure internal refactoring of how Electrum marks which Python classes correspond to which parts of the wallet database. It replaces two old decorators (`stored_in` and `stored_as`) with a single new decorator (`stored_at`) and updates the registration tables that convert database keys and values. There is no user-facing change, no new feature, and no obvious security fix or vulnerability introduced in the diff itself.

AI review queuedbuild: support blacklisting dependencies for deterministic buildsby matejcik · 74615623 · May 11, 2026 · 4 filesMessage 85 · StrongInformational 14Details
Commit message · matejcik

build: support blacklisting dependencies for deterministic builds

The method works as follows:
1. for every blacklisted dependency, as listed in ghost.txt,
create and install an empty ghost package which will satisfy
the dependency resolver
2. before hash resolution step, remove those ghosts to make hashin happy

This required converting find_restricted_dependencies to use locally
installed package metadata instead of looking it up online on pypi. But
that seems to be a good idea anyway.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 14/100

This commit changes Electrum's internal build tooling. It introduces 'ghost packages'—empty placeholder packages used only during the build process to satisfy dependency resolvers—so that certain unwanted dependencies can be excluded from final deterministic builds. The change also makes a helper script read package metadata from the local build environment instead of downloading it from PyPI. There is no direct evidence in the commit that this fixes an active security vulnerability; it appears to be a build-hygiene improvement.

AI review queuedMove StoredDict class into new 'stored_dict' moduleby ThomasV · d0860ed7 · May 11, 2026 · 7 filesMessage 65 · AdequateInformational 15Details
Commit message · ThomasV

Move StoredDict class into new 'stored_dict' module

This commit is only moving code, no functional change

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

This commit simply moves the StoredDict, StoredObject, StoredList, and related helper code from one file (json_db.py) into a brand-new file (stored_dict.py). It then updates other files to import from the new location. The commit message and the diff itself show no changes to how the code works—only where it lives. There is no security fix or vulnerability introduced here.

AI review queuedwallet: encrypt the keystore before adding it to dbby ThomasV · b15be1fa · May 7, 2026 · 2 filesMessage 73 · AdequateHigh 71Details
Commit message · ThomasV

wallet: encrypt the keystore before adding it to db

adding keystore to db may result in a disk write, and we should
never write unencrypted keys to disk (except lightning_xprv)

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 · High 71/100

This commit fixes a bug where Electrum could write unencrypted private keys to disk while creating or restoring a wallet, even when the user asked for password protection. The change rearranges the wallet setup so that the keystore is encrypted before it is placed into the wallet database, and the database storage is encrypted before any writes happen. It also moves the address-import step to happen after the keystore is saved, reducing the chance of plaintext key material touching disk.