EL
← All projectsElectrum

Electrum

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

BitcoinSoftware walletsNormal
Repository coverage

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

65security candidates205second-pass queue280AI analyses
57commits · 30 days
111commits · 60 days
457commits · 180 days
926commits · 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
192Strong · 80–100
410Adequate · 60–79
286Thin · 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.
ThomasV72219156
SomberNight35126114063
f321x37121104070
Sander van Grieken981030057
user322062
Roman Zeyde512053
Sasha Zykov413076
Aaron Fiore411068
Ferdinando Ametrano111096
Felix200075
Oren201043
Ilya Artemov200050
Analysis record

Published AI watches

Last scanned 9 minutes ago

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
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 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
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
Informational 15 AI analysisMessage 35 · Opaque
EL ElectrumElectrum BitcoinSoftware wallets

hww/qt: followup 898a4c270

This commit simply renames an internal variable from `dialog_label` to `_dialog_label` to mark it as private. It is a minor code cleanup with no visible behavior change and no security relevance.

f3af41deby f321x+4−41 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
Informational 12 AI analysisMessage 83 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

test_lnwallet: add unittest for unchanged channel update from failed htlc

This commit only adds a new unit test to Electrum's Lightning wallet test suite. It checks that when a payment fails due to a temporary lack of liquidity (TEMPORARY_CHANNEL_FAILURE) and the accompanying channel policy update is identical t…

Lightning payment routing failure handling behavior is being testedTEMPORARY_CHANNEL_FAILURE no longer (or is confirmed not to) blacklist channels when the channel update is unchangedLiquidity hints are used as an alternative to blacklisting for retry amounts
1f5b9adbby f321x+61−21 file
No security note in commit
Informational 15 AI analysisMessage 83 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

test_lnwallet: add unittest for single channel mpp split config

This commit adds a new automated test to the Electrum project. It does not change any production wallet or Lightning code. The test verifies that when Electrum splits a multi-part payment across a single channel, all payment parts actually…

14f7fa0bby f321x+22−01 file
No security note in commit
Low 47 AI analysisMessage 80 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

json_db: set_modified after incomplete data

This commit fixes a bug in Electrum's wallet storage recovery. If a wallet file was partially corrupted (a 'patch' was cut off mid-write), the app could recover the old data but then fail to mark the wallet as changed. As a result, later u…

Data-loss / integrity failure in wallet storage recovery pathMissing dirty flag after fallback data recoveryAppend-only storage file not rewritten after corruption cleanup
f75f1958by f321x+22−12 files
No security note in commit
Low 44 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet_db: register onion_keys converter

This commit fixes a bug in Electrum's Lightning wallet database handling. After a wallet restart, a specific type of encryption key used in Lightning payments was being loaded as a text string instead of raw bytes. This mismatch could caus…

Type confusion between str and bytes in cryptographic key handlingLightning payment error path affected after wallet restartMissing data converter in wallet database layer
5b2eb060by f321x+2−02 files
No security note in commit
Informational 18 AI analysisMessage 58 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

qml: update ConfirmTxDialog onValidChanged

This is a small user-interface fix for the Electrum mobile/QML app. When sweeping private keys, the confirmation dialog that shows how much money will be moved initially displayed an amount of 0 because it did not refresh after the transac…

bd776e24by f321x+3−01 file
No security note in commit
Informational 18 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

qml: emit a single dataChanged when updating blockchain height

This change is a performance cleanup in Electrum's mobile/QML user interface. When the wallet learns that the Bitcoin blockchain has grown taller, it now refreshes the transaction list with a single 'everything changed' signal instead of s…

No security-relevant logic changePerformance/efficiency optimization onlyNo input validation, parsing, cryptography, or network changes
fbe9e2d8by f321x+8−41 file
No security note in commit
Informational 20 AI analysisMessage 85 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

qml: don't compute notification balance delta for large tx batches

