SW
← All projectsStack Wallet

Stack Wallet

Actively maintained multi-coin self-custody wallet with Monero support and on-device keys.

MoneroPrivacy protocolsSoftware walletsNormal
Repository coverage

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

338security candidates411second-pass queue749AI analyses
81commits · 30 days
175commits · 60 days
600commits · 180 days
1008commits · 365 days
Backfill bands
Sep 27 → Mar 31404 seen73 candidatesComplete
Mar 31 → Jul 29463 seen238 candidatesComplete
Jul 29 → Aug 2887 seen8 candidatesComplete
Aug 28 → Sep 2753 seen6 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.

51/100 average clarity
33Strong · 80–100
316Adequate · 60–79
513Thin · 40–59
191Opaque · 0–39
33security 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.
Navid Rahimi1017154
sneurlax339158241062
julian347112269044
Julian19741144043
Dan Miller831525053
Reuben Yap20318052
Cyrix12615211049
julian-CStack222049
levoncrypto24121043
Tritonn204412052
cassandras-lies413048
NyanCatTW1111045
Analysis record

Published AI watches

Last scanned 12 minutes ago

Informational 24 AI analysisMessage 73 · Adequate
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge pull request #1469 from Cyrix126/building_dialog_cancel

This commit fixes a mobile UI bug where pressing Cancel on a 'building transaction' dialog accidentally closed one too many screens. The fix moves the responsibility for closing the dialog into each screen's cancel handler, and prevents er…

No security-relevant signals in the diffUI-only navigation and error-dialog suppression changesNo cryptographic, authentication, authorization, or data-handling changes
94e6da66by Julian+68−8412 files
No security note in commit
Informational 20 AI analysisMessage 50 · Thin
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge branch 'staging' into building_dialog_cancel

This commit is a routine merge from the project's staging branch into a feature branch. The visible code changes fix small UI/UX bugs in Stack Wallet's send screens: clearing an internal address-validation cache when the form is reset, mak…

Clearing stale address-provider state on form reset reduces the risk of stale validation data influencing a subsequent transactionFee-form caching prevents repeated network calls and accidental fee UI flicker/state races on rebuildQR scan buttons are UX additions with no visible parser/validation logic changes
0485b166by Julian+194−56 files
No security note in commit
Informational 17 AI analysisMessage 58 · Thin
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge pull request #1468 from Cyrix126/desktop_fee_form_refetch

This commit fixes a desktop wallet bug where the send-fee form would repeatedly re-fetch fee estimates on every screen rebuild, wasting resources and possibly flickering. It now caches the fee estimate and only retries if the previous fetc…

No security-relevant signals present in diff or commit metadataChange is a UI/UX performance and reliability improvement
62432946by Julian+176−52 files
No security note in commit
Informational 17 AI analysisMessage 50 · Thin
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge branch 'staging' into desktop_fee_form_refetch

This commit merges a feature branch into another work-in-progress branch. It adds QR-code scanning buttons to two desktop token send screens and resets an internal address-validation state variable when the send form is cleared. There is n…

State reset added to clearForm() to avoid stale validation dataNew QR scan entry points in token send flows (UI feature, not a vulnerability signal)
8a72c82fby Julian+18−04 files
No security note in commit
Low 32 AI analysisMessage 73 · Adequate
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge pull request #1467 from Cyrix126/clear_send_form_validity

This change fixes a UI state bug in the cryptocurrency wallet's send form. When a user clears the send form, the app now also resets whether the entered address is considered valid. Without this fix, the form could incorrectly keep showing…

UI state desynchronization between form field and validity indicatorPotential user confusion from stale valid-address stateNo input validation, cryptographic, or network-layer changes
d3383b4eby Julian+2−02 files
No security note in commit
Informational 15 AI analysisMessage 50 · Thin
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge branch 'staging' into clear_send_form_validity

This commit adds a QR code scanner button to two desktop cryptocurrency send forms. It is a straightforward user-interface feature addition with no apparent security relevance.

22560a59by Julian+16−02 files
No security note in commit
Informational 20 AI analysisMessage 73 · Adequate
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge pull request #1466 from Cyrix126/desktop_token_qr_button

This commit adds a missing QR code scan button to two desktop token send screens in the Stack Wallet app. It is a straightforward user-interface fix that restores a feature already present on mobile and other send views; there is no indica…

47f6d369by Julian+16−02 files
No security note in commit
Informational 15 AI analysisMessage 18 · Opaque
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

style: format

This commit is purely a code-formatting cleanup. It changes line breaks and indentation in four user-interface files so the code is easier to read, but it does not change what the app actually does. There is no security relevance.

ae45aba8by Cyrix126+47−524 files
No security note in commit
Informational 23 AI analysisMessage 62 · Adequate
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

fix: stop estimating the desktop fee for a zero amount

This commit fixes a UI bug in the desktop version of Stack Wallet where the send amount could be lost while the app was trying to estimate transaction fees. The fix keeps the amount 'alive' in memory so fee estimation does not accidentally…

State lifecycle issue in UI provider could lead to loss of user inputFix prevents fee estimation from silently resetting send amount to zeroNo cryptographic, authentication, or network security changes present
90c91bdeby Cyrix126+22−02 files
No security note in commit
Low 32 AI analysisMessage 45 · Thin
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

show split tx warning on confirm screen

This commit updates the Stack Wallet app so that when a single payment is broken into multiple cryptocurrency transactions, the user sees a clear warning on the confirmation screen. It also changes the app's internal record-keeping to hand…

UI now warns users when a payment will be split into multiple on-chain transactionsInternal transaction model changed from single txid to list of txidsMultiple confirmation flows updated to iterate over all txids for notes and trade lookups
80343a5aby Julian+376−23916 files
No security note in commit
Informational 18 AI analysisMessage 62 · Adequate
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

fix: stop refetching the desktop fee rates on every rebuild

This commit fixes a performance bug in the desktop version of Stack Wallet where the app repeatedly re-fetched Bitcoin-style fee rates every time the on-screen fee form rebuilt. The change caches the fee result and only fetches again if th…

Unnecessary repeated network requests reducedFuture result cached to avoid re-execution on widget rebuildError path clears cache to allow retry
a1ca9292by Cyrix126+154−52 files
No security note in commit
Low 34 AI analysisMessage 62 · Adequate
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

fix: reset the address validity when clearing the send form

This commit fixes a UI state bug in Stack Wallet's send form. When a user clears the send form, the wallet now also resets whether the entered address is considered valid. Without this fix, the form could incorrectly keep showing an old ad…

Stale UI state after form resetAddress validity not synchronized with address field resetPotential UI confusion leading to incorrect send confirmation
43dd0477by Cyrix126+2−02 files
No security note in commit
Low 35 AI analysisMessage 73 · Adequate
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge pull request #1450 from Ez3kiel-dev/fix/xelis-integration

This is a large feature/fix merge that restores and rewrites the Xelis (XEL) cryptocurrency integration in Stack Wallet. It swaps the old hand-rolled Xelis code for a new generated native interface (XWF), adds wallet restore/backup support…

Send-flow lifecycle hardening: prepared Xelis transactions are now discarded via cancelSend when the user cancels or the widget is disposedSession-generation checks prevent stale wallet handles from being used after close/reopenMutex serialization added around send preparation, balance, history, and rescan operations
ad945d43by Julian+4298−162634 files
No security note in commit
Low 32 AI analysisMessage 45 · Thin
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge branch 'staging' into fix/xelis-integration

This commit is a large merge that mainly adds integration tests for a desktop 'forgot password' reset feature and makes supporting code changes to safely shut down background database workers during that reset. It also removes a large set …

New integration tests exercise a destructive 'forgot password' data-wipe featureTests assert that password store and wallet key store are deleted on successful resetTests assert that wallet files are deleted while backup and tor state are preserved
b0e5d35aby Julian+2678−330378 files
No security note in commit
Informational 19 AI analysisMessage 73 · Adequate
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge pull request #1361 from cypherstack/fix/305-multiline-transaction-notes

This commit lets users type multi-line notes when editing transaction and trade notes, and fixes the desktop layout so long notes scroll instead of breaking the screen. It also swaps the old `mounted` check for the newer `context.mounted` …

5172e63eby Julian+402−1113 files
No security note in commit
Low 32 AI analysisMessage 50 · Thin
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge branch 'staging' into fix/305-multiline-transaction-notes

This commit is a large merge that mainly removes old integration tests and adds new desktop 'forgot password' reset tests. It also adds a safe-shutdown path for background Firo cache workers and databases. The changes look like defensive h…

Added safe shutdown of Firo cache isolates/SQLite databases before reset exitNew integration tests verify desktop forgot-password reset deletes secrets and preserves backupsTest harness intercepts exit() and IOOverrides to observe reset side effects
21491edbby Julian+2352−319075 files
No security note in commit
Moderate 57 AI analysisMessage 73 · Adequate
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge pull request #1455 from cypherstack/fix/desktop-pw-reset

This commit fixes the desktop "forgot password" reset flow in Stack Wallet. It adds integration tests that verify the app can securely wipe its own data when a user forgets the desktop password, and it updates the Firo cache worker to clos…

Desktop password reset now closes Firo cache workers and SQLite databases before deleting app data, reducing the risk of data leakage or corruption during wipeNew integration tests assert that a successful reset removes password store (hive/desktopdata.hive), wallet key store (isar/desktopStore.isar), and wallet files while preserving backups and tor stateFailed reset scenario leaves a .reset-pending marker and removes password/key stores first, preventing the reset from being undone after partial deletion
055e6c6bby Julian+1077−297154 files
No security note in commit
Low 37 AI analysisMessage 45 · Thin
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge branch 'staging' into fix/desktop-pw-reset

This commit is a large merge that mainly adds a new 'prove you own a Spark address' feature to the Stack Wallet app, plus some related fixes. It also updates a dependency that handles SOCKS5 proxy connections and changes how the app decide…

New cryptographic signing path added: SparkInterface.signMessage now delegates to Spark ownership proof creation using the wallet's private key and spark derivation path.Ownership proof code rejects view-only wallets and blank messages, and searches a 100-address lookahead for the requested address before signing.Dependency upgrade: socks5_proxy 1.0.3+dev.3 -> 2.1.1, which may change SOCKS5/Tor proxy behavior; a new test verifies hostname/onion routing through a fake SOCKS server.
d9b5cc02by Julian+1275−21923 files
No security note in commit
Low 34 AI analysisMessage 83 · Strong
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge pull request #1439 from navidR/dev/navidr/spark-name-verification

This commit adds a new feature to Stack Wallet that lets users prove they own a Spark (privacy) address by generating a cryptographic ownership proof. It also improves the sign/verify screens so view-only wallets can still verify proofs, a…

New cryptographic proof generation using private key material (privateKeyHex, spendKeyIndex, diversifier) inside an isolateView-only wallet guard added for proof creation (throws if isViewOnly)Message whitespace now preserved for pasted/typed challenge messages, preventing proof/verification mismatches caused by silent trimming
a5411a50by Julian+1097−16616 files
No security note in commit
Low 39 AI analysisMessage 60 · Adequate
SW Stack WalletStack Wallet MoneroPrivacy protocolsSoftware wallets

Merge branch 'staging' into dev/navidr/spark-name-verification

This commit merges several changes into a development branch. The most notable security-relevant change is a fix for how the Trocador exchange service routes traffic: it now automatically uses Tor (an anonymity network) when the user has T…

Trocador exchange API previously forced clearnet (`isOnion: false`) at every call site, bypassing Tor even when enabledNew `_useTor` getter centralizes Tor routing decision based on app feature flag and user preferenceOnion service address rotated to a new v3 .onion hostname
92955848by Julian+122−507 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.

AI review queuedFix Spark mint fee subtraction edge caseby Reuben Yap · 9bcba7d7 · Apr 27, 2026 · 1 fileMessage 45 · ThinLow 42Details
Commit message · Reuben Yap

Fix Spark mint fee subtraction edge case

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

This commit fixes how transaction fees are subtracted from Spark mint outputs. The old code could mis-handle cases where an output was too small to cover its share of the fee, potentially leaving leftover fees unassigned or removing outputs incorrectly. The new code walks through outputs one by one, recalculating each remaining output's fair share of the fee, and cleanly removes outputs that cannot cover their portion. It also adds a guard to drop the whole input set if every output gets removed because fees exceed the mint amount.

AI review queuedAddress Spark mint review feedbackby Reuben Yap · 653d11a2 · Apr 27, 2026 · 1 fileMessage 45 · ThinLow 41Details
Commit message · Reuben Yap

