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
131commits · 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 45 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.

Security candidatetests: regtest: make test_just_in_time less flakyby f321x · 12547f94 · May 13, 2026 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · f321x

tests: regtest: make test_just_in_time less flaky

The regtest just_in_time is flaky on the CI because it tries to open
two channels right after each other (mining 3 blocks in between).
If the channel opener (LSP/Bob) hasn't caught up yet and is still
on the same height as the previous channel open it will refuse to open
another channel due to the anchor channel key derivation limitation.

This adds a helper to pause the test until bob has caught up to the newly
mined 3 blocks before attempting the second open.

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
secret or key material
AI analysis · Informational 15/100

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

Lower-priorityLNWallet: make get_invoice_features base feature independentby f321x · 16f73521 · May 12, 2026 · 1 fileMessage 73 · AdequateInformational 12Details
Commit message · f321x

LNWallet: make get_invoice_features base feature independent

Makes the LNWallet._get_invoice_features method modify any
given base features instead of constructing the base
features internally. This way it can be used independently
of bolt11/12.

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 small internal code cleanup in Electrum's Lightning wallet. It renames a method and changes it to accept feature flags as an input rather than generating them itself. The actual logic for deciding which feature flags are included in an invoice remains unchanged. There is no indication this fixes a security bug or introduces a vulnerability.

Lower-prioritylnutil: update LN_FEATURES_IMPLEMENTEDby f321x · b2e519fe · May 12, 2026 · 2 filesMessage 50 · ThinInformational 18Details
Commit message · f321x

lnutil: update LN_FEATURES_IMPLEMENTED

Add missing LNWALLET_FEATUERS features to LN_FEATURES_IMPLEMENTED.

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
AI analysis · Informational 18/100

This is a small bookkeeping update in Electrum's Lightning Network code. It adds two already-supported Lightning features to a master list of 'implemented features' and adds a comment reminding future developers to keep that list in sync. There is no direct security fix, but keeping the feature lists consistent helps prevent future protocol confusion or misadvertised capabilities.

Lower-prioritylnutil: add to_tlv_bytes() to LnFeaturesby Sander van Grieken · a7d552ad · May 12, 2026 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · Sander van Grieken

lnutil: add to_tlv_bytes() to LnFeatures

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

This commit adds a small helper method that converts Lightning Network feature flags into a compact byte format used in modern Lightning protocol messages. It is a routine, additive code change with no security relevance visible in the commit or supplied references.

Lower-prioritylnutil: make dependencies context dependentby f321x · 9150de11 · May 12, 2026 · 5 filesMessage 68 · AdequateLow 29Details
Commit message · f321x

lnutil: make dependencies context dependent

Make transitive dependencies of lightning features context dependent.
This allows to validate different transitive dependencies for the same
feature in different contexts.
For example BASIC_MPP_* depends on payment_secret for bolt 11 invoices,
but has no dependencies when being used in the context of bolt 12 invoices.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
defensive validation
AI analysis · Low 29/100

This commit refines how Electrum checks Lightning network feature flags so that the rules for what one feature requires can differ depending on where it appears (e.g., an old BOLT11 invoice versus a newer BOLT12 invoice). The main user-visible change is that BOLT12 invoices can advertise multi-part payment support (BASIC_MPP) without also advertising payment_secret, which was previously required. This is a protocol-correctness change rather than a clear-cut security fix, but it removes a validation rule that could have caused BOLT12 invoices to be wrongly rejected.

Lower-prioritylnutil: add blinded path feature flagby Sander van Grieken · 7ed84375 · May 12, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Sander van Grieken

lnutil: add blinded path feature flag

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

This commit simply adds two new named constants for an existing Lightning network feature (route blinding/blinded paths) to Electrum's internal feature-flag list. It does not change any active code paths, parsing logic, or security behavior. It is a preparatory or compatibility-only change.

Lower-prioritylnutil: rename LNFC.INVOICE -> BOLT11_INVOICE, add b12 LNFCby f321x · a7e595ef · May 12, 2026 · 5 filesMessage 73 · AdequateInformational 15Details
Commit message · f321x

lnutil: rename LNFC.INVOICE -> BOLT11_INVOICE, add b12 LNFC

Renames the "INVOICE" lightning feature context to "BOLT11_INVOICE"
as there is now a bolt 12 invoice feature context as well that differs.