This commit is a performance fix, not a security patch. It stops the Electrum mobile/QML wallet from calculating the total balance change when more than 20 new transactions arrive at once, because that calculation could freeze the user int…

No security-relevant signal present in the diff or commit messagePerformance/DoS mitigation against accidental UI freezing from large transaction batches
7b4759c5by f321x+5−21 file
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

qml: change event callback logs to debug

This commit simply changes two logging messages from 'info' level to 'debug' level in the mobile/QML wallet interface. It reduces routine log output when many transactions occur. There is no security-relevant change.

a6cc4e08by f321x+2−21 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.

Lower-prioritylnpeer: maybe_send_commitment: impl batching updatesby SomberNight · 7e3af72a · Mar 11, 2026 · 2 filesMessage 50 · ThinTriage 0Details
Commit message · SomberNight

lnpeer: maybe_send_commitment: impl batching updates

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-prioritylnpeer: simplify where maybe_send_commitment() is calledby SomberNight · 93f04524 · Mar 11, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · SomberNight

lnpeer: simplify where maybe_send_commitment() is called

The typical flow of an update is:
---UPDATE--->
--- SIG --->
<--REVACK----
<-- SIG ----
---REVACK--->

It makes sense to try to send a sig ("commitment_signed") right after we send an update.
It also makes sense right after we send revack.

Besides those times, we could call "maybe_send_commitment" at *any* time, that is safe, and depending on other call locations, it might be an optimisation, however it is not needed.

In particular it is unclear why we had those calls when we *receive* updates (and only for certain types of updates - not consistently).

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-priorityUpdate my Electrum server details in servers.jsonby Jochen Hoenicke · e31ce7dc · Mar 10, 2026 · 1 fileMessage 80 · StrongTriage 0Details
Commit message · Jochen Hoenicke

Update my Electrum server details in servers.json

I moved my node to standard port again because the non-standard one was apparently used by malware. I also updated the domain name (both work at the moment, but I prefer the shorter one).

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI review queuedqml: rbf/cancel: fix type errorby f321x · d85985cd · Mar 9, 2026 · 1 fileMessage 68 · AdequateInformational 17Details
Commit message · f321x

qml: rbf/cancel: fix type error

self.oldfeeRate is initialized as int in `QETxRbfFeeBumper` and
`QETxCanceller`. However QML expects it to be a string. Initializing
it as string fixes the exception. Previously this didn't happen as
`Abstract_Wallet.add_info_from_wallet_and_network()` would never
return False, so the `get_tx()` method would immediately overwrite
the self.oldfeeRate variable with a string.

```
20.95 | D | gui.qml.qetxfinalizer | TxMonMixin.__init__
20.95 | E | gui.qml.qeapp.Exception_Hook | exception caught by crash reporter
TypeError: unable to convert a Python 'int' object to a C++ 'QString' instance
```

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

This commit fixes a type mismatch bug in Electrum's mobile/QML user interface. A fee rate value was stored as a number (0) but the QML interface expected text ('0'), causing a crash when certain code paths ran. The fix changes the initial value from a number to a string so the interface no longer crashes. There is no indication this could be used to steal funds or attack users remotely.

Lower-priorityqml: rbf/cancel: abort update if adding tx info failsby f321x · 3d13d478 · Mar 9, 2026 · 1 fileMessage 93 · StrongTriage 0Details
Commit message · f321x

qml: rbf/cancel: abort update if adding tx info fails

Early return the update() methods of QETxRbfFeeBumper and QETxCanceller
if it fails to fetch missing tx information from the Network to prevent
an exception in `Abstract_Wallet.bump_fee()` and
`Abstract_Wallet.dscancel()`. See
https://github.com/spesmilo/electrum/issues/5502#issuecomment-40213084270

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
AI review queuedtransaction: re-raise NetworkException in add_info_from_networkby f321x · e8eee065 · Mar 9, 2026 · 1 fileMessage 81 · StrongInformational 21Details
Commit message · f321x

transaction: re-raise NetworkException in add_info_from_network

`Transaction.add_info_from_network` would swallow a `NetworkException`
even when `ignore_network_issues=False` is passed.
This causes `Transaction.add_info_from_wallet_and_network` to
incorrectly return True even if the operation failed.
If `QETxRbfFeeBumper` then incorrectly proceeds assuming the call was
successful `Abstract_Wallet.bump_fee()` would raise an `Exception("tx
missing info from network")`.
Should fix the traceback in
https://github.com/spesmilo/electrum/issues/5502#issuecomment-4021308427.

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

This is a bug-fix patch for the Electrum Bitcoin wallet. It corrects a logic error where a network failure was being silently swallowed instead of being reported, which could cause the wallet's fee-bumping feature to crash later with a confusing error. There is no indication this allows theft, remote code execution, or unauthorized access; it is a reliability and user-experience fix.

Lower-priorityplugin: nwc: lookup_invoice: fix exc, include b11by f321x · f64923b4 · Mar 6, 2026 · 1 fileMessage 76 · AdequateTriage 0Details
Commit message · f321x

plugin: nwc: lookup_invoice: fix exc, include b11

Fixes exception in lookup_invoice:
```
62.69 | E | plugins.nwc.nwcserver.NWCServer | Error handling nwc request
Traceback (most recent call last):
File "/home/user/code/vibecoding_vm/electrum/electrum/plugins/nwc/nwcserver.py", line 381, in run_request_task
await task
File "/home/user/code/vibecoding_vm/electrum/electrum/util.py", line 1211, in wrapper
return await func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/code/vibecoding_vm/electrum/electrum/plugins/nwc/nwcserver.py", line 526, in handle_lookup_invoice
info = self.wallet.lnworker.get_payment_info(invoice.payment_hash, direction=RECEIVED)
^^^^^^^^^^^^^^^^^^^^
AttributeError: 'Invoice' object has no attribute 'payment_hash'
```

Always includes bolt11 invoice in response, even if the client already
sent it to us in the request. It doesn't seem useful and is marked
optional in the spec but https://sandbox.albylabs.com considers the
response invalid if the invoice is not included.

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Lower-priorityplugin: nwc: consider inflight htlcs in get_payment_infoby f321x · f53203d1 · Mar 6, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · f321x

plugin: nwc: consider inflight htlcs in get_payment_info

Also consider htlcs that are still inflight when calculating
the amount/fee of a payment to prevent calculating an incorrect
payment value/fee when calling get_payment_info directly after
a payment succeeds (one htlc settled, but others could still be
inflight).
This assumes that once a payments htlc got settled all other inflight
htlcs will also get settled.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-priorityplugin: nwc: add update timer to connection listby f321x · 9b4d4d61 · Mar 6, 2026 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · f321x

plugin: nwc: add update timer to connection list

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-priorityplugin: nwc: consider routing fees for payment budgetby f321x · 8ccdc3f7 · Mar 6, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · f321x

plugin: nwc: consider routing fees for payment budget

Include the lightning routing fees into the payment budget accounting
to prevent untrusted nwc clients from exceeding the budget by crafting
a high fee route.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-priorityplugin: nwc: unify budget_allows_spend and add_to_budgetby f321x · 8dddb5d5 · Mar 6, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · f321x

plugin: nwc: unify budget_allows_spend and add_to_budget

There is now only add_to_budget which will return None if the budget
doesn't allow for this spend. It will always add the spend to the
budget, even if the user has no budget so it can be used for display
purposes (and simpler code, only one path).

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritytest_lnpeer: factorize test_reestablish_replay_messagesby ThomasV · e309f89a · Mar 6, 2026 · 1 fileMessage 40 · ThinTriage 0Details
Commit message · ThomasV

test_lnpeer: factorize test_reestablish_replay_messages

40/100 · ThinMessage clarity
✓ Specific, descriptive subject! No meaningful explanatory body
AI review queuedtests: lnpeer: make mpp_cleanup_after_expiry more robustby SomberNight · db003257 · Mar 4, 2026 · 1 fileMessage 95 · StrongInformational 15Details
Commit message · SomberNight

tests: lnpeer: make mpp_cleanup_after_expiry more robust

As there are two htlcs, the `alice_htlc_resolved` Event might get set either once or twice by the time `alice_htlc_resolved.wait()` returns. The previous code was assuming that both htlcs are resolved by then, but it could happen that only one htlc was resolved, due to timing.

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

This commit only changes a test file. It makes an existing automated test more reliable by waiting for both payment parts to finish before checking the result, instead of assuming both finished at once. There is no change to the actual Electrum wallet or Lightning code that users run.

Security candidateqt: perform 'fully spend' action with coin selection, keep separate from coin control when doing action.by Sander van Grieken · 48916f56 · Mar 3, 2026 · 4 filesMessage 85 · StrongInformational 22Details
Commit message · Sander van Grieken

qt: perform 'fully spend' action with coin selection, keep separate from coin control when doing action.

Also stop timer when dialog is finished, to avoid re-generating txs with the same input coin set, which
results in an exception as these coins have signatures when the swap has started.

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 boundary
AI analysis · Informational 22/100

This commit fixes a user-interface bug in the Electrum Bitcoin wallet's Qt desktop client. Previously, when a user chose to 'fully spend' selected coins to open a Lightning channel or perform a submarine swap, the wallet used the global 'coin control' setting to remember the coin selection. That caused the selected coins to remain locked in coin control after the dialog closed, and a background timer could keep re-creating transactions with the same already-signed coins, leading to an exception. The change passes the selected coins directly to the relevant dialogs instead of relying on coin control, and stops the timer when the dialog finishes. It is a reliability/usability fix rather than a remote-exploitable security vulnerability.

Lower-priorityqt: utxo_list: add asserts to helper methods that coins are selectedby SomberNight · 4c27b8de · Mar 3, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · SomberNight

qt: utxo_list: add asserts to helper methods that coins are selected

- otherwise they default to selecting all coins, which is unlikely to be what the user intends
- prev commit makes sure this should never happen

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-priorityplugin: nwc: bump version to 0.0.2by f321x · 835ab39d · Mar 3, 2026 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · f321x

plugin: nwc: bump version to 0.0.2

these changes deserve a new version

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-priorityplugin: nwc: add 'state' field to responsesby f321x · ea1e2c82 · Mar 3, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · f321x

plugin: nwc: add 'state' field to responses

NIP-47 got extended to include an optional 'state' field in responses.
Implementing this acutally fixes an issue of Alby Go showing succeeded
payments as failed that appeared recently.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityplugin: nwc: improved budget accountingby f321x · 52223740 · Mar 3, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · f321x

plugin: nwc: improved budget accounting

Increase the payment budget before attempting the payment
and decrease again if the payment fails. This prevents a race
where multiple concurrent payments could pass the budget check
before the budget is incremented through any of the other payments.

A lock around the budget is not suitable either as then one long
stuck payment (hold invoice) would render the budget inaccessible for
all other payment attempts.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI review queuedplugin: nwc: do budget accounting in msatby f321x · 3956bff0 · Mar 3, 2026 · 3 filesMessage 80 · StrongLow 48Details
Commit message · f321x

plugin: nwc: do budget accounting in msat

Keep track of the spent amount in msat instead of sat to prevent
issues due to rounding.
The budget is still specified in sat.

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 · Low 48/100

This commit fixes a rounding bug in Electrum's NWC (Nostr Wallet Connect) plugin. The plugin lets users set a daily spending limit in satoshis, but it was internally tracking spent amounts in whole satoshis. Because Lightning invoices are priced in millisatoshis (one-thousandth of a satoshi), rounding down to satoshis could let a user or service spend slightly more than the intended daily limit over many small payments. The patch now tracks the budget in millisatoshis and converts the limit to millisatoshis for comparison, closing the rounding gap. It also migrates existing saved budget data from satoshis to millisatoshis.

Lower-priorityqt: MyTreeView: close menu if its context changesby f321x · 423cc678 · Mar 3, 2026 · 8 filesMessage 88 · StrongTriage 0Details
Commit message · f321x

qt: MyTreeView: close menu if its context changes

Stores the currently open (right-click) menu in MyTreeView
and adds a `close_menu()` method so inheritants can cleanly
close the menu again if the context it was opened upon has changed.

This is utilized by `AddressList` and `UTXOList` to close the menu
if a call to `update()` has chenged the address list in some way or
removed a utxo from the list to prevent the user from trying to use
a utxo that doesn't exist anymore.

Fixes #10464

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
AI review queuedcommon_qt: move QtEventListener and qt_event_listener decorator to common_qtby Sander van Grieken · 91efb3e1 · Mar 3, 2026 · 24 filesMessage 50 · ThinInformational 15Details
Commit message · Sander van Grieken

common_qt: move QtEventListener and qt_event_listener decorator to common_qt

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

This commit is a straightforward internal code cleanup: it moves two shared pieces of Qt GUI plumbing (QtEventListener and the qt_event_listener decorator) from separate QML and Qt GUI utility files into a single common_qt utility file, then updates all the import statements across the project. There is no change to user-facing behavior, no bug fix, and no security-related change.

Lower-priorityplugin: nwc: handle encryption scheme signalingby f321x · 0dc08fdf · Mar 3, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · f321x

plugin: nwc: handle encryption scheme signaling

NIP-47 now defines how client/server should communicate their supported
encryption schemes. For backwards compatibility its not strictly
neccessary to implement this but it seems cleaner to explicitly handle
it.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityplugin: nwc: remove multi_pay_invoice rpcby f321x · 4c703ea2 · Mar 3, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · f321x

plugin: nwc: remove multi_pay_invoice rpc

It got removed from the spec so we don't need to support it anymore.
https://github.com/nostr-protocol/nips/pull/2210

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
AI review queuedwallet_db: convert PaymentInfo amounts from 0 to Noneby SomberNight · fe5cb09e · Mar 2, 2026 · 4 filesMessage 93 · StrongInformational 22Details
Commit message · SomberNight

wallet_db: convert PaymentInfo amounts from 0 to None

When creating a "zero-amount" payment request, currently we save a PaymentInfo with a "None" amount.
I think there were a few releases in 2023 that saved PaymentInfos with a `0` amount instead. This was changed in #8659 [0], but as said there [1], a DB upgrade was not done.
Now an assert added in [2] is failing due to this inconsistency, for affected old wallets.
- I think to trigger that, one needs a wallet that has a payment request (with a `0` amount) created around that time, which is still unpaid.

This patch tries to restore consistency by enforcing None amounts.

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

[0]: https://github.com/spesmilo/electrum/pull/8659
[1]: https://github.com/spesmilo/electrum/pull/8659#issuecomment-1777101285
[2]: https://github.com/spesmilo/electrum/commit/286fc4b86e4d23cb9af15b9061b3d709e7592bcb

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

This commit fixes a wallet-crash bug, not a security vulnerability. Some older Electrum wallets created 'zero-amount' Lightning payment requests in 2023 that were stored with an amount of 0 instead of the special 'no amount' marker (None). A later code change added a rule that received payment amounts cannot be 0, causing those older wallets to crash or fail to open. The patch converts the stored 0 values back to None during wallet database upgrade and prevents new 0 values from being created.

Lower-priorityqt: utxo_list: only enable 'fully spend...' menu if there are unfrozen coins in the selection.by Sander van Grieken · f3ba25df · Mar 2, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · Sander van Grieken

qt: utxo_list: only enable 'fully spend...' menu if there are unfrozen coins in the selection.

otherwise, when selecting only frozen coins, the set of usable coins is empty, and the menu options
will instead fall back to using ALL coins without informing the user.

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