Address Spark mint review feedback

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

This commit revises how Stack Wallet builds Spark mint transactions. The visible changes fix a fee-rate floor bug, correct a loop that could remove the wrong recipient when outputs are too small, and tighten error handling when signing keys or change addresses are missing. It also replaces an eager key-caching approach with lazy caching. The commit is framed as responding to an external review, but no security incident or CVE is mentioned in the materials provided.

Security candidatechore: dart format feat/shopinbitby sneurlax · ad79b3ec · Apr 27, 2026 · 11 filesMessage 72 · AdequateInformational 15Details
Commit message · sneurlax

chore: dart format feat/shopinbit

`dart format $(git diff --name-only origin/staging...HEAD | grep '\.dart$')`

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
signing or wallet pathauthentication path
AI analysis · Informational 15/100

This commit is purely a code-formatting cleanup. It runs the Dart formatter on several files related to the ShopinBit feature, adjusting line breaks, indentation, and whitespace. No functionality, logic, or security behavior was changed.

Security candidatechore: dart format feat/cakepayby sneurlax · 775c6009 · Apr 27, 2026 · 21 filesMessage 72 · AdequateInformational 15Details
Commit message · sneurlax

chore: dart format feat/cakepay

`dart format $(git diff --name-only origin/staging...HEAD | grep '\.dart$')`

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
signing or wallet pathauthentication path
AI analysis · Informational 15/100

This commit is purely a code-formatting cleanup. It runs the Dart formatter on 21 files related to the CakePay and ShopinBit features, changing only whitespace, line breaks, and indentation. No functionality, logic, or security behavior was altered.

AI review queuedchore: dart format fix/mwcby sneurlax · 4f93355e · Apr 27, 2026 · 2 filesMessage 72 · AdequateInformational 15Details
Commit message · sneurlax

chore: dart format fix/mwc

`dart format $(git diff --name-only origin/staging...HEAD | grep '\.dart$')`

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is purely a code-formatting cleanup. It runs Dart's automatic formatter on two files, adjusting whitespace and line breaks without changing any logic, calculations, or behavior. There is no security issue here.

AI review queuedrefactor(mwc): consolidate openWallet calls through _ensureWalletOpenby sneurlax · 22a609f8 · Apr 27, 2026 · 1 fileMessage 62 · AdequateInformational 16Details
Commit message · sneurlax

refactor(mwc): consolidate openWallet calls through _ensureWalletOpen

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 16/100

This commit is a small internal cleanup for the Mimblewimblecoin wallet code. It replaces several repeated blocks of 'open the wallet' code with a single shared helper, and adds a 60-second timeout to one wallet-opening call so the app doesn't hang forever if something goes wrong. There is no obvious security bug being fixed; it is a code-quality and reliability improvement.

Security candidatefeat(mwc): set nodeApiSecret on default MWC nodeby sneurlax · b10ef798 · Apr 27, 2026 · 1 fileMessage 57 · ThinModerate 64Details
Commit message · sneurlax

feat(mwc): set nodeApiSecret on default MWC node

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Moderate 64/100

This commit embeds a hardcoded secret string (nodeApiSecret) directly into the source code for the default Mimblewimblecoin (MWC) node configuration in a cryptocurrency wallet app. If this secret is meant to authenticate or protect access to the node, publishing it in public source code means anyone can read it. That could let an attacker interact with or abuse the default node in ways the developer did not intend. However, the commit itself does not explain what nodeApiSecret does, so we cannot be certain of the exact risk.

AI review queuedrefactor(mwc): read API secret from NodeModel instead of hardcodingby sneurlax · 6170e8cd · Apr 27, 2026 · 3 filesMessage 62 · AdequateModerate 59Details
Commit message · sneurlax

refactor(mwc): read API secret from NodeModel instead of hardcoding

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Moderate 59/100

This commit removes a hardcoded API password that was embedded in the Stack Wallet source code for connecting to a default Mimblewimblecoin (MWC) node. Previously, anyone reading the code could see the secret password. Now the wallet reads the password from user-configured node settings instead. This is a security improvement, but the change also shows that a real secret was once hardcoded and may have been exposed to anyone inspecting older versions of the app.

Security candidaterefactor(mwc): merge flutter_libmwc#fix/global-chain-type-raceby sneurlax · fb6542a5 · Apr 26, 2026 · 1 fileMessage 62 · AdequateInformational 0Details
Commit message · sneurlax

refactor(mwc): merge flutter_libmwc#fix/global-chain-type-race

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 0/100

This entry is a merge commit that pulls in a branch named 'fix/global-chain-type-race' from a sub-project called flutter_libmwc. No actual code diff is available, and no verified public references were supplied. The title suggests a race-condition fix related to a global 'chain type' setting in MWC (a cryptocurrency plugin), but we cannot see what changed or whether it has security implications.

Security candidatefix(mwc): serialize openWallet FFI calls with mutexby sneurlax · d03e27bc · Apr 26, 2026 · 2 filesMessage 62 · AdequateLow 40Details
Commit message · sneurlax

fix(mwc): serialize openWallet FFI calls with mutex

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Low 40/100

This change adds a lock (mutex) around wallet-opening operations for the Mimblewimblecoin (MWC) wallet. Without the lock, multiple parts of the app could try to open the same wallet at the same time through the native library, which could cause crashes, corrupted wallet state, or the wallet being opened twice. The fix makes these calls happen one at a time.

Security candidatefix(mwc): write .api_secret for default node authenticationby sneurlax · f9c83756 · Apr 26, 2026 · 2 filesMessage 67 · AdequateModerate 63Details
Commit message · sneurlax

fix(mwc): write .api_secret for default node authentication

67/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
access controlcryptography-sensitive pathsigning or wallet path
AI analysis · Moderate 63/100

This commit fixes how Stack Wallet's Mimblewimblecoin (MWC) wallet connects to the default MWC node. Previously, the wallet did not write the required API secret file, so the Rust backend could not authenticate to the default node. The patch now writes a hardcoded secret to a file named .api_secret in the wallet directory when the configured node is the default one. The security concern is that the secret is embedded in the source code and stored on disk, and any app or process with access to the wallet directory can read it. However, this appears to be the intended public secret for the default node, not a private user credential.

AI review queuedfix(solana): fix Solana token tx parsing to handle plain "transfer" typeby sneurlax · c43b8feb · Apr 26, 2026 · 1 fileMessage 62 · AdequateLow 36Details
Commit message · sneurlax

fix(solana): fix Solana token tx parsing to handle plain "transfer" type

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 36/100

This commit fixes how Stack Wallet reads Solana token transactions. Previously, the wallet only recognized a specific detailed transfer format called 'transferChecked'. Now it also accepts the simpler 'transfer' format. Without this fix, some legitimate token transactions may have been missed or misrecorded, which could lead to incorrect balances or transaction history.

AI review queuedresolve private balance refresh issues and spark address generationby levoncrypto · 876feb6c · Apr 23, 2026 · 4 filesMessage 50 · ThinLow 42Details
Commit message · levoncrypto

resolve private balance refresh issues and spark address generation

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 42/100

This commit fixes bugs in how Stack Wallet refreshes private Spark (privacy coin) balances and generates new Spark addresses. The changes prevent the wallet from skipping coins when its local cache gets out of sync, avoid duplicate database entries, and ensure new Spark addresses are derived from the correct prior address. These are reliability/correctness fixes that could affect whether a user sees their full balance or receives funds to a valid address, but they do not appear to introduce a remote exploit path.

AI review queuedfix masternode listby levoncrypto · 0d67c8d1 · Apr 23, 2026 · 1 fileMessage 28 · OpaqueInformational 21Details
Commit message · levoncrypto

fix masternode list

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 21/100

This commit changes how the Stack Wallet app finds a user's Firo masternodes. Previously, the wallet guessed masternode identities by scanning local transaction records and 1000-FIRO UTXOs, which could miss masternodes or include wrong transactions. The new code fetches full transaction details from the ElectrumX server and matches each ProRegTx transaction to its exact collateral transaction ID. There is no direct evidence in the commit that this fixes an exploitable security vulnerability; it appears to be a correctness/reliability fix for the masternode list display and management.

AI review queuedFix masternode registration UX and collateral prompt persistenceby levoncrypto · e3f17561 · Apr 22, 2026 · 7 filesMessage 50 · ThinInformational 18Details
Commit message · levoncrypto