Also adds 4 new bolt 12 context to the Enum.

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

This commit is a straightforward code cleanup and preparation for future BOLT12 (a newer Lightning Network invoice standard) support. It renames the existing 'INVOICE' feature context to 'BOLT11_INVOICE' and adds new context labels for BOLT12-related features. There is no security fix or vulnerability present in the diff.

Security candidateUpgrade `trezorlib` to 0.20.1by Roman Zeyde · 0f2fa36e · May 11, 2026 · 4 filesMessage 78 · AdequateInformational 24Details
Commit message · Roman Zeyde

Upgrade `trezorlib` to 0.20.1

Trezor plugin is updated for `trezorlib` 0.20.1 release.

Tested the following scenarios with Trezor 1 (with FW 1.14.0), T, Safe 3 and Safe 5 (with FW 2.10.0):
- create a new wallet:
- generate new seed
- recover from backup
- verify an address
- send & RBF flows
- set a PIN & a passphrase
- open an existing wallet file
- locking the device on exit
- flow cancellation

Safe 7 support will be added in a subsequent PR.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
access control
AI analysis · Informational 24/100

This commit updates Electrum's Trezor hardware wallet plugin to work with a newer version of the trezorlib library (0.20.1). It rewrites how Electrum opens sessions with Trezor devices, especially when passphrases are used. The change is a routine dependency upgrade, but it touches sensitive code that handles private keys and device unlocking. There is no direct evidence in the commit that this fixes a known security vulnerability, but any bug in session or passphrase handling could in principle affect wallet security.

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.

Lower-prioritybuild: fix trezor: new trezorlib 0.20 now requires *.dist-info metadataby SomberNight · d6136716 · May 11, 2026 · 3 filesMessage 93 · StrongInformational 19Details
Commit message · SomberNight

build: fix trezor: new trezorlib 0.20 now requires *.dist-info metadata

```
8.16 | W | gui.qt.wizard.wallet.WCChooseHWDevice | error getting device infos for trezor: Library version for 'trezor' is incompatible. // Installed: unknown, Needed: 0.20.0 <= x < 0.21 // Make sure you install it with python3
```

```
>>> trezorlib.__version__
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: name 'trezorlib' is not defined
>>> import trezorlib
>>> trezorlib.__version__
Traceback (most recent call last):
File "/tmp/.mount_electrcmMljC/usr/lib/python3.12/importlib/metadata/__init__.py", line 397, in from_name
return next(cls.discover(name=name))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
StopIteration

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/.mount_electrcmMljC/usr/lib/python3.12/site-packages/trezorlib/__init__.py", line 27, in __getattr__
return importlib.metadata.version("trezor")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.mount_electrcmMljC/usr/lib/python3.12/importlib/metadata/__init__.py", line 889, in version
return distribution(distribution_name).version
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.mount_electrcmMljC/usr/lib/python3.12/importlib/metadata/__init__.py", line 862, in distribution
return Distribution.from_name(distribution_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.mount_electrcmMljC/usr/lib/python3.12/importlib/metadata/__init__.py", line 399, in from_name
raise PackageNotFoundError(name)
importlib.metadata.PackageNotFoundError: No package metadata was found for trezor

```

We generally don't bundle the *.dist-info importlib metadata stuff as for many packages, these files are not reproducible.

ref
https://github.com/spesmilo/electrum/commit/aecc22dc081339fb570a7a3b09f3e47bf9ea5021
https://github.com/spesmilo/electrum/commit/c52a29fc221f8fdbe55872084f215478c957010d

(cherry picked from commit f8226f9384369ca30a2c4811cd631eb77719f97e)

93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 19/100

This commit fixes a build/packaging problem in Electrum's bundled desktop releases (AppImage, Windows, macOS). A newer version of the Trezor hardware-wallet library now needs its package metadata files to be present, otherwise it cannot report its version and Electum wrongly treats it as incompatible. The change simply includes those metadata files in the bundled app. It is a reliability fix, not a security vulnerability patch.

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.

Lower-priorityci: code review: extend prompt to verify commit message intentby f321x · 6eba49b6 · May 11, 2026 · 1 fileMessage 95 · StrongInformational 15Details
Commit message · f321x

ci: code review: extend prompt to verify commit message intent

Extends the code review CI prompt to verify commit messages are
actually doing what they claim to do. E.g. that a commit specifying
it is only moving code actually does not modify any logic.

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only changes the internal instructions used by Electrum's automated code-review system. It tells the AI reviewer to double-check that commits claiming to just move code around don't secretly change behavior. No actual wallet, network, or cryptographic code was modified, so users are not directly affected.

Lower-priorityci: code review: pass commit messages into prompt contextby f321x · 0c52a01a · May 11, 2026 · 1 fileMessage 85 · StrongInformational 15Details
Commit message · f321x

ci: code review: pass commit messages into prompt context

Pass the git commit messages of the reviewed PR into the prompt.
This way claude doesn't have to fetch them manually but has them
in its context right from the beginning.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit changes Electrum's internal CI (continuous integration) script that runs an automated code review using Claude. It simply adds the git commit messages of a pull request into the prompt sent to Claude, so the AI has more context. It does not touch any wallet, networking, cryptography, or user-facing code, and there is no security issue in the change itself.

Lower-priorityqml: InvoiceDialog: rename "Remote Pubkey" -> "Recipient Pubkey"by f321x · bed768e5 · May 11, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · f321x

qml: InvoiceDialog: rename "Remote Pubkey" -> "Recipient Pubkey"

"Remote Pubkey" is somewhat misleading in the context of paying a
lightning invoice.
The german translation ("Entfernter öffentlicher Schlüssel") feels
even more out of context.

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

This commit changes a single user-interface label in Electrum's mobile/QML app from 'Remote Pubkey' to 'Recipient Pubkey' when displaying a Lightning invoice. It is purely a wording/translation clarity improvement and does not alter any code behavior, cryptography, network handling, or security logic.

Lower-priorityregtests: make wait_until_spent more robustby SomberNight · 9a569f3e · May 8, 2026 · 1 fileMessage 90 · StrongInformational 11Details
Commit message · SomberNight

regtests: make wait_until_spent more robust

