Skip to content

refactor(rpc, wallet): address review feedback on provider transaction foundation - #7616

Merged
PastaPastaPasta merged 1 commit into
dashpay:developfrom
PastaPastaPasta:refactor/providertx-knst-feedback-followup
Aug 18, 2026
Merged

refactor(rpc, wallet): address review feedback on provider transaction foundation#7616
PastaPastaPasta merged 1 commit into
dashpay:developfrom
PastaPastaPasta:refactor/providertx-knst-feedback-followup

Conversation

@PastaPastaPasta

@PastaPastaPasta PastaPastaPasta commented Aug 17, 2026

Copy link
Copy Markdown
Member

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?

  • Removed unused headers <deploymentstatus.h> and <evo/specialtx.h> from src/rpc/evo.cpp.
  • Sorted headers alphabetically in src/wallet/test/wallet_tests.cpp.
  • Consolidated ToggleFailBatch / ToggleFailDatabase with FailBatch / FailDatabase in src/wallet/test/wallet_tests.cpp to reuse a single database test fixture across interface_coin_lock_failed_persist and wallet_sync_tx_invalid_state_test.

How Has This Been Tested?

  • Compiled src/test/test_dash with the depends toolchain.
  • Passed wallet_tests Boost test suite.
  • Passed evo_netinfo_tests Boost test suite.
  • Passed lint-includes.py, lint-circular-dependencies.py, and lint-whitespace.py static linters.

Breaking Changes

None.

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)

…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.
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@thepastaclaw

thepastaclaw commented Aug 17, 2026

Copy link
Copy Markdown

✅ Final review complete — no blockers (commit a1de5f6)

@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: eb159ad8-d528-402d-9ad3-2c8dc62930ec

📥 Commits

Reviewing files that changed from the base of the PR and between 12f5ba2 and a1de5f6.

📒 Files selected for processing (2)
  • src/rpc/evo.cpp
  • src/wallet/test/wallet_tests.cpp
💤 Files with no reviewable changes (1)
  • src/rpc/evo.cpp

Included review availability: Your plan includes up to 3 reviews per rolling hour; 0 remain after this review.


Walkthrough

The change removes unused headers from the Evo RPC source. Wallet tests now use shared FailBatch and FailDatabase mocks with a pass/fail state across database operations. The coin-lock persistence failure test uses the new mock and verifies failed and successful persistence paths. Duplicate mock definitions are removed, and wallet test includes are reordered.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to a1de5

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: thepastaclaw

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 6.90% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the refactoring in RPC and wallet code and links it to review feedback on the provider transaction foundation.
Description check ✅ Passed The description directly explains the header cleanup, include sorting, test fixture consolidation, and validation performed for this changeset.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)

@PastaPastaPasta
PastaPastaPasta merged commit f77b9e1 into dashpay:develop Aug 18, 2026
43 of 45 checks passed
@UdjinM6 UdjinM6 added this to the 24 milestone Aug 20, 2026
PastaPastaPasta added a commit that referenced this pull request Aug 21, 2026
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants