refactor(rpc, wallet): address review feedback on provider transaction foundation - #7616
Conversation
…n foundation - Remove unused headers <deploymentstatus.h> and <evo/specialtx.h> from src/rpc/evo.cpp. - Sort includes alphabetically in src/wallet/test/wallet_tests.cpp. - Consolidate ToggleFailBatch/ToggleFailDatabase with FailBatch/FailDatabase in src/wallet/test/wallet_tests.cpp.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
✅ Final review complete — no blockers (commit a1de5f6) |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
💤 Files with no reviewable changes (1)
Included review availability: Your plan includes up to 3 reviews per rolling hour; 0 remain after this review. WalkthroughThe change removes unused headers from the Evo RPC source. Wallet tests now use shared Estimated code review effort: 2 (Simple) | ~10 minutes Merge Risk: ⚪ Minimal · up to This PR makes localized cleanup and test-fixture refactoring changes without identified production behavior or merge-blocking risk; it is merge-ready after normal checks and review. Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
thepastaclaw
left a comment
There was a problem hiding this comment.
Final validation — Codex/Sol only (Phase 2 disabled)
At exact head a1de5f6, the fixture consolidation preserves both wallet tests' required pass/fail behavior, and the include cleanup introduces no correctness issue. The proposed commit-subject finding is not actionable because the body permanently records the technical changes and equivalent review-follow-up subjects are established in Dash history; no in-scope findings remain.
Source: reviewer backend for codex general: gpt-5.6-sol; reviewer backend for codex dash-core-commit-history: gpt-5.6-sol; final verifier backend: gpt-5.6-sol. openclaw-agent/cliproxy/gpt-5.6-sol is orchestration-only and not reviewer evidence.
Validated zero-blocker Codex/Sol precheck evidence was promoted to final because Phase 2 (Sonnet/Opus) is temporarily disabled. This is Codex/Sol-only final validation, not Codex + Sonnet/Opus coverage.
Review provenance
- Codex reviewers:
gpt-5.6-sol— general (completed),gpt-5.6-sol— dash-core-commit-history (completed) - Verifier:
gpt-5.6-sol— verifier - Sonnet/Opus: not run (Phase 2 disabled — temporary Codex/Sol-only final)
- Secondary pass: disabled (
temporary_phase2_sonnet_disable)
297c15b docs: add masternode management release notes (pasta) cebae5a feat(qt): add masternode registration and maintenance UI (pasta) Pull request description: ## Issue being fixed or feature implemented The Masternodes tab is currently read-only, so registering or maintaining a regular masternode or evonode requires operators to drive multi-step `protx` workflows from the debug console. This adds an action-oriented Qt workflow on top of the typed provider-transaction interface. This is the focused regular/Evo extraction and refinement of the corresponding work in [PastaPastaPasta#68](PastaPastaPasta#68). Shared-masternode UI remains separate. The supporting foundations are already merged in [dash#7595](#7595), [dash#7600](#7600), and [dash#7616](#7616). [dash#7594](#7594) is explicitly **not** a dependency: this PR does not derive, reserve, recover, record, or later reveal operator keys from the wallet seed. ## What was done? - Added a regular/Evo registration wizard to the Masternodes tab. - Supports wallet-funded collateral, an exact wallet-owned collateral UTXO, and external/hardware-held collateral through prepare/sign/submit. - Supports either a freshly generated basic-scheme operator key, shown and suffix-confirmed before registration can begin, or an externally supplied operator public key. - Handles regular and Evo service fields, including v24 extended Core and Platform endpoint lists. - Presents a complete review, keeps synchronous wallet/provider work off the GUI thread, protects prepared collateral locks, and blocks unsafe close/back behavior while operations are active. - Added role-aware maintenance actions to each masternode row. - Update Service supports regular and Evo fields, operator authentication, optional operator payout, and automatic or explicit fee funding. - Update Registrar preserves unchanged values, requires the owner key, avoids flattening multi-payout registrations, and warns about the PoSe consequence of rotating the operator key. - Revoke exposes all four DIP3 reasons and clearly explains that collateral is unaffected. - Added deterministic Qt coverage for endpoint validation, fee-source selection, request construction, key handling, model reconciliation, threading, dialog/wizard lifecycle, and no-wallet behavior. ## Screenshots Native macOS captures from the exact current head `297c15bbe01862669559ee179753b9088b383a7e` using disposable post-v24 regtest fixtures. Each theme independently exercises the complete 36-state walkthrough: 26 registration states, 3 blocking-validation states, and 7 maintenance states. Fresh wallet clones mean wallet-generated role-address choices and values, operator keys, and transaction hashes can differ between Dark and Light runs; fixed collateral outpoints, manually entered endpoints, Platform node IDs, and external-role inputs are held constant. The delayed final broadcast confirmation is also [captured separately](https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-supplemental-confirm-before-broadcast.png). All originals and `SHA256SUMS` are published in the [verified evidence release](https://github.com/PastaPastaPasta/dash/releases/tag/ui-artifacts-297c15bb). <details open> <summary><strong>Dark mode — complete 36-image walkthrough</strong></summary> ### Registration — regular, Evo, and external collateral <table> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-01-masternodes-empty-entry.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-01-masternodes-empty-entry.png" alt="dark-registration-01-masternodes-empty-entry" width="360"></a><br><sub>Masternodes Empty Entry</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-02-type-regular.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-02-type-regular.png" alt="dark-registration-02-type-regular" width="360"></a><br><sub>Type Regular</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-03-collateral-wallet-funded.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-03-collateral-wallet-funded.png" alt="dark-registration-03-collateral-wallet-funded" width="360"></a><br><sub>Collateral Wallet Funded</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-04-collateral-existing.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-04-collateral-existing.png" alt="dark-registration-04-collateral-existing" width="360"></a><br><sub>Collateral Existing</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-05-service-regular-optional.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-05-service-regular-optional.png" alt="dark-registration-05-service-regular-optional" width="360"></a><br><sub>Service Regular Optional</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-06-keys-generated-no-derivation.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-06-keys-generated-no-derivation.png" alt="dark-registration-06-keys-generated-no-derivation" width="360"></a><br><sub>Keys Generated No Derivation</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-07-payout.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-07-payout.png" alt="dark-registration-07-payout" width="360"></a><br><sub>Payout</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-08-fee-source.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-08-fee-source.png" alt="dark-registration-08-fee-source" width="360"></a><br><sub>Fee Source</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-09-review-regular.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-09-review-regular.png" alt="dark-registration-09-review-regular" width="360"></a><br><sub>Review Regular</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-10-wallet-unlock.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-10-wallet-unlock.png" alt="dark-registration-10-wallet-unlock" width="360"></a><br><sub>Wallet Unlock</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-11-save-operator-key-before-registration.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-11-save-operator-key-before-registration.png" alt="dark-registration-11-save-operator-key-before-registration" width="360"></a><br><sub>Save Operator Key Before Registration</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-12-operator-key-confirmed-before-registration.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-12-operator-key-confirmed-before-registration.png" alt="dark-registration-12-operator-key-confirmed-before-registration" width="360"></a><br><sub>Operator Key Confirmed Before Registration</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-13-confirmed-regular-row.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-13-confirmed-regular-row.png" alt="dark-registration-13-confirmed-regular-row" width="360"></a><br><sub>Confirmed Regular Row</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-14-type-evo.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-14-type-evo.png" alt="dark-registration-14-type-evo" width="360"></a><br><sub>Type Evo</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-15-evo-existing-4000-collateral.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-15-evo-existing-4000-collateral.png" alt="dark-registration-15-evo-existing-4000-collateral" width="360"></a><br><sub>Evo Existing 4000 Collateral</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-16-evo-core-service.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-16-evo-core-service.png" alt="dark-registration-16-evo-core-service" width="360"></a><br><sub>Evo Core Service</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-17-evo-platform-valid-placeholder.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-17-evo-platform-valid-placeholder.png" alt="dark-registration-17-evo-platform-valid-placeholder" width="360"></a><br><sub>Evo Platform Valid Placeholder</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-18-evo-platform-complete.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-18-evo-platform-complete.png" alt="dark-registration-18-evo-platform-complete" width="360"></a><br><sub>Evo Platform Complete</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-19-review-evo-extended-services.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-19-review-evo-extended-services.png" alt="dark-registration-19-review-evo-extended-services" width="360"></a><br><sub>Review Evo Extended Services</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-20-result-evo.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-20-result-evo.png" alt="dark-registration-20-result-evo" width="360"></a><br><sub>Result Evo</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-21-external-collateral.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-21-external-collateral.png" alt="dark-registration-21-external-collateral" width="360"></a><br><sub>External Collateral</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-22-external-operator-public-key.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-22-external-operator-public-key.png" alt="dark-registration-22-external-operator-public-key" width="360"></a><br><sub>External Operator Public Key</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-23-review-external-collateral.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-23-review-external-collateral.png" alt="dark-registration-23-review-external-collateral" width="360"></a><br><sub>Review External Collateral</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-24-external-sign-message.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-24-external-sign-message.png" alt="dark-registration-24-external-sign-message" width="360"></a><br><sub>External Sign Message</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-25-valid-external-signature.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-25-valid-external-signature.png" alt="dark-registration-25-valid-external-signature" width="360"></a><br><sub>Valid External Signature</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-26-result-external-no-secret.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-registration-26-result-external-no-secret.png" alt="dark-registration-26-result-external-no-secret" width="360"></a><br><sub>Result External No Secret</sub></td> </tr> </table> ### Blocking validation states <table> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-validation-01-wrong-secret-confirmation.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-validation-01-wrong-secret-confirmation.png" alt="dark-validation-01-wrong-secret-confirmation" width="360"></a><br><sub>Wrong Secret Confirmation</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-validation-02-evo-incomplete-platform-pair.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-validation-02-evo-incomplete-platform-pair.png" alt="dark-validation-02-evo-incomplete-platform-pair" width="360"></a><br><sub>Evo Incomplete Platform Pair</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-validation-03-invalid-external-signature.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-validation-03-invalid-external-signature.png" alt="dark-validation-03-invalid-external-signature" width="360"></a><br><sub>Invalid External Signature</sub></td> <td></td> </tr> </table> ### Maintenance — Update Service, Update Registrar, and Revoke <table> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-01-update-service-current-values.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-01-update-service-current-values.png" alt="dark-maintenance-01-update-service-current-values" width="360"></a><br><sub>Update Service Current Values</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-02-update-service-invalid-operator-key.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-02-update-service-invalid-operator-key.png" alt="dark-maintenance-02-update-service-invalid-operator-key" width="360"></a><br><sub>Update Service Invalid Operator Key</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-03-update-service-valid-automatic-fee.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-03-update-service-valid-automatic-fee.png" alt="dark-maintenance-03-update-service-valid-automatic-fee" width="360"></a><br><sub>Update Service Valid Automatic Fee</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-04-update-registrar-current-values.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-04-update-registrar-current-values.png" alt="dark-maintenance-04-update-registrar-current-values" width="360"></a><br><sub>Update Registrar Current Values</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-05-update-registrar-payout-change.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-05-update-registrar-payout-change.png" alt="dark-maintenance-05-update-registrar-payout-change" width="360"></a><br><sub>Update Registrar Payout Change</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-06-revoke-default.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-06-revoke-default.png" alt="dark-maintenance-06-revoke-default" width="360"></a><br><sub>Revoke Default</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-07-revoke-valid-operator-key.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/dark-maintenance-07-revoke-valid-operator-key.png" alt="dark-maintenance-07-revoke-valid-operator-key" width="360"></a><br><sub>Revoke Valid Operator Key</sub></td> <td></td> </tr> </table> </details> <details> <summary><strong>Light mode — complete 36-image walkthrough</strong></summary> ### Registration — regular, Evo, and external collateral <table> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-01-masternodes-empty-entry.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-01-masternodes-empty-entry.png" alt="light-registration-01-masternodes-empty-entry" width="360"></a><br><sub>Masternodes Empty Entry</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-02-type-regular.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-02-type-regular.png" alt="light-registration-02-type-regular" width="360"></a><br><sub>Type Regular</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-03-collateral-wallet-funded.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-03-collateral-wallet-funded.png" alt="light-registration-03-collateral-wallet-funded" width="360"></a><br><sub>Collateral Wallet Funded</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-04-collateral-existing.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-04-collateral-existing.png" alt="light-registration-04-collateral-existing" width="360"></a><br><sub>Collateral Existing</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-05-service-regular-optional.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-05-service-regular-optional.png" alt="light-registration-05-service-regular-optional" width="360"></a><br><sub>Service Regular Optional</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-06-keys-generated-no-derivation.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-06-keys-generated-no-derivation.png" alt="light-registration-06-keys-generated-no-derivation" width="360"></a><br><sub>Keys Generated No Derivation</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-07-payout.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-07-payout.png" alt="light-registration-07-payout" width="360"></a><br><sub>Payout</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-08-fee-source.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-08-fee-source.png" alt="light-registration-08-fee-source" width="360"></a><br><sub>Fee Source</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-09-review-regular.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-09-review-regular.png" alt="light-registration-09-review-regular" width="360"></a><br><sub>Review Regular</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-10-wallet-unlock.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-10-wallet-unlock.png" alt="light-registration-10-wallet-unlock" width="360"></a><br><sub>Wallet Unlock</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-11-save-operator-key-before-registration.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-11-save-operator-key-before-registration.png" alt="light-registration-11-save-operator-key-before-registration" width="360"></a><br><sub>Save Operator Key Before Registration</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-12-operator-key-confirmed-before-registration.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-12-operator-key-confirmed-before-registration.png" alt="light-registration-12-operator-key-confirmed-before-registration" width="360"></a><br><sub>Operator Key Confirmed Before Registration</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-13-confirmed-regular-row.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-13-confirmed-regular-row.png" alt="light-registration-13-confirmed-regular-row" width="360"></a><br><sub>Confirmed Regular Row</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-14-type-evo.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-14-type-evo.png" alt="light-registration-14-type-evo" width="360"></a><br><sub>Type Evo</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-15-evo-existing-4000-collateral.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-15-evo-existing-4000-collateral.png" alt="light-registration-15-evo-existing-4000-collateral" width="360"></a><br><sub>Evo Existing 4000 Collateral</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-16-evo-core-service.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-16-evo-core-service.png" alt="light-registration-16-evo-core-service" width="360"></a><br><sub>Evo Core Service</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-17-evo-platform-valid-placeholder.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-17-evo-platform-valid-placeholder.png" alt="light-registration-17-evo-platform-valid-placeholder" width="360"></a><br><sub>Evo Platform Valid Placeholder</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-18-evo-platform-complete.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-18-evo-platform-complete.png" alt="light-registration-18-evo-platform-complete" width="360"></a><br><sub>Evo Platform Complete</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-19-review-evo-extended-services.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-19-review-evo-extended-services.png" alt="light-registration-19-review-evo-extended-services" width="360"></a><br><sub>Review Evo Extended Services</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-20-result-evo.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-20-result-evo.png" alt="light-registration-20-result-evo" width="360"></a><br><sub>Result Evo</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-21-external-collateral.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-21-external-collateral.png" alt="light-registration-21-external-collateral" width="360"></a><br><sub>External Collateral</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-22-external-operator-public-key.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-22-external-operator-public-key.png" alt="light-registration-22-external-operator-public-key" width="360"></a><br><sub>External Operator Public Key</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-23-review-external-collateral.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-23-review-external-collateral.png" alt="light-registration-23-review-external-collateral" width="360"></a><br><sub>Review External Collateral</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-24-external-sign-message.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-24-external-sign-message.png" alt="light-registration-24-external-sign-message" width="360"></a><br><sub>External Sign Message</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-25-valid-external-signature.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-25-valid-external-signature.png" alt="light-registration-25-valid-external-signature" width="360"></a><br><sub>Valid External Signature</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-26-result-external-no-secret.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-registration-26-result-external-no-secret.png" alt="light-registration-26-result-external-no-secret" width="360"></a><br><sub>Result External No Secret</sub></td> </tr> </table> ### Blocking validation states <table> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-validation-01-wrong-secret-confirmation.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-validation-01-wrong-secret-confirmation.png" alt="light-validation-01-wrong-secret-confirmation" width="360"></a><br><sub>Wrong Secret Confirmation</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-validation-02-evo-incomplete-platform-pair.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-validation-02-evo-incomplete-platform-pair.png" alt="light-validation-02-evo-incomplete-platform-pair" width="360"></a><br><sub>Evo Incomplete Platform Pair</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-validation-03-invalid-external-signature.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-validation-03-invalid-external-signature.png" alt="light-validation-03-invalid-external-signature" width="360"></a><br><sub>Invalid External Signature</sub></td> <td></td> </tr> </table> ### Maintenance — Update Service, Update Registrar, and Revoke <table> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-01-update-service-current-values.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-01-update-service-current-values.png" alt="light-maintenance-01-update-service-current-values" width="360"></a><br><sub>Update Service Current Values</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-02-update-service-invalid-operator-key.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-02-update-service-invalid-operator-key.png" alt="light-maintenance-02-update-service-invalid-operator-key" width="360"></a><br><sub>Update Service Invalid Operator Key</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-03-update-service-valid-automatic-fee.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-03-update-service-valid-automatic-fee.png" alt="light-maintenance-03-update-service-valid-automatic-fee" width="360"></a><br><sub>Update Service Valid Automatic Fee</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-04-update-registrar-current-values.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-04-update-registrar-current-values.png" alt="light-maintenance-04-update-registrar-current-values" width="360"></a><br><sub>Update Registrar Current Values</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-05-update-registrar-payout-change.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-05-update-registrar-payout-change.png" alt="light-maintenance-05-update-registrar-payout-change" width="360"></a><br><sub>Update Registrar Payout Change</sub></td> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-06-revoke-default.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-06-revoke-default.png" alt="light-maintenance-06-revoke-default" width="360"></a><br><sub>Revoke Default</sub></td> </tr> <tr> <td align="center"><a href="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-07-revoke-valid-operator-key.png"><img src="https://github.com/PastaPastaPasta/dash/releases/download/ui-artifacts-297c15bb/light-maintenance-07-revoke-valid-operator-key.png" alt="light-maintenance-07-revoke-valid-operator-key" width="360"></a><br><sub>Revoke Valid Operator Key</sub></td> <td></td> </tr> </table> </details> ## How Has This Been Tested? Local environment: macOS arm64, Qt 5.15.18, depends-backed build. - `make -j8` - `QT_QPA_PLATFORM=cocoa ./src/qt/test/test_dash-qt` - all Qt suites passed - `MasternodeWidgetTests`: 37 passed - `MasternodeMaintenanceTests`: 11 passed - `QT_QPA_PLATFORM=cocoa make -j8 check` - complete unit/check suite passed - `test/lint/all-lint.py` - exited successfully; Python lint was skipped because `flake8` is not installed locally, and the repository's existing codespell warnings remain - Final wait-cursor teardown fix at `6266b98656fa1a3081503068d23205cf9b9492e0`: full build, full Qt test binary, `git diff --check`, whitespace lint, Dash cppcheck, and clang-format-diff all passed - Separate `--disable-wallet --with-gui=qt5` build during implementation: `make -C src -j8 qt/dash-qt` - Native UI journeys against disposable post-v24 regtest fixtures: - wallet-funded regular registration broadcast and confirmed in the list - exact-collateral Evo registration broadcast successfully - external-collateral prepare, invalid/valid signature handling, and submit completed successfully - Update Service, Update Registrar, and Revoke dialogs exercised with current values, edited values, invalid/valid operator credentials, owner-role gating, fee-source choices, cancel behavior, and reasons 0 through 3 - Every retained screenshot was reopened at original resolution and checked for clipping, stale pre-fix content, personal data, and non-regtest secrets. Live testing found and fixed two issues before publication: payout shares now use the protocol's full 10000-unit reward, and the Evo HTTPS example uses a DNS name for the port-443 form accepted by provider-network validation. ## Breaking Changes None. The existing RPC interface and read-only list behavior remain available. The new write paths use the already-merged typed provider-transaction service. ## 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 - [ ] I have assigned this pull request to a milestone This pull request was created by Codex. Top commit has no ACKs. Tree-SHA512: 3a99af8d49b6f6bad93c680c76f0952f7e234c6686feb3f98287077ae5f0cd17ffef4d91cfb4dfc8c27ae3da97b2bea7e2077a6fc5a3d09dac8cc4523cf62927
Issue being fixed or feature implemented
Addresses non-blocking code review feedback from knst on merged PR #7600 (typed provider transaction foundation).
What was done?
<deploymentstatus.h>and<evo/specialtx.h>fromsrc/rpc/evo.cpp.src/wallet/test/wallet_tests.cpp.ToggleFailBatch/ToggleFailDatabasewithFailBatch/FailDatabaseinsrc/wallet/test/wallet_tests.cppto reuse a single database test fixture acrossinterface_coin_lock_failed_persistandwallet_sync_tx_invalid_state_test.How Has This Been Tested?
src/test/test_dashwith the depends toolchain.wallet_testsBoost test suite.evo_netinfo_testsBoost test suite.lint-includes.py,lint-circular-dependencies.py, andlint-whitespace.pystatic linters.Breaking Changes
None.
Checklist: