EL
← All projectsElectrum

Electrum

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

BitcoinSoftware walletsNormal
Repository coverage

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

64security candidates205second-pass queue27AI analyses
55commits · 30 days
108commits · 60 days
454commits · 180 days
924commits · 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
191Strong · 80–100
409Adequate · 60–79
285Thin · 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.
SomberNight3492510063
f321x3712110070
Sander van Grieken98103057
ThomasV7220056
user322062
Roman Zeyde510053
Sasha Zykov411076
Aaron Fiore410068
Ferdinando Ametrano111096
Oren200043
Ilya Artemov200050
Felipe Micaroni Lalli100050
Analysis record

Published AI watches

Last scanned 1 hour, 2 minutes ago

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 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 25 AI analysisMessage 68 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

trezor: drop session after closing it

This commit fixes a bug in Electrum's support for Trezor hardware wallets. After a Trezor session times out or is closed, Electrum now forgets the old session ID. Previously it kept the stale session ID, so the next attempt to sign a trans…

Fixes a stale-session reference that caused InvalidSessionError on re-authenticationEnsures PIN re-prompt after session timeout/closureFailure mode was denial-of-service (transaction signing crash), not unauthorized signing
071b1e24by f321x+8−51 file
No security note in commit
Low 42 AI analysisMessage 85 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

wallet.check_sighash: don't assume tx.add_info_from_wallet alrdy ran

This commit fixes a defensive check in the Electrum Bitcoin wallet. Before signing a transaction, Electrum checks whether the transaction uses unusual 'sighash' flags that could allow someone else to move coins unexpectedly. The bug was th…

Sighash sanity check could be bypassed for beyond-gap-limit wallet inputsFix adds defensive deep-copy and wallet-info population inside check_sighashRegression test demonstrates dangerous sighash is now caught even with gap_limit=2
b57327fbby SomberNight+48−02 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

hw_wallet/qt: reuse device message dialog across button requests

This commit is a user-interface performance and polish fix for Electrum's hardware wallet integration. It stops the app from destroying and recreating the same on-screen prompt every time a hardware wallet asks the user to confirm a transa…

898a4c27by Sasha Zykov+15−11 file
No security note in commit
Moderate 55 AI analysisMessage 68 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

lnpeer: on_ping: drain out-socket buffer

This change fixes a potential denial-of-service weakness in Electrum's Lightning network peer handling. Previously, when Electrum replied to a peer's 'ping' message, it would add the reply to the outgoing socket buffer without waiting to c…

memory exhaustion / DoS mitigationunbounded outbound buffer growth preventedbackpressure added to peer ping/pong handling
9b206576by SomberNight+6−12 files
Vendor flagged security relevance
Low 25 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

qml: add workarounds for issue assigning custom types to QObject properties

This commit changes how the Electrum mobile/desktop QML GUI passes custom data objects between Python and the user interface. It switches many typed properties to the generic QVariant/'var' type and adds runtime type checks (asserts) in Py…

Type system relaxation: custom typed QML/Python properties changed to generic QVariant/varRuntime type enforcement added via assert statements in Python settersNo explicit security framing in commit message or diff
9772a6d5by Sander van Grieken+86−5924 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

qml: styling updates qt6.10

This commit is a routine user-interface refresh for Electrum's mobile/desktop QML app, adjusting colors, spacing, button containers, and placeholder text to match newer Qt 6.10 styling. There is no security-relevant change and no indicatio…

cdb5c0b8by Sander van Grieken+209−17540 files
No security note in commit
Informational 15 AI analysisMessage 35 · Opaque
EL ElectrumElectrum BitcoinSoftware wallets

qml: additional styling updates

This commit is purely a user-interface styling refresh for Electrum's QML (mobile/desktop) GUI. It swaps some visual components (highlight panes, button containers, padding, colors) and introduces a new shared 'DialogHighlightPane' control…

28f744f7by Sander van Grieken+136−8525 files
No security note in commit
Moderate 62 AI analysisMessage 93 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

verifier.py: fix CVE-2012-2459: reject left-sibling duplicates

This commit fixes a known Bitcoin weakness (CVE-2012-2459) in Electrum's light-client verification. Because Bitcoin's Merkle tree duplicates the last hash when a level has an odd number of items, an attacker can craft a block proof that ma…

Fixes CVE-2012-2459 (Merkle tree duplicate-node weakness)Adds explicit LeftSiblingDuplicate exceptionStrengthens SPV Merkle proof verification
3d390742by SomberNight+106−262 files
Vendor flagged security relevance
Moderate 62 AI analysisMessage 78 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

in GUI mode, only start a limited minimal RPC server

This commit reduces the attack surface of Electrum's built-in remote-control server when running in normal GUI mode. Previously, the RPC server exposed many wallet-related commands; now, in GUI mode on mainnet, it only exposes two safe com…

Reduction of RPC attack surface in GUI modeUnencrypted localhost RPC with config-stored passwordWindows localhost TCP exposure of RPC server
d951a3d2by SomberNight+22−102 files
Vendor flagged security relevance
Low 37 AI analysisMessage 97 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

fix: remove negative fee assert from get_tx_fee_warning

This commit removes a hard crash (assertion) in Electrum's wallet code when a user loads a partially-signed Bitcoin transaction (PSBT) whose calculated fee is negative. Instead of crashing, Electrum now logs a warning and continues. A nega…

assertion replaced with warning lognegative transaction fee handlingPSBT loading robustness
06490657by f321x+2−11 file
No security note in commit
Informational 15 AI analysisMessage 65 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

transaction: use dummy DER ECDSA sig from descriptor.py

This commit is a minor code cleanup. It replaces a locally-defined placeholder fake cryptographic signature with a shared constant from another file. The placeholder is only used to estimate transaction size and is never broadcast or used …

e9ac3e93by f321x+2−31 file
No security note in commit
Low 37 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

wallet: rbf: estimate base tx size before stripping

This commit fixes a fee-calculation bug in Electrum's Replace-By-Fee (RBF) feature. Previously, the wallet estimated the size of the original transaction after removing its signatures. Because removing signatures makes the transaction look…

Fee estimation accuracy bug in RBF pathTransaction size computed after signature strippingPotential replacement transaction rejected due to insufficient fee
a9f20e4dby f321x+7−61 file
No security note in commit
Informational 15 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

locale: don't translate string "Electrum", "BIP39"

This commit removes translation markers from two proper names ('Electrum' and 'BIP39') in a wallet setup wizard dropdown. It is a localization/UI consistency fix with no security relevance.

cf259909by SomberNight+2−21 file
No security note in commit
Informational 18 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

locale: don't translate URL, like wtf

This commit removes translation markup from a hardcoded web link in Electrum's 'About' screen. The developer's message warns that translation functions can be risky because malicious or compromised translators could alter URLs or inject ha…

Removal of translation wrapper from rich-text URLDeveloper note explicitly flags _()/qsTr() as potential attack vectorsRichText + external URL opening in QML component
61a6ab1dby SomberNight+1−11 file
Vendor flagged security relevance
Moderate 59 AI analysisMessage 65 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

qml: require authentication for message signing

This commit fixes a security gap in Electrum's mobile-style QML user interface. Previously, signing a message with one of your wallet's private keys did not ask for the user's payment authentication (PIN/password/biometric). Now it does. M…

Adds authentication gate (@auth_protect) to cryptographic signing operationChanges synchronous return to asynchronous signal to accommodate auth promptProtects private-key operation in QML GUI previously lacking re-authentication
5d314012by f321x+13−42 files
Vendor flagged security relevance
Low 45 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

qml: remove pin code authentication

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/passwo…

Removal of custom 6-digit PIN UI and storage (CONFIG_PIN_CODE)Replacement with Android system biometric/device-credential authenticationMinimum Android SDK raised from API 29 (Q) to API 30 (R)
47efb8b1by user+177−28411 files
No security note in commit
Low 35 AI analysisMessage 55 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

android: implement biometric authentication

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 …

New Android permission USE_BIOMETRIC addedNew Java activity handling biometric crypto operationsWallet password encrypted at rest using two-layer AES encryption
5dd3dda2by user+557−3510 files
No security note in commit
Informational 15 AI analysisMessage 85 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

psbt_nostr: add EventListener comment to CosignerWallet

This commit only adds two explanatory comments to the code. It does not change any behavior, fix any bug, or alter any security mechanism. One comment clarifies that child classes of CosignerWallet must inherit from EventListener and regis…

e033a5e6by f321x+2−11 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 queuedMerge pull request #10791 from SomberNight/202608_wallet_sign_message2by ghost43 · b1aa52d7 · Aug 3, 2026 · 5 filesMessage 73 · AdequateTriage 0Details
Commit message · ghost43

Merge pull request #10791 from SomberNight/202608_wallet_sign_message2

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

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 pathmerge-commit duplicate discountsecond-pass: security-sensitive path
Security candidatewallet: sign_message: strip whitespaces in GUIs, do not strip in CLIby SomberNight · 4c3064f5 · Aug 3, 2026 · 5 filesMessage 96 · StrongInformational 19Details
Commit message · SomberNight

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

- stripping whitespaces leads to better UX for GUIs IMO, but it's counter-productive for CLI
- our previous behaviour was unintentionally inconsistent:
- qt stripped the message in both sign and verify
- qml stripped the message in verify but not in sign (until #10787)
- cli stripped the message in both sign and verify
- qml also stripped the signature in verify, which was not done anywhere else
- now this code is de-duped, and the default becomes stripping both message and signature; with the CLI explicitly opting out of that

ref https://github.com/spesmilo/electrum/issues/4327
closes https://github.com/spesmilo/electrum/pull/10787
closes https://github.com/spesmilo/electrum/pull/10788

96/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✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 19/100

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 inconsistently—some trimmed spaces automatically, others did not. The change moves the trimming into the shared wallet code and makes it the default for GUIs, while the command-line tool now explicitly keeps spaces untouched. It is a user-experience and consistency fix, not a patch for an active security vulnerability.

AI review queuedwallet: decrypt_message: nicer error msg if pubkey is unrelatedby SomberNight · 92e938f4 · Aug 3, 2026 · 1 fileMessage 50 · ThinTriage 12Details
Commit message · SomberNight

wallet: decrypt_message: nicer error msg if pubkey is unrelated

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
Lower-priorityqt: main_window: use TaskThread for each of sign/verify/encrypt/decryptby SomberNight · 4a9a199f · Aug 3, 2026 · 1 fileMessage 83 · StrongTriage 0Details
Commit message · SomberNight

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

To make them homogeneous.
Also note: window.on_error handles UserFacingException, which the wallet methods can now raise.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI review queuedwallet: sign_message: force kwargsby SomberNight · e1eb2a34 · Aug 3, 2026 · 4 filesMessage 35 · OpaqueTriage 12Details
Commit message · SomberNight

wallet: sign_message: force kwargs

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 review queuedwallet: sign_message: consolidate checks from UIsby SomberNight · 48893760 · Aug 3, 2026 · 6 filesMessage 45 · ThinTriage 12Details
Commit message · SomberNight

wallet: sign_message: consolidate checks from UIs

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 review queuedwallet: decrypt_message: consolidate checks from UIsby SomberNight · 9a0cc0d6 · Aug 3, 2026 · 3 filesMessage 50 · ThinTriage 12Details
Commit message · SomberNight

wallet: decrypt_message: consolidate checks from UIs

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 review queuedwallet: refactor: add encrypt_message method, consolidated from UIsby SomberNight · 5e9c8df0 · Aug 3, 2026 · 3 filesMessage 50 · ThinTriage 12Details
Commit message · SomberNight

wallet: refactor: add encrypt_message method, consolidated from UIs

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 review queuedwallet: refactor: add verify_message method, consolidated from UIsby SomberNight · ff5bbb04 · Aug 3, 2026 · 4 filesMessage 50 · ThinTriage 12Details
Commit message · SomberNight

wallet: refactor: add verify_message method, consolidated from UIs

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
Lower-priorityqt: main_window: add type hints to sign/verify, encrypt/decryptby SomberNight · 0906fc20 · Aug 3, 2026 · 1 fileMessage 60 · AdequateTriage 0Details
Commit message · SomberNight

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

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Lower-prioritycoldcard: fix get_soft_device_id() discarding its return valueby Felipe Micaroni Lalli · d7500508 · Aug 2, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · Felipe Micaroni Lalli

coldcard: fix get_soft_device_id() discarding its return value

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Security candidateqml: strip whitespace from message before signing, as in qt guiby Ferdinando Ametrano · 72507328 · Aug 1, 2026 · 1 fileMessage 96 · StrongInformational 19Details
Commit message · Ferdinando Ametrano

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

The qt gui strips leading/trailing whitespace from the message (and
address) both when signing and when verifying (see #4327). The qml gui
already strips in verifyMessage (qedaemon.py), but not in signMessage:
a message with leading/trailing whitespace signed in the qml gui would
produce a signature that fails verification even in the same dialog.

Strip in signMessage too, replicating the qt gui behaviour.

related: https://github.com/spesmilo/electrum/issues/4327
related: https://github.com/btclib-org/btclib/issues/200

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

96/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✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarydefensive validationsigning or wallet path
AI analysis · Informational 19/100

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 interface already did. Without this fix, a message signed in the QML interface could fail verification because of stray whitespace. It is a usability/reliability fix, not a serious security vulnerability.

Lower-priorityconfig: don't save "hidden wallet" paths in CURRENT_WALLET cvby SomberNight · c43cf8e4 · Jul 30, 2026 · 3 filesMessage 85 · StrongTriage 0Details
Commit message · SomberNight

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

otherwise if the android app is launched and the last opened wallet was a hidden wallet, it would get automatically opened

similarly, don't add it into the recents list (though that's not exposed in qml atm)

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-prioritylnrouter: liquidity hints: add extra penalty if amt near cannot_sendby SomberNight · ee75ea31 · Jul 30, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · SomberNight

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

We guide LNPathFinder away from channels where there is a known cannot_send amount just barely above the HTLC value.

Somewhat follows 6a97e74ce82b9e2055b1ccf31f43288c9becfa02, as before that commit, we were often (unintentionally) blacklisting chans with liquidity failures but now we allow retrying them.
Without current change, the liqudity-based penalty would disallow sending an HTLC over the the known "cannot_send" but it would basically not distinguish between 0.999*cannot_send and 0. Instead, just as a completely naive bandaid, I propose penalising HTLC values greater than 80% of the known cannot_send.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI review queuedlnwallet: don't blacklist htlc failures without channel updateby f321x · a865e336 · Jul 30, 2026 · 2 filesMessage 93 · StrongTriage 12Details
Commit message · f321x

lnwallet: don't blacklist htlc failures without channel update

The lightning spec changed so that htlc failures don't have to include
a channel_update message anymore (https://github.com/lightning/bolts/pull/1173).
We shouldn't blacklist a channel for not including a channel_update
if the error code signals a liquidity issue (TEMPORARY_CHANNEL_FAILURE), instead
it is sufficient to just record the liquidity hint and try with a smaller
part.

93/100 · StrongMessage clarity
✓ Specific, 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
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedhww/qt: followup 898a4c270by f321x · f3af41de · Jul 30, 2026 · 1 fileMessage 35 · OpaqueTriage 12Details
Commit message · f321x

hww/qt: followup 898a4c270

Also make the other attribute private

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
Security candidatetrezor: drop session after closing itby f321x · 071b1e24 · Jul 30, 2026 · 1 fileMessage 68 · AdequateLow 25Details
Commit message · f321x

trezor: drop session after closing it

Set `TrezorClientBase._session = None` after closing a session
(e.g. after session timeout) so the next session access will prompt
for the pin on the device instead of throwing an `InvalidSessionError`
when trying to access the device.

E.g. when trying to sign a tx after the session timed out:
```
80.64 | I | plugins.trezor.clientbase.TrezorClientBase | timed out
80.64 | I | plugins.trezor.clientbase.TrezorClientBase | clear session: <electrum.plugins.trezor.clientbase.TrezorClientBase object at 0x7f24cd34f080>
80.64 | I | plugins.trezor.clientbase.TrezorClientBase | locking: <trezorlib.protocol_v1.TrezorClientV1 object at 0x7f24cd34e160>
80.90 | I | plugins.trezor.clientbase.TrezorClientBase | closing: SessionV1(id=d5e6015e501acf4b10b3a3e50f1f9307768e434330568e7d5e7b1babed066438)
112.83 | I | plugin.DeviceMgr | getting client for keystore
112.83 | I | plugin.DeviceMgr | end client for keystore
113.10 | I | plugin.DeviceMgr | getting client for keystore
113.10 | I | plugin.DeviceMgr | end client for keystore
113.11 | E | gui.qt.main_window.[trezor] | on_error
Traceback (most recent call last):
File "/var/home/user/code/code_vm/electrum/electrum/gui/common_qt/util.py", line 165, in run
result = task.task()
File "/var/home/user/code/code_vm/electrum/electrum/wallet.py", line 2822, in sign_transaction
k.sign_transaction(tmp_tx, password)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "/var/home/user/code/code_vm/electrum/electrum/plugins/trezor/trezor.py", line 100, in sign_transaction
self.plugin.sign_transaction(self, tx, prev_tx)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "/var/home/user/code/code_vm/electrum/electrum/plugin.py", line 1000, in wrapper
return run_in_hwd_thread(partial(func, *args, **kwargs))
File "/var/home/user/code/code_vm/electrum/electrum/plugin.py", line 993, in run_in_hwd_thread
return fut.result()
~~~~~~~~~~^^
File "/usr/lib64/python3.14/concurrent/futures/_base.py", line 454, in result
return self.__get_result()
~~~~~~~~~~~~~~~~~^^
File "/usr/lib64/python3.14/concurrent/futures/_base.py", line 396, in __get_result
raise self._exception
File "/usr/lib64/python3.14/concurrent/futures/thread.py", line 86, in run
result = ctx.run(self.task)
File "/usr/lib64/python3.14/concurrent/futures/thread.py", line 73, in run
return fn(*args, **kwargs)
File "/var/home/user/code/code_vm/electrum/electrum/plugins/trezor/trezor.py", line 344, in sign_transaction
signatures, _ = client.sign_tx(self.get_coin_name(),
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
inputs, outputs,
^^^^^^^^^^^^^^^^
...<3 lines>...
serialize=False,
^^^^^^^^^^^^^^^^
prev_txes=prev_tx)
^^^^^^^^^^^^^^^^^^
File "/var/home/user/code/code_vm/electrum/electrum/plugin.py", line 1000, in wrapper
return run_in_hwd_thread(partial(func, *args, **kwargs))
File "/var/home/user/code/code_vm/electrum/electrum/plugin.py", line 990, in run_in_hwd_thread
return func()
File "/var/home/user/code/code_vm/electrum/electrum/plugins/trezor/clientbase.py", line 356, in sign_tx
return trezorlib.btc.sign_tx(self.session, *args, **kwargs)
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/home/user/code/code_vm/electrum/env/lib64/python3.14/site-packages/trezorlib/tools.py", line 379, in wrapper
result = self.func(session, *args, **kwargs)
File "/var/home/user/code/code_vm/electrum/env/lib64/python3.14/site-packages/trezorlib/btc.py", line 329, in sign_tx
res = session.call(signtx, expect=messages.TxRequest)
File "/var/home/user/code/code_vm/electrum/env/lib64/python3.14/site-packages/trezorlib/client.py", line 113, in call
raise exceptions.InvalidSessionError(self.id)
trezorlib.exceptions.InvalidSessionError: b'\xd5\xe6\x01^P\x1a\xcfK\x10\xb3\xa3\xe5\x0f\x1f\x93\x07v\x8eCC0V\x8e}^{\x1b\xab\xed\x06d8'
```

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundaryaccess control
AI analysis · Low 25/100

This commit fixes a bug in Electrum's support for Trezor hardware wallets. After a Trezor session times out or is closed, Electrum now forgets the old session ID. Previously it kept the stale session ID, so the next attempt to sign a transaction would crash with an InvalidSessionError instead of asking the user for their PIN again. It is a usability/reliability fix, not a direct theft-of-funds vulnerability, because the failure mode was a crash rather than an unauthorized transaction.

AI review queuedtest_lnwallet: add unittest for unchanged channel update from failed htlcby f321x · 1f5b9adb · Jul 30, 2026 · 1 fileMessage 83 · StrongTriage 12Details
Commit message · f321x

test_lnwallet: add unittest for unchanged channel update from failed htlc

Tests that a TEMPORARY_CHANNEL_FAILURE whose channel update leaves the
policy unchanged does not blacklist the channel (the liquidity hint is
sufficient), while other failure codes still blacklist.

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
Lower-prioritylnwallet: rename flag in handle_error_code_from_failed_htlcby f321x · 8e3aed1f · Jul 30, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · f321x

lnwallet: rename flag in handle_error_code_from_failed_htlc

As with the previous commit it is not strictly updating anything
when returning (False, True), so calling the second return value
`handled` instead of `updated` might be less misleading.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritylnwallet: don't blacklist chan on unchanged channel updateby f321x · 6a97e74c · Jul 30, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · f321x

lnwallet: don't blacklist chan on unchanged channel update

Stop blacklisting a channel for 1h if they send us a
`TEMPORARY_CHANNEL_FAILURE` containing a channel update we already
know about.

If our channel db is up-to-date it is quite likely they will send
us a channel policy we already know about. However it might just
mean that the htlc we sent exceeds their available liquidity.
For this purpose we already record liquidity hints in `LNPathFinder`
so future attempts through this channel will consider this limitation,
no need to blacklist the whole channel for 1h and render it unusable for us.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritylnrouter: LiquidityHints: add note about thread-safetyby SomberNight · a3bb67b7 · Jul 29, 2026 · 1 fileMessage 65 · AdequateTriage 0Details
Commit message · SomberNight

lnrouter: LiquidityHints: add note about thread-safety

and maybe make reading the LiquidAmounts thread-safe(?) without actually locking

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Lower-prioritylnrouter: (trivial) rename LiquidityHintItem -> LiquidAmountby SomberNight · 0c14d740 · Jul 29, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · SomberNight

lnrouter: (trivial) rename LiquidityHintItem -> LiquidAmount

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-prioritylnrouter: add note about can_pay() false positives for concurrent MPP routesby SomberNight · 82b6602a · Jul 29, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · SomberNight

lnrouter: add note about can_pay() false positives for concurrent MPP routes

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-prioritylnrouter: use separate timestamp per liquidity hint valueby f321x · 03c2b412 · Jul 29, 2026 · 2 filesMessage 85 · StrongTriage 0Details
Commit message · f321x

lnrouter: use separate timestamp per liquidity hint value

Use a separate timestamp for each value in a `LiquidityHint`
instead of a single shared one for all values.

Fixes:
1. We send 1M sat, failure, record cannot_send = 1M
2. Two hours pass, hint expired (shared ts reset)
3. We send 10k, update_can_send resets the shared ts
> cannot_send is active again, even though it is outdated
> We won't try sending >1M sat through the channel until the
process is restarted and the in-memory data is gone.

The setter method comparisons now also use the value from the getter
to prevent an expired larger value from blocking a new smaller one.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-prioritylnrouter: LiquidityHints: add comment to update_liquidity_hintsby SomberNight · c1342d00 · Jul 29, 2026 · 2 filesMessage 50 · ThinTriage 0Details
Commit message · SomberNight

lnrouter: LiquidityHints: add comment to update_liquidity_hints

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