if `$1` was some garbage value (e.g. the 4-character "null" string coming from jq), the exit code of bitcoin_cli was not tested (it was masked by being part of the while's test condition). Instead now wait_until_spent correctly propagates bitcoin_cli's exit code. (due to `set -e` being set at the top level)

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
AI analysis · Informational 11/100

This change fixes a test helper script so that if a Bitcoin command-line tool fails, the failure is properly noticed and the test stops. It only affects internal regression tests, not the Electrum wallet that users run. There is no direct security risk to end users.

Lower-priorityregtests: swaps: add test for forward-swap success caseby SomberNight · aed6ec14 · May 8, 2026 · 3 filesMessage 83 · StrongInformational 15Details
Commit message · SomberNight

regtests: swaps: add test for forward-swap success case

Previously only the reverse-swaps were tested.
Note that what is reverse for the client, is forward for the server, hence testing different scenarios for reverse-swaps (success case, different failrue cases) already exercises some of the logic of forward-swaps.

However the swap-protocol request construction and validation is specific to swap direction, and that was not exercised for forward-swaps at all prior to this.

(but duplicating the other testcases probably is not worth)

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit only adds a new automated test for a successful forward cryptocurrency swap and renames an existing reverse-swap test. It also adds a minor code comment noting an inconsistent field name. There are no user-facing changes and no security fixes or vulnerabilities are present in the diff.

Lower-priorityutil: ESocksProxy: add fixme for is_proxy_tor raceby SomberNight · eca128a8 · May 8, 2026 · 1 fileMessage 50 · ThinLow 26Details
Commit message · SomberNight

util: ESocksProxy: add fixme for is_proxy_tor race

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

This commit only adds a code comment (a 'FIXME') noting a race condition in Electrum's SOCKS proxy handling. The actual behavior is not changed. The race could mean that when Electrum is still checking whether a proxy is a Tor proxy, it might incorrectly reuse Tor circuits instead of waiting for the check to finish. This is a potential privacy/ anonymity concern for users routing traffic through Tor, but no exploit or direct fund theft is evident from the diff alone.

Lower-prioritylnpeer: send channel_update on channel_reestablishby f321x · a1d8483d · May 8, 2026 · 1 fileMessage 81 · StrongLow 30Details
Commit message · f321x

lnpeer: send channel_update on channel_reestablish

If we have forwarding enabled, send a channel_update message to the
peer after a channel_reestablish.
The peer needs to know our channel constraints to receive a payment
(for r_tags or blinded path) and sending it just once on mark_open
might not be enough as the peer could miss it, lose it or it might
get out of date if we'd change our forwarding fees.
See https://github.com/spesmilo/electrum/pull/10630#issuecomment-4390045965.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Low 30/100

This change makes Electrum's Lightning peer re-send its channel fee and routing rules to a peer whenever the connection is re-established, not just when the channel first opens. This helps peers know the current rules so payments can be received reliably. It is a protocol robustness improvement, not a fix for an active exploit.

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.

Lower-prioritylnworker: fix _get_next_peers_to_try regressionby f321x · cbe97a8c · May 7, 2026 · 3 filesMessage 80 · StrongLow 25Details
Commit message · f321x

lnworker: fix _get_next_peers_to_try regression

`LNPeerManager._get_next_peers_to_try` would skip all recent peers
if no proxy is enabled due to incorrect operator precedence.
Fixes regression introduced by 79ef429b3.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
AI analysis · Low 25/100

This commit fixes a programming bug where the order of logical checks was wrong, causing Electrum to ignore all recently-used Lightning peers when no Tor proxy was configured. The fix makes the code correctly check whether the active proxy is a Tor proxy before deciding whether to skip onion-address peers. This is a connectivity bug rather than a direct theft or remote-code vulnerability, but it could make users' Lightning connections behave unexpectedly or prefer less optimal peers.

Lower-prioritycontrib/android/Readme.md: mention build cacheby SomberNight · 9aef60e3 · May 7, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · SomberNight

contrib/android/Readme.md: mention build cache

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates a documentation file (Readme.md) for Android build instructions. It adds advice about clearing build caches when developers don't see their changes take effect or encounter confusing build failures. There is no code change and no security relevance.

Lower-prioritylnonion: factor out next_blinding_from_shared_secretby Sander van Grieken · 37b6fe3d · May 6, 2026 · 2 filesMessage 55 · ThinInformational 15Details
Commit message · Sander van Grieken

lnonion: factor out next_blinding_from_shared_secret

Factor out the derivation of the next path key/blinding in a
shared function.

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

55/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit is a simple code cleanup: it extracts a small, repeated calculation into a shared helper function. The math used to derive the next blinding key is unchanged, and there is no indication of a security fix or behavior change.

AI review queuedqewallet: replace some threads with coroutinesby f321x · 0505ef59 · May 6, 2026 · 1 fileMessage 60 · AdequateInformational 12Details
Commit message · f321x

qewallet: replace some threads with coroutines

Allows to simplify a bit and has less overhead.

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

This commit is a routine code cleanup in Electrum's mobile/QML user interface. It replaces two background threads with lightweight coroutines (async functions) for broadcasting Bitcoin transactions and paying Lightning invoices. There is no indication this change fixes or introduces a security vulnerability.

Lower-priorityqml: fix userinfo race in Invoice viewby f321x · da53b4eb · May 6, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · f321x

qml: fix userinfo race in Invoice view

When paying a lightning invoice there was a race between the
`on_event_payment_succeeded` and `on_event_invoice_status` callbacks.
Depending on which was called last the string at the top
of the invoice view would either say "Paid!" (correct) or
"This invoice was already paid" (technically correct but confusing).
By keeping state if the invoice payment attempt was initiated in this
session the subsequent calls to `update_userinfo` can correctly
determine which string to show.

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

This commit fixes a minor user-interface timing bug in Electrum's mobile/QML invoice view. When paying a Lightning invoice, two internal notifications could arrive in different orders, causing the screen to briefly or incorrectly show 'This invoice was already paid' instead of 'Paid!'. The fix tracks whether the payment was started in the current session so the right message is always shown. There is no security issue here—only a confusing label.

Lower-prioritylnpeer: send channel update also for private channels, if we are forwardingby ThomasV · ef2f9e33 · May 6, 2026 · 1 fileMessage 50 · ThinLow 35Details
Commit message · ThomasV

lnpeer: send channel update also for private channels, if we are forwarding

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

This change adjusts how Electrum's Lightning peer shares routing information. Previously, the wallet only sent a 'channel update' (the data peers need to route payments through a channel) for public channels. Now it also sends that update for private channels when the user has enabled payment forwarding. This is a bug fix for routing functionality, not a security vulnerability, but it touches sensitive Lightning gossip logic.