Skip to content

Confirm Tari payouts on-chain with a view-only minotari wallet (sibling of #381) #462

Description

@VijitSingh97

Sibling of #381 (Monero view-only payout confirmation), for the other half of the merge-mine. The Tari case is arguably more valuable: Tari merge-mining here is solo — the whole block reward lands at once when your hashrate finds a Tari block (~72 days apart at current prod hashrate per the v1.3.1 earnings headline), so a payout is a rare, large event the operator really wants ground-truth confirmation (and an alert) for. Today nothing checks one ever landed: TARI_WALLET_ADDRESS is handed to p2pool's --merge-mine (docker-compose.yml:246), the coinbase goes to that address, and the dashboard only shows the time-to-block estimate.

Verified upstream mechanics (tari.com exchange-integration lesson, checked 2026-07-11)

  • minotari_console_wallet supports read-only wallets: created from the private view key + public spend key (menu option 3, "Create a read-only wallet using a view key"); the main wallet exports both via minotari_console_wallet --base-path <dir> export-view-key-and-spend-key. A view-only wallet watches received funds and cannot spend.
  • The console wallet exposes gRPC (grpc_enabled = true in its config.toml) with GetCompletedTransactions() in wallet.proto — the dashboard already speaks Tari gRPC (client/tari/), so the client shape exists.

To verify before implementation ([TODO: verify upstream])

  • That a view-only wallet detects p2pool merge-mine coinbase outputs specifically (the exchange doc confirms one-sided deposit watching; coinbases to wallet_payment_address should scan the same way, but prove it on a testbed before building).
  • Non-interactive creation: option 3 is an interactive menu — find the scriptable path (CLI flags / init file) for container automation, or an FFI route.
  • Restore height / wallet birthday support for view-only wallets (avoid a genesis rescan; Confirm payouts on-chain with a view-only wallet (monero-wallet-rpc against the local node) #381's payout_scan_height analogue).
  • Which image ships minotari_console_wallet (the stack pins quay.io/tarilabs/minotari_node; a sibling wallet image likely exists — pin by digest like the node).

Proposal (mirrors #381's structure)

Acceptance

  • Keys unset: no new container, dashboard unchanged.
  • Keys set on a local-node stack: wallet container healthy and synced view-only; a (testnet or historical) coinbase to the payout address appears as a confirmed row and fires one alert; restart replays nothing.
  • The view key never appears in logs, docker inspect, or apply output.

Depends on / interacts with: #381 (shared payouts table + alert event), #196 (payout series), #255/#377 (container hardening patterns), #103 (remote-tari would gate the feature off, like #381's remote-mode rule).

Metadata

Metadata

Assignees

No one assigned

    Labels

    dashboardMining dashboard web UIenhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions