EL
← All projectsElectrum

Electrum

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

BitcoinSoftware walletsNormal
Repository coverage

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

92security candidates259second-pass queue1005AI analyses
133commits · 30 days
260commits · 60 days
543commits · 180 days
1003commits · 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
548Adequate · 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
f321x40225386070
Sander van Grieken10910101057
ghost4341516070
Felix25410072
user323062
ekzyis222053
accumulator613071
Roman Zeyde515053
Sasha Zykov515075
Aaron Fiore414068
Analysis record

Published AI watches

Last scanned 7 minutes ago

Low 29 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10982 from spesmilo/wizard_2fa_seed_redirect

This commit changes Electrum's wallet creation wizard so that if a user tries to restore a normal 'standard' wallet but pastes a seed phrase that actually belongs to a two-factor authentication (2FA) wallet, the wizard automatically redire…

UX-level safety fix preventing wallet-type/seed mismatchState mutation: wizard_data['wallet_type'] changed from 'standard' to '2fa' based on seed typeNo cryptographic, network, or privilege changes
310c9dd0by Felix+102−133 files
No security note in commit
Informational 15 AI analysisMessage 70 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

tests: wizard: cover standard -> 2fa redirection

This commit only adds and reorganizes automated test code for Electrum's wallet creation wizard. It does not change any production wallet logic, cryptography, or network handling. The tests verify that when a user tries to restore a 'stand…

70b4d27cby f321x+68−91 file
No security note in commit
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
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 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.

Lower-prioritylnwire: add bolt12 types to onion_wireby Sander van Grieken · 52e681c8 · Jun 9, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Sander van Grieken

lnwire: add bolt12 types to onion_wire

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit adds data definitions for BOLT12 (a newer Lightning Network protocol for offers and invoices) to Electrum's wire format specification file. It is purely a schema addition with no executable code changes, no bug fixes, and no security behavior changes.

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.

Lower-prioritylnmsg: fix parsing of nested complex types where the leaf objectsby Sander van Grieken · 2e89915c · Jun 9, 2026 · 1 fileMessage 65 · AdequateModerate 57Details
Commit message · Sander van Grieken

lnmsg: fix parsing of nested complex types where the leaf objects

were consuming too much from the fd.

Co-Authored-By: f321x <f@f321x.com>

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Moderate 57/100

This commit fixes a bug in Electrum's Lightning Network message parser. When reading nested structured data, the parser could keep consuming more bytes than intended because it didn't stop after reaching the expected number of items. The fix makes it stop at the right count and raises an error if too few items are found. This is a correctness fix that likely prevents malformed or crafted Lightning messages from being misinterpreted.

Lower-prioritylnmsg: validate point primitive fieldby f321x · 9b151a60 · Jun 9, 2026 · 2 filesMessage 78 · AdequateLow 47Details
Commit message · f321x

lnmsg: validate point primitive field

Validate points to be valid ECPubkeys in lnmsg._read_primitive_field.
There are failing bolt12 test vectors that contain offers with invalid
points.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
defensive validationfuzzing or regression evidence
AI analysis · Low 47/100

This commit adds a safety check in Electrum's Lightning message parser to reject invalid cryptographic 'points' (public-key-like values) instead of silently accepting them. Previously, malformed points could pass through parsing and potentially cause problems later. The change is defensive and aligns with official BOLT12 test vectors that expect invalid points to be rejected.

Security candidatelnmsg: add new primitive type `bip340sig`, add tlv merkle root calculation and schnorr-sign over tlvs, implicit en/decode utf8 fields, schnorr signature verification.by Sander van Grieken · 759ef10d · Jun 9, 2026 · 1 fileMessage 88 · StrongLow 25Details
Commit message · Sander van Grieken

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

Co-Authored-By: f321x <f@f321x.com>

88/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarydefensive validation
AI analysis · Low 25/100

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 implicit UTF-8 encoding/decoding for text fields. The changes are a feature addition to support BOLT12-style offers/invoices rather than a fix for a known vulnerability. There is no direct evidence in the commit or supplied references that this patch itself creates or fixes a security bug, but any new cryptographic signing code carries implementation risk.

Lower-prioritycommon_qt: move submarine swap support code from qt gui to common_qt as SubmarineSwapMixinby Sander van Grieken · 7c728344 · Jun 8, 2026 · 3 filesMessage 73 · AdequateInformational 12Details
Commit message · Sander van Grieken

common_qt: move submarine swap support code from qt gui to common_qt as SubmarineSwapMixin

This covers the functionality for swap use during payments (so, change-to-ln and
submarine-payments) present in gui/qt/confirm_tx_dialog, not the 'standalone' swap.

This is in preparation for adding the same functionality to qml.

- move swap support code from TxEditor to SubmarineSwapMixin
- don't require wallet instance at construction, allow late setting of wallet

swaps: add initialize/destroy methods to SwapServerTransport, to simplify consumer side, adds
a done callback so the transport can be used once ready or failure can be handled.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 12/100

This commit is a straightforward internal code refactor. It moves the user-interface code that handles 'submarine swaps' (a way to exchange on-chain Bitcoin for Lightning funds, or vice versa) out of the Qt desktop dialog and into a shared module so it can later be reused by the QML mobile-style interface. It also adds explicit initialize/destroy lifecycle methods to the swap server connection class. There is no indication this change fixes a security bug or introduces a new vulnerability.

Lower-priorityqt: move wait_for_swap_transport to SwapManagerby Sander van Grieken · 1a1516ac · Jun 8, 2026 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · Sander van Grieken

qt: move wait_for_swap_transport to SwapManager

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit simply moves an existing helper function from the Qt user-interface layer into the core swap-management module. The code's behavior is unchanged; it is a routine internal refactoring with no visible security implications.

Lower-priorityswaps: encapsulate swap transport ongoing_connection_attempt future into transportby Sander van Grieken · 1fae2da5 · Jun 8, 2026 · 2 filesMessage 50 · ThinInformational 13Details
Commit message · Sander van Grieken

swaps: encapsulate swap transport ongoing_connection_attempt future into transport

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 13/100

This commit is a small internal code cleanup in Electrum's submarine swap feature. It moves a 'future' object (a handle for an in-progress network connection attempt) from the transaction dialog class into the swap transport class itself. There is no user-facing behavior change and no indication of a security fix.

Lower-priorityqt: refactor message for change-to-lightning swap to backend submarine_swaps.pyby Sander van Grieken · ffec9df1 · Jun 8, 2026 · 2 filesMessage 50 · ThinInformational 13Details
Commit message · Sander van Grieken

qt: refactor message for change-to-lightning swap to backend submarine_swaps.py

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 13/100

This commit is a straightforward code cleanup: it moves the logic that decides what message to show users about 'sending change to Lightning' from the Qt GUI dialog into a shared backend module. The visible behavior is essentially unchanged, and there is no indication of a security fix or vulnerability.

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.

Lower-priorityqt/send_tab: drop redundant invoice_list.update() after broadcastby Sasha Zykov · c8db5c83 · Jun 6, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Sasha Zykov

qt/send_tab: drop redundant invoice_list.update() after broadcast

The full invoice-list rebuild after a successful broadcast is
unnecessary: the set_broadcasting(PR_BROADCAST) call immediately after
fires the invoice_status callback for any touched invoices, and
main_window.on_event_invoice_status updates the affected rows
incrementally via refresh_item / delete_item. Tx ingestion also sets
need_update, which causes update_tabs() to refresh.

On wallets with many invoices this rebuild iterated all unpaid
invoices and called get_invoice_status() per entry on the GUI thread,
contributing to the post-broadcast freeze fixed in the previous commit.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit removes one unnecessary screen refresh in Electrum's Qt send tab after a payment is broadcast. It is a performance cleanup, not a security fix. The removed line caused the entire invoice list to rebuild, which could freeze the user interface on wallets with many invoices. Other existing update paths already refresh the affected rows, so the removed call was redundant.

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.

Lower-prioritylnpeer: add fixme for unsafe zeroconf behaviourby SomberNight · ab7a5656 · Jun 5, 2026 · 1 fileMessage 76 · AdequateLow 41Details
Commit message · SomberNight

lnpeer: add fixme for unsafe zeroconf behaviour

there is a later check in Channel.update_funded_state
added in https://github.com/spesmilo/electrum/pull/9624
but it only validates the funding_tx once it's already 3 blocks deep

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
defensive validation
AI analysis · Low 41/100

A developer left a FIXME note in Electrum's Lightning code warning that a feature called 'zeroconf' channels marks a payment channel as funded before actually checking that the funding transaction exists or contains the required multisig output. The commit does not fix the issue; it only documents the concern. The note explicitly says this is unsafe and must be reworked before mainnet use, suggesting the current code could let a malicious or buggy peer make Electrum believe money was locked in a channel when it really wasn't.

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.

Lower-priorityonion_messages: filter correct feature when creating pathsby f321x · b3af267e · Jun 5, 2026 · 2 filesMessage 73 · AdequateLow 46Details
Commit message · f321x

onion_messages: filter correct feature when creating paths

Filter channels/peers in `get_blinded_paths_to_me` depending on
the context (onion message or blinded payment path). Raise
according exceptions when no channel/peer is available.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 46/100

This commit fixes a bug in Electrum's Lightning code where the program sometimes picked the wrong type of peer when building private 'blinded paths' for messages or payments. Before the fix, a path meant for an onion message could accidentally require a payment-related feature, and a path meant for a payment could accidentally require a message-related feature. The patch makes the feature check match the actual purpose, and raises clear errors when no suitable peer exists instead of silently returning an empty path. It is a correctness fix that reduces the chance of failed or misrouted private routes, but the commit itself does not describe it as a security fix and no exploit is demonstrated.

Lower-priorityonion_message: pathfinding: ignore amount contraintsby f321x · 2ebfb992 · Jun 5, 2026 · 3 filesMessage 73 · AdequateLow 29Details
Commit message · f321x

onion_message: pathfinding: ignore amount contraints

Ignore channel amount constraints when doing pathfinding for an
onion message. Onion messages don't need to move funds so pathfinding
shouldn't penalize channels based on fake payment amounts.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 29/100

This commit fixes a design bug in Electrum's Lightning onion-message routing. Previously, the app used a fake payment amount (10,000 millisatoshis) when finding a route for an onion message, which could cause it to reject valid message paths because real channels have minimum/maximum amount limits. The change lets onion-message pathfinding ignore those amount limits, since no actual money is being moved. It is a correctness/availability fix for a messaging feature, not a fix for theft of funds or remote code execution.

Lower-priorityonion_message: use trampoline nodes for onion messagesby f321x · 56565198 · Jun 5, 2026 · 1 fileMessage 50 · ThinLow 25Details
Commit message · f321x

onion_message: use trampoline nodes for onion messages

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Low 25/100

This commit changes how Electrum routes private 'onion messages' through the Lightning Network. For users on 'trampoline' payment setups, it now sends messages via a randomly chosen trampoline peer and trusts that peer to forward the message to the final recipient. The change removes some safety checks that previously required an active channel or a known network path, and it uses Python's standard random module to pick the trampoline peer. This could make message delivery less reliable or more predictable, and it shifts trust onto trampoline nodes, but it does not appear to be a direct theft or remote-code-execution vulnerability.

Lower-priorityonion_message: handle missing remote updateby f321x · 1fe9c53e · Jun 5, 2026 · 1 fileMessage 60 · AdequateLow 35Details
Commit message · f321x

onion_message: handle missing remote update

Handle missing remote channel_update when creating payinfo
for blinded path by skipping the affected channel.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Low 35/100

This change makes Electrum's Lightning onion-message code more resilient: when the wallet wants to publish a blinded payment path through one of its channels but lacks the remote peer's latest channel policy, it now skips that channel instead of crashing. The most likely user-visible effect before the fix was an unhandled exception that could prevent creating or advertising blinded paths, possibly breaking offers/receive functionality. There is no direct evidence in the commit that this was exploitable by an attacker to steal funds.

Lower-priorityonion_message: add invoice buffer to payinfo cltv deltaby f321x · 5e54c41b · Jun 5, 2026 · 2 filesMessage 85 · StrongLow 44Details
Commit message · f321x

onion_message: add invoice buffer to payinfo cltv delta

Add the 3 block invoice cltv delta buffer to the blinded payinfo's
cltv_expiry_delta to prevent issues where the sender sets the expiry
to exactly local_height + cltv_expiry_delta and blocks get mined
during forwarding.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Low 44/100

This commit fixes a small timing buffer in Electrum's Lightning blinded-path payments. When Electrum advertised a hidden payment route, it told senders exactly how many extra blocks to reserve for safety. The problem is that new blocks can be mined while a payment is still traveling through the network. If the advertised safety margin was too tight, a payment could arrive with an expiry that is technically too close to the current block height, causing the payment to be rejected or stuck. The fix adds a 3-block buffer to the advertised safety margin so that normal mining delays don't cause failures.

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.

Lower-priorityonion_message: factor out payinfo creation from get_blinded_paths_to_meby f321x · b0393baf · Jun 5, 2026 · 1 fileMessage 65 · AdequateInformational 13Details
Commit message · f321x

onion_message: factor out payinfo creation from get_blinded_paths_to_me

Separates the payinfo creation from get_blinded_paths_to_me into a separate
function.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 13/100

This commit is a simple code cleanup: it moves a block of code that builds payment information for blinded payment paths into its own helper function. There is no change in behavior visible to users or attackers. It is a refactoring, not a security fix.

Lower-priorityplugin: nwc: regularly re-broadcast info eventby f321x · 60e38814 · Jun 5, 2026 · 1 fileMessage 68 · AdequateInformational 21Details
Commit message · f321x

plugin: nwc: regularly re-broadcast info event

I noticed with my long running NWC deamon that after a
couple days some clients relying on the info event being
available stopped working. Alby e.g. shows
"Error: no info event (kind 13194) returned from relay".
After restarting the daemon it works again for some days.
It seems that relays drop the info events after some days,
even though they are not ephemeral and don't have an expiry tag.
So rebroadcasting them once a day should make the server more
reliable.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 21/100

This change makes an Electrum NWC (Nostr Wallet Connect) server re-announce its capabilities to Nostr relays once per day. Previously it only announced once at startup, and some relays were dropping these announcements after a few days, causing wallets like Alby to stop working until the server was restarted. There is no security vulnerability here; it is a reliability fix for a wallet-connect plugin.

Lower-priorityplugin: nwc: give NWCServer its own taskgroupby f321x · 9b425692 · Jun 5, 2026 · 1 fileMessage 68 · AdequateLow 35Details
Commit message · f321x

plugin: nwc: give NWCServer its own taskgroup

It seemed weird to pass the taskgroup of the plugin into
the NWCServer, this looks a bit cleaner. It also allows
to get multiple tasks of the NWCServer cancelled by cancelling
the NWCServers taskgroup.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 35/100

This commit rewrites how background tasks are managed inside Electrum's Nostr Wallet Connect (NWC) plugin. Previously, the plugin and the NWC server shared one task group, which could accidentally cancel an in-flight Lightning payment when the server restarted its event handler. The change gives the NWC server its own temporary task group and shields active payment tasks from cancellation. It is best read as a reliability/robustness improvement that likely closes a small window where a payment could be interrupted, not as a fix for a clear-cut remote exploit.