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 40 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 queuedtest_wallet_vertical: test bump_fee raises for too low feeby f321x · f1e792cc · Feb 24, 2026 · 1 fileMessage 83 · StrongInformational 12Details
Commit message · f321x

test_wallet_vertical: test bump_fee raises for too low fee

Test that Abstract_Wallet.bump_fee() raises if the given feerate
of the replacement is equal to the feerate of the tx to bump as this
wouldn't be accepted to the mempool.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 12/100

This commit only adds a new automated test to Electrum. The test checks that the wallet's 'bump fee' feature correctly refuses to create a replacement Bitcoin transaction when the new fee rate is not high enough to be accepted by the network. It does not change any production wallet code, so it cannot by itself introduce a security vulnerability or fix one in shipped software. It may, however, be regression coverage for an earlier behavioral fix.

AI review queuedtest_wallet_vertical: add test for dscancel fee estimateby f321x · 6c143fa9 · Feb 24, 2026 · 1 fileMessage 83 · StrongInformational 12Details
Commit message · f321x

test_wallet_vertical: add test for dscancel fee estimate

Check that dscancel properly raises CannotDoubleSpendTx if the
feerate of the new tx is lower than the tx to be cancelled.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 12/100

This commit only adds a new automated test to Electrum. The test checks that the wallet correctly refuses to cancel a transaction if the replacement transaction does not pay a higher fee rate than the original. It does not change any production wallet code, so it cannot directly introduce or fix a security vulnerability in running software.

AI review queuedtest_wallet_vertical: add test for batch tx fee increaseby f321x · 6e1bf7c4 · Feb 24, 2026 · 1 fileMessage 95 · StrongInformational 12Details
Commit message · f321x

test_wallet_vertical: add test for batch tx fee increase

Adds unittest to check the fee increase when adding outputs to a base
tx. Supposed to prevent creating transactions that don't get accepted
like in this traceback:
```
broadcast_transaction error [DO NOT TRUST THIS MESSAGE]: "RPCError(1, 'the transaction was rejected by network rules.\\n\\ninsufficient fee, rejecting replacement ceeaef5ac7f82286e42ebd530e965fa4c7a6c11933d6b89d6d6f0ee2c69db839; new feerate 0.00001109 BTC/kvB <= old feerate 0.00001110 BTC/kvB
```

95/100 · StrongMessage clarity
✓ Specific, 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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 12/100

This commit only adds a new automated test to Electrum. It does not change any production wallet code. The test checks that when a user adds extra outputs to an existing RBF (replace-by-fee) transaction, the new transaction's fee is high enough to be accepted by Bitcoin network relay rules. The commit message mentions a past broadcast error where a replacement transaction was rejected because its fee rate was not higher than the original's. This is a regression test, not a fix.

AI review queuedwallet_db: assert WalletDBUpgrader.storage is dictby f321x · a1f1b393 · Feb 20, 2026 · 1 fileMessage 73 · AdequateModerate 53Details
Commit message · f321x

wallet_db: assert WalletDBUpgrader.storage is dict

Assert `WalletDBUpgrader.data` is a regular in-memory dict and not
some StoredDict, so if an exception would happen during a wallet
db upgrade the partial changes don't get commited to disk.

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 · Moderate 53/100

This commit adds a safety check to Electrum's wallet database upgrade code. It ensures that when the wallet file format is being upgraded, the data being modified is a plain in-memory copy, not a live disk-backed structure. The goal is to prevent a failed or partial upgrade from accidentally being written to disk, which could corrupt the wallet file.

AI review queuedwallet_db: handle non-existing parent_set_key in v65by f321x · 73a03249 · Feb 20, 2026 · 1 fileMessage 73 · AdequateLow 30Details
Commit message · f321x

wallet_db: handle non-existing parent_set_key in v65

Handles non-existing parent_set_key in _convert_version_65.

Fixes #10487

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

This commit fixes a bug in Electrum's wallet database upgrade code. When opening an older wallet file, the upgrade routine could crash because it expected a database field (parent_set_key) that wasn't always present. The fix makes the upgrade tolerate missing data. This is a reliability fix for wallet migration, not a remote attack vector.

AI review queuedqt: fix toolbar action exc in offline modeby f321x · 907fff46 · Feb 16, 2026 · 1 fileMessage 68 · AdequateInformational 20Details
Commit message · f321x

qt: fix toolbar action exc in offline mode

Fix exception when clicking on "Donate to server" in offline mode by not
showing the "Donate to server" menu action when no network is set.

Raise CancelledError in `fetch_bitcoin_paper` as
`_fetch_tx_from_network` already shows an according error message so the
second, subsequent error message shown by `on_error` is not useful if
`_fetch_tx_from_network` already failed.

```
63.53 | E | gui.qt.exception_window.Exception_Hook | exception caught by crash reporter
Traceback (most recent call last):
 File "/home/user/Documents/electrum/electrum/gui/qt/main_window.py", line 864, in donate_to_server
   d = self.network.get_donation_address()
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get_donation_address'
```

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 20/100

This commit fixes a harmless user-interface bug in Electrum's Qt desktop wallet. When running in offline mode, clicking 'Donate to server' in the Help menu caused a crash because the program tried to use a network connection that didn't exist. The fix simply hides that menu item when there is no network. A second small change prevents an extra, unhelpful error message when fetching the built-in Bitcoin whitepaper fails offline.

AI review queuedwizard: fix exception when loading new tc walletby f321x · 3905f8d9 · Feb 11, 2026 · 2 filesMessage 88 · StrongInformational 19Details
Commit message · f321x

wizard: fix exception when loading new tc wallet

I tried to reproduce:
https://github.com/spesmilo/electrum/issues/8815#issuecomment-2094259186
which triggered the following exception for me:

```
Traceback (most recent call last):
File "/home/user/code/electrum-fork/electrum/gui/qt/__init__.py", line 409, in start_new_window
window = self._create_window_for_wallet(wallet)
File "/home/user/code/electrum-fork/electrum/gui/qt/__init__.py", line 329, in _create_window_for_wallet
w = ElectrumWindow(self, wallet)
File "/home/user/code/electrum-fork/electrum/gui/qt/main_window.py", line 290, in __init__
self.load_wallet(wallet)
~~~~~~~~~~~~~~~~^^^^^^^^
File "/home/user/code/electrum-fork/electrum/util.py", line 495, in do_profile
o = func(*args, **kw_args)
File "/home/user/code/electrum-fork/electrum/gui/qt/main_window.py", line 589, in load_wallet
self.update_recently_opened_menu()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/home/user/code/electrum-fork/electrum/gui/qt/main_window.py", line 741, in update_recently_opened_menu
for i, k in enumerate(recent):
~~~~~~~~~^^^^^^^^
TypeError: 'NoneType' object is not iterable
```

This happens because the trustedcoin wallet is loaded outside of
Daemon.load_wallet() so Daemon.update_recently_opened_wallets()
is not getting called and config.RECENTLY:_OPEN_WALLET_FILES is
still None when we try to iterate through it.
As fix i now use load_wallet() instead of manually
instantiating the Wallet
and additionally handle
RECENTLY_OPEN_WALLET_FILES being None in
ElectrumWindow.update_recently_opened_menu().

My pull request https://github.com/spesmilo/electrum/pull/10121
would have sent this exception to the crash reporter so we
might have noticed it earlier. I think we should not just catch
all exceptions in the wizard like on master as it causes us to
repeatedly miss regressions in the wizard that could be sent to
the crash reporter.

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 19/100

This commit fixes a crash that occurred when creating or loading a special type of Electrum wallet (a trustedcoin two-factor wallet) through the setup wizard. The crash was caused by the wallet being loaded in a way that skipped normal bookkeeping, leaving a menu list as 'None' instead of empty. The fix makes the wizard use the standard wallet-loading path and also defensively treats a missing recent-wallets list as empty. It is a bug-fix for a user-visible crash, not a security vulnerability.

AI review queuedtests: add unittest for Abstract_Wallet.export_history_to_fileby f321x · a6a57f0f · Feb 3, 2026 · 8 filesMessage 95 · StrongInformational 15Details
Commit message · f321x

tests: add unittest for Abstract_Wallet.export_history_to_file

Adds unittest for Abstract_Wallet.export_history_to_file that
compares the output against reference files. This
should help to prevent regressions and ensure the layout
of the export stays static over time.

95/100 · StrongMessage clarity
✓ Specific, 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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds new unit tests and reference data files for Electrum's wallet history export feature. It does not change any production wallet code, network handling, or user-facing behavior. There is no security issue here.

AI review queuedhistory export: make fees bitcoin, add hook, rm local txby f321x · e1dac558 · Feb 3, 2026 · 2 filesMessage 81 · StrongInformational 19Details
Commit message · f321x

history export: make fees bitcoin, add hook, rm local tx

Change fees from sats to bitcoin so the fee value is consistent with the
other values.
Fixes #10445

Also adds a plugin hook so plugins can create fancy history exports.

And stops adding unconfirmed/local transactions to the history as they
are unordered and make the export non-deterministic. Also transactions
that haven't happened yet don't seem useful for accounting.

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

This commit changes how Electrum exports a wallet's transaction history to a CSV or JSON file. It switches the fee column from satoshis (tiny Bitcoin units) to whole bitcoin units so it matches other amount columns, lets plugins take over history export entirely, and removes unconfirmed/local transactions from the export because their order isn't stable and they aren't useful for accounting. There is no direct security fix here; it is a usability/consistency improvement for exported reports.

AI review queuedmove history export from HistoryList to Abstract_Walletby f321x · 68144588 · Feb 3, 2026 · 2 filesMessage 73 · AdequateInformational 15Details
Commit message · f321x

move history export from HistoryList to Abstract_Wallet

Moves the history export function to Abstract_wallet so it can be
unittested and called from other places like the cli or QML 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 simply moves an existing wallet history export feature from the Qt graphical user interface code into the core wallet code. The actual export logic is copied almost unchanged, so users will see no difference in behavior. It is a code cleanup/refactoring change, not a security fix or vulnerability.

AI review queuedlnhtlc: remove unneeded non-initiator fee_update in logby ThomasV · 5767913e · Jan 28, 2026 · 3 filesMessage 50 · ThinLow 43Details
Commit message · ThomasV

lnhtlc: remove unneeded non-initiator fee_update in log

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

This commit cleans up how Electrum stores initial Bitcoin transaction fee information for Lightning payment channels. Previously, both sides of a channel got a starting fee entry in the internal log, even though only the channel initiator is allowed to change fees later. The patch now records the initial fee only for the initiator and includes a database upgrade routine to remove the duplicate entry from existing wallets. The change is described by the developer as a cleanup, not a security fix, but it touches code that decides which fee rate is used in commitment transactions, which matters for channel safety.

AI review queuedcontrib: minor clean-up shell usageby SomberNight · ceadcac9 · Jan 23, 2026 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · SomberNight

contrib: minor clean-up shell usage

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

This commit is a minor shell-script cleanup. It removes an unnecessary 'ls' call in a loop and adds missing double quotes around variables. These are best-practice hygiene changes that prevent filename-word-splitting bugs, but they do not introduce or fix any active security vulnerability in the shipped Electrum wallet software itself.

AI review queuedcontrib/add_cosigner: fix for python 3.13by SomberNight · b495ee77 · Jan 23, 2026 · 1 fileMessage 80 · StrongInformational 16Details
Commit message · SomberNight

contrib/add_cosigner: fix for python 3.13

This script used to work, I assume my breakage is due to the python version.

```
Traceback (most recent call last):
File "/home/user/wspace/electrum/./contrib/add_cosigner", line 35, in <module>
version_spec = importlib.util.spec_from_file_location('version', 'electrum/version.py')
^^^^^^^^^^^^^^
AttributeError: module 'importlib' has no attribute 'util'
```

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 16/100

This is a trivial compatibility fix for a helper script. In Python 3.13, using importlib.util requires explicitly importing importlib.util. The change adds that missing import so the script can load a version file again. There is no security issue here.

AI review queuedqt: fix: addresses tab broken for imported watchonly walletsby SomberNight · 0e07128c · Jan 23, 2026 · 2 filesMessage 91 · StrongInformational 18Details
Commit message · SomberNight

qt: fix: addresses tab broken for imported watchonly wallets

fixes https://github.com/spesmilo/electrum/issues/10435

regression from https://github.com/spesmilo/electrum/pull/10376

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

This commit fixes a bug where the 'Addresses' tab in Electrum's Qt GUI would crash or fail to display for a specific type of wallet: imported watch-only wallets. These wallets contain addresses you are monitoring but do not own the private keys for. The crash happened because the code assumed every address had an associated public key/index, but watch-only imported addresses do not. The fix makes the sorting function safely handle a missing index by treating it as an empty string. There is no security vulnerability here—just a user-interface regression.

AI review queuedupdate block header checkpointsby SomberNight · 08fa871f · Jan 22, 2026 · 4 filesMessage 35 · OpaqueInformational 15Details
Commit message · SomberNight

update block header checkpoints

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

This commit simply adds new Bitcoin block header checkpoints to Electrum's data files for mainnet, signet, testnet, and testnet4. Checkpoints are hardcoded reference points that help the wallet verify it is following the correct blockchain. There is no code change, no bug fix, and no security vulnerability visible in this commit.

AI review queuedupdate localeby ThomasV · d9091784 · Jan 22, 2026 · 1 fileMessage 18 · OpaqueInformational 10Details
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 10/100

This commit is a routine update to Electrum's locale (translation/language) files. There is no indication of any security-related change, and the actual code diff is unavailable. It appears to be a normal maintenance update for translations.

AI review queuedwallet: check swap provider liquidity for send change to lnby f321x · 7b828a83 · Jan 22, 2026 · 1 fileMessage 85 · StrongLow 46Details
Commit message · f321x

wallet: check swap provider liquidity for send change to ln

Check the swap providers liquidity as well if we try to send change to
lightning in `make_unsigned_transaction`. It is now expected that the
swap_manager is already initialized when calling
`make_unsigned_transaction`, otherwise no dummy output will get added.

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

This commit tightens the conditions under which Electrum automatically sends Bitcoin transaction change into a Lightning Network swap. Previously, the wallet only checked whether the Lightning node could receive the amount. Now it also verifies the swap provider actually has enough liquidity and that the amount meets minimum and maximum swap limits. Without this check, a user could create a transaction whose change is routed into a swap that cannot currently be fulfilled, potentially leaving funds stuck, failing the payment path, or producing a poor user experience. The change is defensive rather than a fix for an active exploit.

AI review queuedwallet: stop() to clean-up lnworker even in offline modeby SomberNight · 15067be5 · Jan 20, 2026 · 1 fileMessage 50 · ThinLow 29Details
Commit message · SomberNight

wallet: stop() to clean-up lnworker even in offline mode

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

This commit fixes a cleanup bug in Electrum wallet shutdown. Previously, the Lightning Network worker (lnworker) was only stopped when the wallet was online. If the wallet was offline, the Lightning worker might not shut down cleanly, potentially leaving background tasks running or resources not released. The change ensures the Lightning worker is always stopped during wallet shutdown, regardless of whether a network connection exists.

AI review queuedqml: PasswordDialog: show error on invalid passwordby f321x · 07f61ebd · Jan 20, 2026 · 3 filesMessage 85 · StrongInformational 15Details
Commit message · f321x

qml: PasswordDialog: show error on invalid password

Currently the PasswordDialog on QML would just close if the user enters
an incorrect password. This is confusing as the user doesn't know why
the dialog closed and if it initiated any action or not.

With the change the PasswordDialog will get the ability to show an error
message and will show "Invalid Password" if an incorrect password is
entered.
I also used it for the password unification warning ("Need to enter
similar password ...") instead of showing a separate popup.

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

This commit fixes a confusing user-interface behavior in Electrum's mobile/QML app. Previously, when a user typed the wrong password, the password dialog simply closed without explanation, which could make them think an action had happened. Now the dialog stays open and shows an 'Invalid Password' message. It is a straightforward usability improvement, not a security vulnerability fix.

AI review queuedqml: QEDaemon.setPassword to restore invariant wallets are unlockedby SomberNight · 6d9ec728 · Jan 19, 2026 · 2 filesMessage 73 · AdequateModerate 59Details
Commit message · SomberNight

qml: QEDaemon.setPassword to restore invariant wallets are unlocked

fixes https://github.com/spesmilo/electrum/issues/10415

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 · Moderate 59/100

This commit fixes a bug in Electrum's mobile/QML wallet interface where changing a wallet password could leave some loaded wallets in a 'locked' state. The fix restores the app's internal rule that all loaded wallets must stay unlocked. A locked wallet could temporarily block the user from spending or viewing balances until re-unlocked, but this appears to be a reliability/UX bug rather than a direct theft vulnerability.

AI review queuedwallet: minor clean-up and sanity checks for unlock/lockby SomberNight · 91f286b4 · Jan 19, 2026 · 1 fileMessage 81 · StrongLow 29Details
Commit message · SomberNight

wallet: minor clean-up and sanity checks for unlock/lock

- unlock() did not handle password=="" well
instead of the caller converting the arg, as in
https://github.com/spesmilo/electrum/commit/7113cec4c724c2a443031c71cc8d08fee5e2f385,
it is more robust for the function itself to do it
- get_unlocked_password() should never return an invalid password
- add is_unlocked()

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

This commit tightens up how Electrum wallets handle being 'unlocked' with a password. It makes the unlock() function itself treat an empty string the same as no password, ensures the function that returns the in-memory password validates it first, and adds a helper to check whether the wallet is currently unlocked. These are defensive sanity checks rather than fixes for a known active attack.

AI review queuedqml: fix: allow opening passwordless walletsby SomberNight · 5b915fbf · Jan 19, 2026 · 1 fileMessage 90 · StrongLow 26Details
Commit message · SomberNight

qml: fix: allow opening passwordless wallets

This must be an old regression.
The GUI was not allowing to open a wallet that did not have a password set:
it prompted for a password and did not accept any string (should at least accept empty "").

Without this, it was only possible to open a passwordless wallet if that was the first wallet the user opened
(as otherwise we would overwrite the empty pw with the pw of the current wallet).

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
second-pass: broader security terminology
AI analysis · Low 26/100

This commit fixes a user-interface bug in Electrum's QML (mobile-style) GUI that prevented users from opening wallets that have no password. Previously, the GUI would always ask for a password and reject an empty answer, making passwordless wallets impossible to open in many cases. The fix correctly distinguishes between 'no password provided' and 'an explicitly empty password was provided,' allowing passwordless wallets to open. This is a usability/functional bug, not a direct security vulnerability, though it could indirectly affect users who rely on passwordless wallets.

AI review queuedtests: add TestLNWallet to test lnwallet utilsby f321x · 562839c5 · Jan 8, 2026 · 1 fileMessage 70 · AdequateInformational 15Details
Commit message · f321x

tests: add TestLNWallet to test lnwallet utils

Adds new unittest file test_lnwallet.py to allow unittesting
utility functions of LNWallet.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ 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 a new automated test file for an existing Lightning wallet utility function. It does not change any production code, add new features, or fix any bugs. There is no security relevance.

AI review queuedqt: WalletInfoDialog: sort keystores by root fingerprintby f321x · fb96ba41 · Jan 8, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · f321x

qt: WalletInfoDialog: sort keystores by root fingerprint

Sort the keystore tabs of the WalletInfoDialog by their root
fingerprints. This makes it less confusing when looking at different
wallet instances of the same multisig setup as the tabs will always have
the same order.

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 is a minor user-interface improvement, not a security fix. It simply sorts the tabs shown in the wallet information window by the keystore's root fingerprint so that multi-signature wallet tabs appear in a consistent order across different computers. There is no vulnerability or security-relevant change here.

AI review queuedAddressSynchronizer: invalidate balance cache on spvby f321x · 663fcddc · Jan 7, 2026 · 1 fileMessage 85 · StrongInformational 24Details
Commit message · f321x

AddressSynchronizer: invalidate balance cache on spv

There was a race incorrectly counting transactions with one
confirmations to the unconfirmed balance instead of the confirmed
balance.
This happened because the balance cache of AddressSynchronizer got
invalidated after `on_event_blockchain_updated` and then again after
`receive_history_callback`->`add_transaction`, however when calling
`AddressSynchronizer.get_balance()` before the tx got spv verified the
height would still be counted as 0 (unconfirmed), populating the balance
cache again with the unconfirmed balance.
I noticed this only on QML due to timing differences to Qt.
Invalidating the cache in `AddressSynchronizer.add_verified_tx()` after
the tx got verified causes the balance to get recalculated and shown
correctly.

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
defensive validationsecond-pass: broader security terminology
AI analysis · Informational 24/100

This commit fixes a display-only bug in Electrum where, under certain timing conditions, a transaction that already had one blockchain confirmation could briefly be shown as 'unconfirmed' in the wallet balance. The fix adds a cache refresh right after a transaction is SPV-verified, so the balance is recalculated with the correct confirmation count. It does not allow theft, transaction manipulation, or remote code execution.