Fix masternode registration UX and collateral prompt persistence

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

This commit is a routine user-experience fix for the Firo masternode registration flow in Stack Wallet. It makes the registration form clearer, remembers when a user has dismissed a collateral prompt, and shows a confirmation dialog after a masternode registration transaction is submitted. There is no clear security vulnerability in the changes, but one small code-quality issue (a broken `mainAxisAlignment: .spaceBetween` expression) was introduced and may cause a build failure. The commit also switches a build script to use the Firo test network by default, which is a configuration change rather than a security issue.

Security candidatefix(ui): resolve desktop overflow in menuby levoncrypto · cb215ffb · Apr 21, 2026 · 2 filesMessage 62 · AdequateInformational 15Details
Commit message · levoncrypto

fix(ui): resolve desktop overflow in menu

62/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
memory safetysigning or wallet path
AI analysis · Informational 15/100

This commit fixes a visual layout problem in the desktop version of Stack Wallet. It prevents menus and dialog boxes from extending beyond the screen when there are too many items, by making them scrollable and limiting their maximum height. There is no security issue here.

Security candidateOptimize Firo Spark mint tx generation and fix fee < vSize errorby Reuben Yap · 51d43572 · Apr 20, 2026 · 1 fileMessage 78 · AdequateLow 44Details
Commit message · Reuben Yap

Optimize Firo Spark mint tx generation and fix fee < vSize error

## Performance

Pre-compute signing keys, addresses, and wallet-owned address set before
the main loop. The original code called getRootHDNode() (expensive
mnemonic-to-seed derivation), a per-UTXO DB lookup for derivationPath,
and a per-output DB lookup for walletOwns, all inside nested loops. For
N inputs across M fee-estimation iterations, this was O(N*M) redundant
work. Also caches getCurrentReceivingSparkAddress() and
getCurrentChangeAddress() since neither can change within the function.

## Fee-less-than-vSize bug fix

The dummy transaction built for fee estimation is signed with real keys
over different data than the final real transaction. bitcoindart's ECDSA
signing (RFC 6979, low-S enforced, low-R not enforced) produces DER
signatures whose length varies by up to ~4 bytes per input depending on
the random r value's high bit. For P2PKH inputs (Firo's default), this
variance counts at full weight, so with 10+ inputs the dummy vs real
vSize can differ by more than the original 10-byte buffer, tripping the
nFeeRet < data.vSize check.

Scale the buffer linearly with input count:

final nBytesBuffer = 10 + 4 * setCoins.length;

This matches what Firo's own C++ wallet does in DummySignatureCreator
(src/wallet/wallet.h:1436): "Helper for producing a bunch of max-sized
low-S signatures (eg 72 bytes)". Extra fee cost: ~4 sats per input at
1 sat/byte.

## Subsidiary fixes

- mintedValue <= BigInt.zero (was == BigInt.zero): catches negative
mintedValue when a UTXO group's total is less than the computed fee
and subtractFeeFromAmount=false. Matches the C++ reference
!MoneyRange(mintedValue) || mintedValue == 0.
- Clarified the fee < vSize error message: the check is effectively a
min-relay-fee check (feeRate < 1 sat/byte), not a fee/size mismatch.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 44/100

This commit fixes a bug in Stack Wallet's Firo Spark coin-minting code where the estimated transaction fee could be too small because the temporary 'dummy' transaction used for fee estimation had shorter digital signatures than the final real transaction. With many inputs, the difference could exceed the old fixed 10-byte safety buffer, causing the wallet to create transactions that failed a minimum-fee check and could not be broadcast. The patch scales the buffer with the number of inputs, pre-computes expensive key derivations for performance, and also catches a negative-mint-amount edge case. There is no direct evidence this was exploited as an attack; it appears to be a reliability/DoS bug for the wallet user.

Security candidatetest(shopinbit): add persistence tests for car research resume flowby sneurlax · faf57331 · Apr 14, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · sneurlax

test(shopinbit): add persistence tests for car research resume flow

72/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
authentication path
AI analysis · Informational 15/100

This commit only adds a new automated test file for a car-purchase feature. It does not change any production code, so it cannot introduce a security vulnerability or fix one directly. The tests verify that certain data fields survive being saved and reloaded by the app.

Security candidatefeat(shopinbit): add Complete Request retry button to ticket detailby sneurlax · f03b2346 · Apr 14, 2026 · 1 fileMessage 62 · AdequateInformational 20Details
Commit message · sneurlax

feat(shopinbit): add Complete Request retry button to ticket detail

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
authentication path
AI analysis · Informational 20/100

This commit adds a 'Complete Request' retry button to a ticket detail screen for a car-research ordering feature. It lets users resubmit a request that previously failed to create. The change is a routine UI/flow improvement and does not, on its own, introduce an obvious security vulnerability. There is no indication in the commit that this fixes a security issue or that it was disclosed as such.

Security candidatefeat(shopinbit): save and restore pending car research stateby sneurlax · dc1ddeb9 · Apr 14, 2026 · 3 filesMessage 62 · AdequateInformational 15Details
Commit message · sneurlax

feat(shopinbit): save and restore pending car research state

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
authentication path
AI analysis · Informational 15/100

This commit adds a 'save and resume' feature for an in-app car-research purchase flow. It stores the user's progress locally so they can continue later instead of losing it if they close the screen. There is no security bug or fix visible in the change.

Security candidatefix(shopinbit): clear isPendingPayment before retry writeby sneurlax · d8315b1d · Apr 14, 2026 · 1 fileMessage 62 · AdequateInformational 21Details
Commit message · sneurlax

fix(shopinbit): clear isPendingPayment before retry write

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
authentication path
AI analysis · Informational 21/100

This commit fixes a small logic bug in a cryptocurrency wallet's car-research payment screen. Before saving a payment ticket to the local database, the code now clears a 'resume/retry' flag (isPendingPayment). Without the fix, the app might incorrectly think a payment was still pending after it had already completed, which could confuse the user or allow an unintended retry/refund flow. There is no direct evidence of a security vulnerability such as theft of funds.

Security candidatefeat(shopinbit): add pending payment persistence fields to schemaby sneurlax · a01ab49e · Apr 14, 2026 · 3 filesMessage 62 · AdequateInformational 15Details
Commit message · sneurlax

feat(shopinbit): add pending payment persistence fields to schema

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
authentication path
AI analysis · Informational 15/100

This commit adds three new data fields to the app's internal database and in-memory model for tracking pending car-research payments in a shopping feature. It is purely a schema and state-management change; no security-sensitive logic is introduced, and no vulnerability is visible in the diff.

Security candidatefix(shopinbit): fix resume flow and PAY NOW dialog behaviorby sneurlax · 04e3a99e · Apr 14, 2026 · 3 filesMessage 62 · AdequateInformational 23Details
Commit message · sneurlax

fix(shopinbit): fix resume flow and PAY NOW dialog behavior

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
authentication path
AI analysis · Informational 23/100

This commit fixes the checkout flow for a third-party shopping service inside the Stack Wallet app. It mainly corrects navigation behavior after a user pays, prevents duplicate database records, and changes the service type label sent to the backend from 'car_research' to 'car'. There is no clear security vulnerability being patched; it reads like a bug-fix for a broken purchase/resume experience.

Security candidatefeat(shopinbit): add car research retry flow with state enumby sneurlax · 3d6148e1 · Apr 14, 2026 · 1 fileMessage 62 · AdequateInformational 12Details
Commit message · sneurlax

feat(shopinbit): add car research retry flow with state enum

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
authentication path
AI analysis · Informational 12/100

This commit rewrites the car-research payment flow in a shopping feature. It replaces two simple boolean flags with a single state machine (an enum) and adds a retry path so that if the second backend call fails, the user can retry later instead of losing the payment record. There is no obvious security bug introduced; it is a reliability/usability improvement.

Security candidatechore: pin analyzer <8.4.0, regenerate g.dart filesby sneurlax · 11bf8cc7 · Apr 14, 2026 · 4 filesMessage 62 · AdequateInformational 17Details
Commit message · sneurlax

chore: pin analyzer <8.4.0, regenerate g.dart files

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
access controlauthentication path
AI analysis · Informational 17/100

This is a routine maintenance commit. It pins a development tool (the Dart analyzer package) to a version below 8.4.0 to avoid a build-time incompatibility with another code-generation tool, and it regenerates some automatically produced database files. There is no direct security fix or user-facing vulnerability patch in the diff.