chore: backport 12 PRs to v23.1.x for v23.1.1 release#7182
Open
thepastaclaw wants to merge 12 commits intodashpay:v23.1.xfrom
Open
chore: backport 12 PRs to v23.1.x for v23.1.1 release#7182thepastaclaw wants to merge 12 commits intodashpay:v23.1.xfrom
thepastaclaw wants to merge 12 commits intodashpay:v23.1.xfrom
Conversation
…g, recalculate minimum width correctly, `SERVICE` and `STATUS` sorting, fix common types filtering b568163 fix: calculate `COMMON_TYPES` programmatically, add dust to exclusions (Kittywhiskers Van Gogh) 269b73e fix: correct forward declaration to prevent ABI warning (Kittywhiskers Van Gogh) 2d99c57 fix: factor status age when sorting by active/ban status (Kittywhiskers Van Gogh) 087859e fix: restore `SERVICE` column comparison behavior lost in MVC refactor (Kittywhiskers Van Gogh) e673c9c fix: recalculate minimum width when buttons are enabled (Kittywhiskers Van Gogh) 31b305e fix: use constant base size in overview page to prevent double scaling (Kittywhiskers Van Gogh) Pull request description: ## Additional Information | Fix | develop (06e761e) | This PR (ec8ee9c) | | --- | -------------------- | -------------------- | | Correct common types filter behaviour to restore exclusion of CoinJoin mixing transactions |  |  | | Enforce minimum width correctly (and prevent double scaling, look at "Recent transactions" font size) |  |  | | Sorting by age (oldest active node) | <p align="center">Does not work</p> |  | | Sorting by service (IP address) | <p align="center">Does not work</p> |  | ## Breaking Changes None expected. ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)** - [x] I have made corresponding changes to the documentation **(note: N/A)** - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: UdjinM6: light ACK b568163 Tree-SHA512: 7d0bdadc9d1da3b06108cb561b1296df2bbe108283eeb88b482ac1575d439c77eeae2c347790ccd1a1a9f551e19df69c50599d60b032181e957b358d66900bdc
…e list a653b26 feat(qt): persist filter preferences in masternode list (Kittywhiskers Van Gogh) 6c97bc1 qt: don't hide banned nodes by default (Kittywhiskers Van Gogh) Pull request description: ## Additional Information In response to community feedback to the UI changes done in [dash#7116](dashpay#7116), the following changes have been implemented * Banned masternodes are no longer hidden by default (to aid MNOs in knowing the status of their nodes at immediate glance) * Persisting filter preferences across restarts (the new layout introduced four different filter options and they'll now be remembered across restarts) ## Breaking Changes None expected. ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)** - [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)** - [x] I have made corresponding changes to the documentation **(note: N/A)** - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: UdjinM6: light ACK a653b26 Tree-SHA512: 471f2d174e64396c22ad8c0ed2c0cc50d85bf0d2b63cd1a85feb720358d78a78c14bc1065ca30a762badd7bea35cbefd21f9105e66e0443ae923abfcaccc2a95
…ate.ui into general.css bc779c6 fix(qt): move labelError styling from proposalcreate.ui into general.css (UdjinM6) Pull request description: ## Issue being fixed or feature implemented `labelError` styling is in the wrong place, it's a translatable string (missed `notr="true"`) and... it is not actually working at all 🤷♂️ |develop | this PR| |-|-| | <img width="972" height="520" alt="Screenshot 2026-02-14 at 00 27 44" src="https://github.com/user-attachments/assets/896a9245-ff1e-45cf-902a-93fe6a4785b1" /> | <img width="972" height="520" alt="Screenshot 2026-02-14 at 00 29 24" src="https://github.com/user-attachments/assets/2fffb0c4-b8ed-49d4-a554-3f78ee382488" /> | Discovered thanks to a broken translation found by @coderabbitai dashpay#7141 (comment) ## What was done? Move `labelError` styling from `proposalcreate.ui` into `general.css`. Will be dropped from `*.ts` files in some future Translations PR. ## How Has This Been Tested? ## Breaking Changes ## Checklist: - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [ ] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: kwvg: utACK bc779c6 Tree-SHA512: 08724dd5506723ba00cad50a9643b6b8a143894df2d53ab6f193d11e84880757d9c82c4aa9a13fe25cb5f2953ffcde590f6d7630bdae8d436b739c1f6fa8f647
…t swapped 5e5aaec fix: MN update notifications had old_list/new_list swapped (UdjinM6) Pull request description: ## Issue being fixed or feature implemented - UI: Masternode list tab displayed state at block X-1 while node was at block X - Net: mnauth disconnect handling could miss removals, keeping removed masternode peers connected longer than intended Noticed while reviewing dashpay#7146 ## What was done? ## How Has This Been Tested? Run qt, open masternode list tab, sort by last paid (desc). Open Info dialog to see block height, wait for another block after full sync and compare. ## Breaking Changes n/a ## Checklist: - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [ ] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: PastaPastaPasta: utACK 5e5aaec kwvg: utACK 5e5aaec Tree-SHA512: 00cd0abd17a46e025f4419b8c06ca0ac5a5edbb07a372da75f1b40866b9b218116fa803f4f903b4010dd878aa05e6377d3ca7e8df99aa184d6b24a0f76a00325
…ayloads as Data Transactions 5c22389 qt: add support for reporting `OP_RETURN` payloads as Data Transactions (Kittywhiskers Van Gogh) Pull request description: ## Additional Information * Depends on dashpay#7147 | `develop` (06e761e) | This PR (97ae689) | | ---------------------- | -------------------- | |  |  | |  |  | ## Breaking Changes None expected. ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)** - [x] I have made corresponding changes to the documentation **(note: N/A)** - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: PastaPastaPasta: utACK 5c22389 UdjinM6: utACK 5c22389 Tree-SHA512: 37ade0aed7f64885268551cdab79c8c966508792d63e74c97a4f622b834cde74954d7c5e3b08b7ae35b38122270f148bff27935290de08644b0a72be81cb5127
…plying data, use for `{Masternode,Proposal}List`s
3d64056 move-only: move definitions to clientfeeds.{cpp,h} to deal with circulars (Kittywhiskers Van Gogh)
4f56a5e lint: update circular dependencies allowlist (Kittywhiskers Van Gogh)
77a99ee qt: register masternode information as a feed, replace per-wallet thread (Kittywhiskers Van Gogh)
722ec6a refactor(qt): pull out proposal data sourcing to `MasternodeFeed` (Kittywhiskers Van Gogh)
a6c7ba3 qt: register proposal information as a feed, replace per-wallet thread (Kittywhiskers Van Gogh)
35eb3d2 feat(qt): introduce framework for sourcing and applying data (Kittywhiskers Van Gogh)
4e951df refactor(qt): pull out proposal data sourcing to `ProposalFeed` (Kittywhiskers Van Gogh)
7827ae1 move-only: src/qt/governancelist.{cpp,h} -> src/qt/proposallist.{cpp,h} (Kittywhiskers Van Gogh)
342f785 refactor: s/ProposalList/Proposals/g (Kittywhiskers Van Gogh)
Pull request description:
## Additional Information
* Dependency for dashpay#7118
* The redesigned "Masternode" and "Governance" tabs (see [dash#7110](dashpay#7110) and [dash#7116](dashpay#7116)) were migrated to a worker-based update mechanism with a773635 and others, this proved to deal with main thread contention and the debounce mechanism prevented frequent refreshes of infrequently updated data and was a step towards throttled event-driven updates.
* This implementation though had a problematic side effect, a worker thread is spawned **per tab per wallet** and while per tab threads were by design, per wallet threads meant redundant work happening all at once fighting over the same locks, which cause noticeable performance degradation.
* This pull request therefore introduces the concept of "feeds", that perform the expensive fetch operation that are either triggered by events (and debounced) or user feedback (and executed immediately) to ensure snappiness. The IBD throttling logic is respected.
* The result is having a central worker thread fetching (`fetch()`) and dispatching refresh signals (`dataReady()`) which are then used by the consumer (e.g. `updateMasternodeList()`) to fetch wallet-specific information (which is relatively inexpensive) and then *apply* those changes (e.g. `setMasternodeList()`).
* Note that wallet-specific fetching is done on the main thread, to prevent thread explosion (even if they are doing now non-redundant work) as they'd still be per tab per wallet.
* Note that masternodes and proposal views use different refresh intervals, masternode data uses 3 seconds and proposal data uses 10 seconds, scaled up to 30s and 60s respectively during IBD.
## Breaking Changes
None expected.
## Checklist
- [x] I have performed a self-review of my own code
- [x] I have commented my code, particularly in hard-to-understand areas
- [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)**
- [x] I have made corresponding changes to the documentation **(note: N/A)**
- [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_
ACKs for top commit:
UdjinM6:
utACK 3d64056
Tree-SHA512: 2bd89418e9de80c10269fc723468141970a41e492baadf839824eb4c58cea43f65ab8b8cbeac1867e0dffd3c3bc5785ec59fab97bd1c3659fe46f7bf797eddcc
…g status=0 9705b9a fix(qt): prevent banned masternodes from returning status=0 (UdjinM6) Pull request description: ## Issue being fixed or feature implemented Two code paths in `MasternodeModel::data()` could return `0` for banned nodes: - `ban_height` == `m_current_height` (banned this block) - `ban_height` unavailable (unknown ban time) `0` is also valid for an active node registered in the current block, so the "Hide banned" filter (`status > 0`) could silently fail to hide freshly-banned nodes. dashpay#7147 follow-up ## What was done? Fix: add `+1` offset to the banned-node calculation and change the fallback return from 0 to 1. The encoding contract is now unambiguous: - Banned → always ≥ 1 (age in blocks + 1) - Active → always ≤ 0 (0 = registered this block) Relative sort order among banned nodes is preserved. ## How Has This Been Tested? ## Breaking Changes n/a ## Checklist: - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [ ] I have assigned this pull request to a milestone ACKs for top commit: kwvg: utACK 9705b9a Tree-SHA512: aa0aea49ad02ab23155dd5568baaac384bfcd30ff9fecbbd4ecd297c1b4f0207fd68399e858edde50daf36c6017b0bdd4d8a04be087e85d5337db3cab8079cfd
…nto one struct, expose chainlock, instantsend, credit pool, quorum statistics ce15f98 build: update semantic pull requests to include interfaces as scope (Kittywhiskers Van Gogh) fe8b372 interfaces: expose quorum statistics (health, rotation, expiry, newest) (Kittywhiskers Van Gogh) 9c37174 interfaces: expose credit pool pending asset unlocks (Kittywhiskers Van Gogh) 399eb83 refactor: make `GetCreditPool()` a chainhelper passthrough, add interf. (Kittywhiskers Van Gogh) 9f8168c interfaces: expose instantsend counters (verified, awaiting, unprotected) (Kittywhiskers Van Gogh) f534097 interfaces: expose best chainlock's height, block time and hash (Kittywhiskers Van Gogh) 50b3f89 fix: return null `getListAtChainTip()` retval instead of partial retval (Kittywhiskers Van Gogh) 93b6e2b fix: correctly track total weighted instead of conflating with valid (Kittywhiskers Van Gogh) 7b65b76 refactor: consolidate masternode counts into one struct (Kittywhiskers Van Gogh) baafee5 refactor: use `shared_ptr` for `MnEntryCPtr` (Kittywhiskers Van Gogh) 892ad7c refactor(qt): cache proposal JSON, drop unused `isActive()`, drop copy (Kittywhiskers Van Gogh) Pull request description: ## Additional Information * Dependency for dashpay#7118 Spun off from [dash#7118](dashpay#7118) for ease of review, exposes new interface methods for usage in feeds as part of UI refresh. ## Breaking Changes None expected. ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)** - [x] I have made corresponding changes to the documentation **(note: N/A)** - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ **(note: N/A)** ACKs for top commit: PastaPastaPasta: utACK ce15f98 Tree-SHA512: ca9fc74b7499e77c306a3955cd9887a752c63e412833db605caee2f8ea72790733f931c01bda0b74cfcf2cb82cb07376f9cdaf43d39bf0476a222953da756a41
…gets for Dash-specific reporting in debug window) f85a459 refactor(qt): move debug log action from General widget to File menu (Kittywhiskers Van Gogh) 7839115 feat(qt): add tooltip for quorum statistics with rotation, expiry, age (Kittywhiskers Van Gogh) 8a721c2 refactor(qt): move "Chainlocks" outside hlayout due to value width (Kittywhiskers Van Gogh) dff26d6 refactor(qt): use horizontal layout with vertical grids, reorder data (Kittywhiskers Van Gogh) 12dc7fe feat(qt): report quorum statistics in network widget (Kittywhiskers Van Gogh) 26ed211 feat(qt): report credit pool statistics in network widget (Kittywhiskers Van Gogh) b9a14cc qt: show more instantsend counters (pending, waiting, unprotected) in UI (Kittywhiskers Van Gogh) a4e9fbc qt: report chainlock time to maintain parity with block fields (Kittywhiskers Van Gogh) ab8d6d2 qt: register chainlocks information as a feed, treat UI notif as trigger (Kittywhiskers Van Gogh) 654724d qt: register instantsend information as a feed, replace polling approach (Kittywhiskers Van Gogh) ba406f5 interfaces: introduce UI signal `NotifyInstantSendChanged` (Kittywhiskers Van Gogh) d1f61f5 refactor: drop now-unused cached masternode list routine (Kittywhiskers Van Gogh) 6bb3e6b chore(qt): update header and label descriptions based on capability (Kittywhiskers Van Gogh) 918cba1 refactor(qt): move Dash-specific reporting to network widget (Kittywhiskers Van Gogh) 0a64bab refactor(qt): move debug window stats to separate information widget (Kittywhiskers Van Gogh) dfec7d8 fix(qt): align headers in debug window's information tab (Kittywhiskers Van Gogh) b524eef qt: precompute mappings to avoid expensive searches (Kittywhiskers Van Gogh) 960666b qt: switch ProposalList to consume masternode list feed (Kittywhiskers Van Gogh) d9beeec qt: switch RPCConsole and leftover MasternodeList code to feed (Kittywhiskers Van Gogh) Pull request description: ## Additional Information * Depends on dashpay#7112 * Depends on dashpay#7110 * Depends on dashpay#7146 * Dependency for dashpay#7159 | v23.0.2 (cdc5a63) | This PR (WIP code) | | -------------------- | ------------------- | |  |  | | <div align="center">See above</div> |  | | <div align="center">Does not exist in this build</div> |  | | <div align="center">Does not exist in this build</div> |  | ## Breaking Changes None expected. ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)** - [x] I have made corresponding changes to the documentation **(note: N/A)** - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: PastaPastaPasta: utACK f85a459 UdjinM6: light ACK f85a459 Tree-SHA512: 8f555721c9fc9951c5fcdcb4b0a8e102a16ce5c89cf0a2641e416f09689fc3de5f502cf05ba7abe5c6acd962f0d072bcd8bf787a0c9d21b1fd706a58ff69b326
…on widget to information, donut chart for proposal allocation) c8f0c2a feat(qt): add lifecycle and vote-aware sorting in proposal list (Kittywhiskers Van Gogh) c1f97d6 feat(qt): add budget donut chart to proposal info view (Kittywhiskers Van Gogh) 8936b5a feat(qt): add interactive DonutChart widget (Kittywhiskers Van Gogh) cb5bcd5 feat(qt): add proposal info button to proposal list (Kittywhiskers Van Gogh) e7de61d feat(qt): add wallet-specific section to proposal widget (Kittywhiskers Van Gogh) 0005209 feat(qt): report proposal information (Kittywhiskers Van Gogh) 37b16f8 interfaces: add unique voter count reporting (Kittywhiskers Van Gogh) Pull request description: ## Additional Information * Depends on dashpay#7146 * Depends on dashpay#7118 | | | | -- | -- | |  |  | |  |  | ## Breaking Changes None expected. ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [x] I have added or updated relevant unit/integration/functional/e2e tests - [x] I have made corresponding changes to the documentation **(note: N/A)** - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: UdjinM6: LGTM light ACK c8f0c2a Tree-SHA512: db714a9845605e059909efc1102d3f176db293f716d08efcd3f00ab48596aa0820aa5871bea81cb8099a9abca23cf17b0709d5d60e3127bb2eb022a78bf8c2e2
…ash-Maps 6ffe808 refactor: apply review suggestions (Konstantin Akimov) bb6facd perf: do linear lookup when it's needed instead building 2 heavy Hash-Maps which used almost never (Konstantin Akimov) 9d26734 refactor: remove unused getObjLocalValidity (Konstantin Akimov) Pull request description: ## Issue being fixed or feature implemented Currently, for each update of masternode list 3 list are generated: list of shared_pointers, hash-map by service, hash-map by protx. Creating these hash-maps creates overhead for every user for every masternode update. It causes excessive battery use, excessive RAM usage while these lookups happens in rare conditions (only for masternode owners during voting; only when "Peer Detail" is open). It's better to do linear lookup _once_ over all masternode in the specific scenario, rather than build these heavy objects for _every_ update of list. Lookup during voting may looks scary due to potential O(N^2). Though, it's not N^2, but N*M (where M is amount of masternodes that belongs to single Owner, M<<N). Secondly, N is relatively small and _voting_ is not assumed to be rapid-fast action (milliseconds); it's okay if user will wait extra 10ms in the worst case scenario for each its vote. ## What was done? Code is updated to do linear lookup instead building heavy hash-maps for every update. Current implementation (in develop) has a bug with dangling pointer and potentially could cause UB: dashpay#7118 (comment) Fixed by this PR ## How Has This Been Tested? N/A ## Breaking Changes N/A ## Checklist: - [x] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: UdjinM6: utACK 6ffe808 kwvg: utACK 6ffe808 Tree-SHA512: b401d399767825a0363edfe8aa89dd6f1c44184874ec40aeebcde36917b643d69bc8a670f3b6e6aaa9a35af88d30810e55413137a8c02955103fca89a46e0c0a
…ling for each network type, update bundle icon, add mask-based tray icon, generation scripts 54cde9b qt: drop unused networkId param in `networkstyle.{cpp,h}` (UdjinM6) 6c23752 qt: generate tray icons for macOS, update script, set at runtime (Kittywhiskers Van Gogh) 4a1e939 qt: apply new runtime icons if running on macOS (Kittywhiskers Van Gogh) 3bc2ee6 qt: generate macOS icon assets, commit resizing and creation script (Kittywhiskers Van Gogh) 0bef769 res: add 8-bit color Icon Composer exports for Tahoe styled icons (Kittywhiskers Van Gogh) Pull request description: ## Additional Information ### Runtime Icons | | mainnet | testnet | regtest | devnet | |-|-|-|-|-| | **`develop`** |  |  |  |  | | **This PR** |  |  |  |  | ### Tray | | `develop` | This PR | | - | -------- | ------- | | **Dark Mode** |  |  | | **Light Mode** | See above |  | ## Breaking Changes None expected. ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)** - [x] I have made corresponding changes to the documentation **(note: N/A)** - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: PastaPastaPasta: utACK 54cde9b UdjinM6: utACK 54cde9b Tree-SHA512: af23ab7558b724f192f9b4107cbbbe60098274feec53e31e0b4a8e964ae8a05c64315247c8a3a46ae3ef1e957b3301bed12dad69adfbb8c498862ebbb530a87a
✅ No Merge Conflicts DetectedThis PR currently has no conflicts with other open PRs. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Backport PRs for v23.1.1
Cherry-picks the following 12 PRs (labeled
backport-candidate-23.1.x) fromdevelopontov23.1.x, in merge order:SERVICEandSTATUSsorting, fix common types filteringOP_RETURNpayloads as Data Transactions{Masternode,Proposal}ListsAll 12 cherry-picked cleanly (no conflicts).
Notes
git cherry-pick -m 1 <merge-sha>for each (all were merge commits on develop)