EL
← All projectsElectrum

Electrum

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

BitcoinSoftware walletsNormal
Repository coverage

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

66security candidates208second-pass queue928AI analyses
59commits · 30 days
114commits · 60 days
463commits · 180 days
929commits · 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.

65/100 average clarity
194Strong · 80–100
413Adequate · 60–79
287Thin · 40–59
39Opaque · 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.
ThomasV73272156
SomberNight35226350063
f321x37121371070
Sander van Grieken991098057
user323062
Roman Zeyde515053
Sasha Zykov414076
Aaron Fiore414068
Róbert Nagy111098
Ferdinando Ametrano111096
Felix302074
Ilya Artemov202050
Analysis record

Published AI watches

Last scanned 56 minutes ago

Moderate 51 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10798 from SomberNight/202608_base43

This commit fixes a performance weakness in Electrum's handling of large Bitcoin transactions encoded in 'base43'. The base43 encoding and decoding functions run in quadratic time, meaning the work grows much faster than the input size. An…

Quadratic-time base43 encode/decode can be triggered on attacker-controlled inputDenial-of-service via CPU exhaustion / UI freeze on large transaction stringsInput-length cap added as a defensive guard, not a full algorithmic fix
0e9f1a0dby Felix+25−92 files
No security note in commit
Low 41 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10799 from SomberNight/202608_android_secure_window

This update tightens a privacy feature on Electrum's Android app that prevents the screen from being captured while sensitive Bitcoin private keys or seed phrases are visible. Before, the protection could be accidentally turned off when mu…

Adds visibility-gated secureWindow bindings to protect WIF keys and seed phrasesPrevents secureWindow from being cleared when multiple sensitive dialogs are stackedTargets Android screenshot/recents-thumbnail protection surface
4622390cby accumulator+17−05 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 98 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

docs: add Coldcard Mk3 seed-entropy security notice to plugin README (#10805)

This commit only adds a documentation warning to Electrum's Coldcard plugin README. It does not change any executable code, cryptographic logic, or wallet behavior. The warning tells users that Coldcard/Coinkite disclosed a firmware bug in…

Documentation-only changeReferences an external hardware-wallet firmware advisoryNo code, cryptography, or plugin behavior modified
2c2a40b6by Róbert Nagy+4−01 file
Vendor flagged security relevance
Low 48 AI analysisMessage 81 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

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

This commit tightens screen-shot protection for private Bitcoin wallet keys (WIF keys and seed phrases) in Electrum's Android/QML user interface. It also fixes a bug where one screen (AddressDetails) was leaving the 'secure window' flag pe…

Adds FLAG_SECURE-style screenshot protection to additional private-key dialogsFixes a bug where secureWindow was never unset in AddressDetailsUses QML Binding 'when' with restoreMode semantics to handle stacked secure dialogs safely
739cba5dby SomberNight+17−05 files
Vendor flagged security relevance
Moderate 60 AI analysisMessage 92 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

lnpeer: chan_reest: ctn overflow: force-close instead of disconnect

This commit fixes a bug in Electrum's Lightning Network code. Previously, if a malicious or malfunctioning peer sent a channel re-establishment message with extremely large commitment numbers (over 2^48), the local program would hit an int…

Addition of explicit overflow check on untrusted peer-supplied commitment countersReplacement of assertion-failure/disconnect behavior with force-close on misbehaviorNew test cases for ctn overflow in both next_local_ctn and oldest_unrevoked_remote_ctn
b3e441f8by SomberNight+22−32 files
No security note in commit
Informational 18 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10791 from SomberNight/202608_wallet_sign_message2

This change moves the trimming of leading/trailing spaces in message-signing fields from the user-interface code into the shared wallet code. For the graphical interfaces (Qt and QML), spaces are still stripped automatically for convenienc…

Behavior change in message signing/verification input handlingCLI now preserves whitespace, which could affect signature validity for messages that intentionally contain leading or trailing whitespaceNo memory-safety, cryptographic, or authentication flaw visible in the diff
b1aa52d7by ghost43+27−185 files
No security note in commit
Informational 19 AI analysisMessage 96 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

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

This commit tidies up how Electrum handles extra spaces around Bitcoin addresses, messages, and signatures when signing or verifying messages. Previously, different parts of the program (desktop GUI, mobile-style GUI, command line) behaved…

Behavior normalization across GUI and CLI interfacesNo cryptographic primitive changedNo privilege boundary crossed
4c3064f5by SomberNight+27−185 files
No security note in commit
Informational 22 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: decrypt_message: nicer error msg if pubkey is unrelated

This commit improves the error handling in Electrum's message decryption feature. Previously, if a user tried to decrypt a message using a public key that did not belong to their wallet, the code could proceed and likely fail with a confus…

Input validation added for public key before cryptographic operationUser-facing exception replaces potential internal failureDefensive check prevents use of unrelated key material
92e938f4by SomberNight+5−01 file
No security note in commit
Informational 16 AI analysisMessage 83 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

qt: main_window: use TaskThread for each of sign/verify/encrypt/decrypt

This commit moves four message-crypto operations (sign, verify, encrypt, decrypt) in Electrum's Qt wallet window onto a background worker thread so they all behave the same way. It also lets the background thread surface user-facing errors…

Moved blocking wallet crypto calls off the GUI thread, reducing UI freeze / DoS surfaceRemoved local exception swallowing for encrypt_message; errors now propagate through the window's on_error handlerAdded defensive RuntimeError guard for deleted Qt widget in async callback
4a9a199fby SomberNight+28−151 file
No security note in commit
Low 29 AI analysisMessage 35 · Opaque
EL ElectrumElectrum BitcoinSoftware wallets

wallet: sign_message: force kwargs

This commit changes how Electrum's message-signing function is called so that callers must explicitly name each argument (address, message, password) rather than passing them by position. The main practical effect is to prevent accidental …

API hardening: keyword-only arguments prevent positional argument swapNo explicit security bug fix or vulnerability disclosure in commit message or diffNo changes to cryptographic logic, password handling, or message parsing
e1eb2a34by SomberNight+9−44 files
No security note in commit
Low 39 AI analysisMessage 45 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: sign_message: consolidate checks from UIs

This commit moves input-validation checks for signing, verifying, encrypting, and decrypting messages out of the user-interface code and into the shared wallet logic. It also adds type checks so that non-text inputs are rejected earlier. T…

Input validation moved from UI controllers into core wallet logicType checks added at the CLI command entry points for message-crypto operationsUserFacingException used consistently for address, wallet, script-type, and key-format errors
48893760by SomberNight+89−396 files
No security note in commit
Low 27 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: decrypt_message: consolidate checks from UIs

This commit moves input-validation and wallet-type checks for message decryption out of the user-interface and command-line layers and into the core wallet code. It also removes a faster, separate decryption path for imported wallets so al…

Input validation consolidated into a single core methodWatching-only wallet check moved from UI to wallet layerMultisig wallet unsupported-operation check moved from UI to wallet layer
9a0cc0d6by SomberNight+25−173 files
No security note in commit
Informational 15 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: refactor: add encrypt_message method, consolidated from UIs

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

No change to cryptographic primitives or parametersNo change to trust boundaries or input sourcesPure refactor consolidating duplicate code
5e9c8df0by SomberNight+26−183 files
No security note in commit
Informational 13 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: refactor: add verify_message method, consolidated from UIs

This commit is a routine code cleanup: it moves message-signature verification out of three user-interface files into a single shared helper method in the wallet module. There is no security-relevant behavior change visible in the diff. Th…

No security-relevant functional changeRefactoring only: code deduplicationException handling broadened safely (ValueError covers binascii.Error and unicode errors)
ff5bbb04by SomberNight+26−304 files
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

qt: main_window: add type hints to sign/verify, encrypt/decrypt

This commit only adds Python type hints and renames some function parameters for clarity in the Electrum desktop wallet's sign/verify and encrypt/decrypt message dialogs. It does not change what the code actually does, how it processes use…

0906fc20by SomberNight+45−181 file
No security note in commit
Informational 18 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

coldcard: fix get_soft_device_id() discarding its return value

This is a tiny one-line bug fix in Electrum's Coldcard hardware wallet plugin. A helper method that is supposed to fetch a software-based device identifier was calling the parent implementation but accidentally throwing away the result ins…

Missing return value causes method to always return NoneAffects hardware wallet device identification onlyNo change to signing, encryption, or authentication code
d7500508by Felipe Micaroni Lalli+1−11 file
No security note in commit
Informational 19 AI analysisMessage 96 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

qml: strip whitespace from message before signing, as in qt gui

This commit fixes a minor consistency bug in Electrum's newer QML (mobile-style) user interface. When signing a message, the app now removes accidental spaces at the start or end of the message and address, just like the older desktop Qt i…

Behavioral inconsistency between GUI implementations could cause user confusion or failed verificationNo cryptographic weakness introduced; change is input normalizationNo memory-unsafe code, no privilege changes, no network changes
72507328by Ferdinando Ametrano+3−01 file
No security note in commit
Low 48 AI analysisMessage 85 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

config: don't save "hidden wallet" paths in CURRENT_WALLET cv

This commit fixes a privacy leak in the Electrum wallet app. Previously, if a user opened a 'hidden wallet' (one whose filename starts with a dot, like a secret file), Electrum would remember it as the last-used wallet and could reopen it …

Privacy leak: hidden wallet filename persisted in config and could be auto-reopenedInformation disclosure: hidden wallet path exposed in recently-opened listBehavioral fix: setter silently drops sensitive value rather than persisting it
c43cf8e4by SomberNight+14−23 files
No security note in commit
Low 28 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

lnrouter: liquidity hints: add extra penalty if amt near cannot_send

This commit tweaks how Electrum's Lightning Network payment routing avoids channels where a previous payment attempt already failed. Previously, the router would treat a channel almost at its known failure limit almost the same as a channe…

Routing/liquidity-hint logic changed to penalize amounts close to a known cannot_send thresholdAdds defensive assertions on num_inflight_htlcs type and rangeSelf-described by author as a 'completely naive bandaid' / heuristic improvement
ee75ea31by SomberNight+12−21 file
No security note in commit
Moderate 52 AI analysisMessage 93 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

lnwallet: don't blacklist htlc failures without channel update

This change fixes how Electrum's Lightning wallet reacts when a payment route fails but the failing node no longer provides a channel update message, as now allowed by the Lightning protocol spec. Previously, Electrum would permanently bla…

Denial-of-service via over-blacklisting: prior behavior could cause legitimate channels to be blacklisted, degrading payment success and potentially isolating the wallet from usable routes.Spec compliance fix: aligns Electrum with updated Lightning BOLT protocol behavior.No cryptographic bypass or funds theft signal: the change is about routing policy, not key leakage or transaction authorization.
a865e336by f321x+48−142 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.

Security candidateqml: remove pin code authenticationby user · 47efb8b1 · Jan 19, 2026 · 11 filesMessage 73 · AdequateLow 45Details
Commit message · user

qml: remove pin code authentication

Completely removes the pin code authentication from qml. The config
option in the wallet preferences has been renamed to "Payment
authentication" and now either asks for the Android system
authentication (Biometric or system pin/password) if enabled or will ask
for the wallet password as fallback.

73/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
access controlsigning or wallet pathauthentication path
AI analysis · Low 45/100

This commit removes the old 6-digit PIN authentication from Electrum's Android/QML interface and replaces it with a single 'Payment authentication' setting. When enabled, the app now uses the phone's built-in biometric or system PIN/password prompt; when disabled, it just asks the user to confirm. The change also tightens Android biometric security by requiring Android 11+ and allowing only strong biometrics or device credentials. It is a feature redesign rather than a clear-cut vulnerability fix, but it likely addresses weaknesses in the previous custom PIN implementation.

Lower-priorityconfig: allow setting "forgetconfig" option in file, not just on CLIby SomberNight · 21248817 · Jan 19, 2026 · 2 filesMessage 81 · StrongInformational 16Details
Commit message · SomberNight

config: allow setting "forgetconfig" option in file, not just on CLI

- by specifying "default=<VALUE>" in commands.py, <VALUE> would always overwrite what is in the config file
- note `$ ./run_electrum -o setconfig forget_config true` still does not work,
as that first sets forget_config in memory, and then - by virtue of the setting -
it refuses to write changes to the config file
- hence this option would have to be set manually by editing the json
(or as a CLI flag, as before)

ref https://github.com/spesmilo/electrum/pull/10421#issuecomment-3765862081

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

This is a small bug-fix for how Electrum handles a setting called 'forgetconfig'. Previously, the command-line default of 'false' always overrode the value stored in the user's config file, making it impossible to enable the setting inside the config file. The change lets users set it in the config file as intended. It is not a security vulnerability fix; it is a usability/config fix.

Lower-prioritylnpeer: followup #10413by user · e81ac4b7 · Jan 16, 2026 · 1 fileMessage 59 · ThinInformational 18Details
Commit message · user

lnpeer: followup #10413

Save the updated htlc set in `Peer._fulfill_htlc_set` and
`Peer._fail_htlc_set()` only after the loop iterated through all htlcs.
This potentially improves performance, especially considering that
writing the db can take >100 ms for larger wallets without partial
writes.

59/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 18/100

This is a small performance cleanup in Electrum's Lightning code. It moves a save-to-database operation outside a loop so the wallet writes once instead of after every individual payment chunk. There is no direct security bug being fixed; the change reduces database writes and may make crashes during batch processing slightly cleaner, but it does not patch a vulnerability.

Lower-priorityaddr_sync: update "stored_height" db field immediately on wallet-openby SomberNight · a27e2cc6 · Jan 15, 2026 · 1 fileMessage 73 · AdequateInformational 23Details
Commit message · SomberNight

addr_sync: update "stored_height" db field immediately on wallet-open

Repro steps:
- in qt gui, with network enabled, open wallet1
- open wizard, create wallet2 (restore from seed something that has mined history)
- close both wallets, stop electrum
- start electrum with "-o" offline flag, open wallet2
- observe all txs in history tab show up as "unconfirmed"

The cause is that "stored_height" only gets updated ~on new blocks.
So if you created a wallet and closed it soon, its db would not contain "stored_height."

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

This commit fixes a display bug in the Electrum wallet. If a wallet was created or restored and then quickly closed, the database did not record the last known block height. Later, opening that wallet in offline mode made all transactions appear 'unconfirmed' because the wallet had no saved height to compare against. The fix immediately saves the current block height when a wallet is opened, not just when new blocks arrive.

Lower-prioritylnutil: change ReceivedMPPStatus.htlcs to frozenset, i.e. immutableby SomberNight · c37b844f · Jan 15, 2026 · 4 filesMessage 81 · StrongModerate 55Details
Commit message · SomberNight

lnutil: change ReceivedMPPStatus.htlcs to frozenset, i.e. immutable

As ThomasV says:

> ReceivedMPPStatus is a Namedtuple, which is immutable, but it contains
> a mutable field. Since ReceivedMPPStatus is not a StoredObject,
> no patch will be created when the htlcs list is modified, and we may
> end up not saving the change to disk if partial writes are enabled.

patch taken from https://github.com/spesmilo/electrum/pull/10395#pullrequestreview-3634244541
closes https://github.com/spesmilo/electrum/pull/10395

Co-authored-by: f321x <f@f321x.com>

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

This commit fixes a data-integrity bug in Electrum's Lightning payment handling. A particular data structure was supposed to be immutable, but it secretly contained a mutable list. When the list changed, Electrum's storage system did not notice, so the change might not be saved to disk—especially when partial writes are enabled. That could leave the wallet's record of incoming Lightning payments inconsistent after a restart or crash, potentially causing funds to appear stuck or payments to be mishandled. The fix makes the list truly immutable and updates the code to create new copies whenever it changes, so the storage layer reliably saves the state.

Lower-priorityqml: FeePicker: restrict abs/rate editing to mimic wallet.bump_fee/cpfpby SomberNight · 8a3d9fd7 · Jan 14, 2026 · 4 filesMessage 50 · ThinLow 35Details
Commit message · SomberNight

qml: FeePicker: restrict abs/rate editing to mimic wallet.bump_fee/cpfp

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

This commit tightens the user interface for fee editing in Electrum's mobile/QML wallet. Previously, users could freely type either a fee rate or a total absolute fee when bumping or cancelling transactions. Now, the app restricts which of those two inputs is shown depending on the operation, matching the rules already enforced by the underlying wallet code. This reduces the chance that a user accidentally creates an invalid or exploitable transaction by entering a fee value the wallet logic does not expect.

Lower-priorityqml: (trivial) qeinvoice: add type hintby SomberNight · ca597942 · Jan 14, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · SomberNight

qml: (trivial) qeinvoice: add type hint

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 single type hint comment to a QML GUI file. It does not change any executable code, logic, or behavior. There is no security relevance.

Lower-priorityqml: fix invalid QEInvoiceParser stateby f321x · b599ae7d · Jan 14, 2026 · 1 fileMessage 88 · StrongLow 42Details
Commit message · f321x

qml: fix invalid QEInvoiceParser state

Fixes the issue described in #10406.
When scanning a lightning invoice we would pass it to
`QEInvoiceParser.fromResolvedPaymentIdentifier()`, however
`fromResolvedPaymentIdentifier()` doesn't reset the state of
`QEInvoiceParser._lnurlData` which is used in QML to evaluate
`payImmediately: invoiceParser.isLnurlPay` in the `onValidationSuccess`
connection.

This change calls `clear()` in `fromResolvedPaymentIdentifier()` to
ensure that `QEInvoiceParser` state gets reset when loading a new invoice.
However when retrieving a bolt11 from a lnurl-pay callback we don't
wan't to reset `QEInvoiceParser._lnurlData` so that `payImmediately` is
true when confirming the lnurl pay dialog, for that I skip calling
`fromResolvedPaymentIdentifier()` and instead call `validateRecipient()`
directly so the `QEInvoiceParser` state doesn't get reset in this case.

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

This commit fixes a state-handling bug in Electrum's mobile/QML interface when scanning or processing payment invoices. Specifically, when a user scanned a Lightning invoice, leftover data from a previous LNURL-pay interaction could remain in the invoice parser, causing the app to think it should still act as an LNURL-pay and potentially pay immediately without showing the normal confirmation. The fix resets parser state when loading a new invoice, except when intentionally continuing an LNURL-pay flow.

Lower-priorityqeqrscanner: check requestCode on activity resultby f321x · 64501879 · Jan 13, 2026 · 1 fileMessage 45 · ThinLow 46Details
Commit message · f321x

qeqrscanner: check requestCode on activity result

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

This commit fixes the Android QR scanner in Electrum so it checks which app-request ID is returned before processing a scanned result. Previously the scanner used a hardcoded request code of 0, which could let a malicious or confused app feed fake QR scan results into Electrum by returning an activity result with the same default code. The fix gives Electrum a unique, randomly chosen request code and ignores any result that does not match it.

Security candidateandroid: implement biometric authenticationby user · 5dd3dda2 · Jan 13, 2026 · 10 filesMessage 55 · ThinLow 35Details
Commit message · user

android: implement biometric authentication

Allows to unlock the android app with the android biometric api (e.g.
fingerprint). Can be enabled in the settings.

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body✓ Names security-relevant behavior explicitly
Why it was queued
access controlsigning or wallet path
AI analysis · Low 35/100

This commit adds optional fingerprint unlock to the Electrum Android app. It stores an encrypted copy of the wallet password on the device, protected by Android's built-in biometric/keystore system. The change is a feature addition, not a fix for a known bug or attack. There are some design choices worth reviewing—such as how the encrypted password is stored and what happens if a user adds a new fingerprint—but nothing in the commit itself shows an active vulnerability being exploited.

Lower-priorityfix test_onion_message (follow-up previous commit)by ThomasV · fa575ab1 · Jan 13, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · ThomasV

fix test_onion_message (follow-up previous commit)

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

This commit only adds a missing stub method to a mock object used in unit tests. It does not change any production code, network behavior, or wallet security logic. It is a test-only follow-up fix with no security relevance.

Lower-prioritylnpeer: wait_for_received_pending_htlcs_to_get_removed: wait only if peer has been initializedby ThomasV · 18451437 · Jan 13, 2026 · 1 fileMessage 50 · ThinLow 31Details
Commit message · ThomasV

lnpeer: wait_for_received_pending_htlcs_to_get_removed: wait only if peer has been initialized

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

This commit fixes a Lightning Network code path where Electrum would try to wait on a peer that had not finished initial setup. The change skips uninitialized peers instead of calling a method on them. This likely prevents a hang or crash during channel operations, but the commit message does not frame it as a security fix and no exploit details are provided.

Lower-priorityExchangeRate: return NaN if rate is 0by f321x · 5199c6c7 · Jan 13, 2026 · 1 fileMessage 76 · AdequateLow 25Details
Commit message · f321x

ExchangeRate: return NaN if rate is 0

Prevent DivisionByZero exceptions by returning `Decimal('NaN')
instead of `Decimal(0)` if the exchange rate is 0.

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

```
>>> bool(Decimal(0))
False
```

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Low 25/100

This is a small defensive fix in Electrum's currency-conversion code. Previously, if an exchange rate was reported as zero, the code treated it the same as a missing rate and returned zero. Other parts of the program could then crash with a 'division by zero' error when converting amounts. The change makes zero rates return a special 'not a number' value instead, so callers can handle it safely. It is a robustness improvement rather than a clear-cut security vulnerability.

Lower-priorityqml: FeePicker: hide "Target" line in "Manual" modeby SomberNight · 65f245f4 · Jan 12, 2026 · 2 filesMessage 65 · AdequateInformational 15Details
Commit message · SomberNight

qml: FeePicker: hide "Target" line in "Manual" mode

instead use font colors to hint which textedit is being used for target

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

This commit is a user-interface tweak for Electrum's mobile/QML fee selector. It hides a 'Target' label when the user is manually entering a fee, and uses text color to show which of the two manual inputs (fee rate vs absolute fee) was edited last. There is no security-relevant change.

Lower-priorityqml: FeePicker: use UI_UNIT_NAME constants, instead of hardcodingby SomberNight · f387300a · Jan 12, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · SomberNight

qml: FeePicker: use UI_UNIT_NAME constants, instead of hardcoding

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

This commit is a minor code cleanup in Electrum's mobile-style QML user interface. It replaces two hardcoded text labels ('sat/vbyte' and 'sat') with references to centrally defined constants. There is no security relevance: no logic, calculations, permissions, or data handling changed.

Lower-prioritytest_lnpeer: use PeerInTests instead if Peerby f321x · dee23717 · Jan 8, 2026 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · f321x

test_lnpeer: use PeerInTests instead if Peer

ec65c53 replaces the usage of `PeerInTest` with `Peer` in
test_lnpeer.py.
PeerInTests sets `Peer.DELAY_INC_MSG_PROCESSING_SLEEP` to 0 so all
incoming messages get processed immediately. Because `Peer` instead of
`TestInPeer` was used the delay caused `test_reestablish_with_old_state`
to fail regularly because bob receives the old channel state and kills
the OldTaskGroup of the unittest with GracefulDisconnect before Alice
processed the answer of Bob and is still in ChannelState.REESTABLISHING.

```
FAILED tests/test_lnpeer.py::TestPeerDirect::test_reestablish_with_old_state - AssertionError: <PeerState.REESTABLISHING: 1> != <PeerState.BAD: 3>
```

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

This is a one-line fix in Electrum's test suite. A previous change accidentally used the real network Peer class instead of a special test-only version (PeerInTests) in a Lightning network test. The test-only version processes messages immediately, which a specific test needs to avoid timing-related failures. This commit restores the test-only class, fixing a flaky unit test. It is not a security fix and does not affect production code.

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.

Lower-priorityqml: add close no-op to QEQRScanner to fix type errorby f321x · 04b7b683 · Jan 8, 2026 · 1 fileMessage 85 · StrongInformational 17Details
Commit message · f321x

qml: add close no-op to QEQRScanner to fix type error

Adds close() no-op method to QEQRScanner to prevent type errors like
this:
```
01-02 17:28:09.645 10543 10565 I python  : 162.27 | W | gui.qml.qeapp | file:///data/data/org.electrum.electrum/files/app/electrum/gui/qml/components/SweepDialog.qml:123: TypeError: Property 'close' of object QEQRScanner(0xdd32f66fb600)
is not a function
```

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

This is a tiny user-interface fix for the Electrum mobile app's QR-code scanner. A QML screen was trying to call a 'close' method that did not exist, causing a harmless JavaScript type error in the log. The developer added an empty 'close' method so the call succeeds and no error is printed. There is no security issue here.

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.

Lower-priorityAddressSynchronizer: remove unneccessary loopby f321x · 72f083d2 · Jan 7, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · f321x

AddressSynchronizer: remove unneccessary loop

This loop seems like a leftover that is not useful anymore, clearing the
cache once has the same effect.

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

This is a minor code cleanup in Electrum's transaction handling. A developer removed a redundant loop that was calling the same cache-clearing function multiple times, replacing it with a single call. There is no security issue visible in the change.

Lower-priorityhw plugins: coldcard: fix compat with ckcc-protocol v1.5.0by SomberNight · 2172dadf · Jan 5, 2026 · 1 fileMessage 73 · AdequateInformational 18Details
Commit message · SomberNight

hw plugins: coldcard: fix compat with ckcc-protocol v1.5.0

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

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 18/100

This is a small compatibility fix for Electrum's Coldcard hardware wallet plugin. A newer version of the underlying Coldcard communication library (ckcc-protocol v1.5.0) renamed a constant used to locate the Coldcard simulator. Electrum now tries the new name first and falls back to the old name, so the plugin works with both old and new library versions. There is no indication this is a security vulnerability or that it introduces one.

Lower-priorityhw plugins: coldcard: log error when I forget to set udev rulesby SomberNight · f1f4fc09 · Jan 5, 2026 · 1 fileMessage 77 · AdequateInformational 16Details
Commit message · SomberNight

hw plugins: coldcard: log error when I forget to set udev rules

so that next time I check that before changing cables, usb hubs, and VMs o.O

77/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Explains rationale or failure mode
AI analysis · Informational 16/100

This commit only adds a more helpful error message when the Coldcard hardware wallet cannot be opened because of missing Linux USB device permissions (udev rules). It does not change any security behavior, permissions, or access controls; it simply logs a hint before re-raising the same error.

Lower-prioritytests: rm some more dead codeby SomberNight · 92772414 · Jan 5, 2026 · 1 fileMessage 55 · ThinInformational 15Details
Commit message · SomberNight

tests: rm some more dead code

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

This commit simply removes an unused helper function from a test file. It does not change any production code, user-facing behavior, or security-sensitive logic. There is no security issue here.

Lower-prioritytests: properly clean-up MockLNWallets after tests finishby SomberNight · 0afd433c · Jan 5, 2026 · 4 filesMessage 60 · AdequateInformational 14Details
Commit message · SomberNight

tests: properly clean-up MockLNWallets after tests finish

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 14/100

This commit only changes the project's internal unit tests. It makes test-only mock Lightning wallets get created and cleaned up in a more centralized way so temporary files and background tasks are reliably removed after each test. There is no change to the actual Electrum wallet or Lightning code that end users run, so this does not affect real-world security.