Skip to content

SPARC substring fallback over-rewards modern SPARC at the 1987 LEGENDARY 3.0x rate #8237

Description

@Scottcjn

Found during the 2026-08-20 PR review sweep (surfaced by the sparc-solaris-miner #7 review).

Defect

`normalize_id("SPARC-T")` yields `sparc_t`, which matches no exact multiplier key and then falls through to the substring match on `"sparc"` — the generic 1987 entry at 3.0x LEGENDARY. A 2013 SPARC T5 therefore grades as 1987 silicon.

Larger historical impact: on main, the SPARC miner sent bare `"sparc"` in `device.arch`, which is the highest-paying SPARC row — so every SPARC box to date has been paid at the 1987 rate regardless of actual generation.

What's already fixed

sparc-solaris-miner PR #7 (merged 2026-08-20) makes the miner report specific generations, and was verified against the node's real `calculate_poa_multiplier`: every generation now grades equal-or-lower than before. That stops the bleeding going forward but does not correct node-side substring fallback or historical over-payment.

Suggested fixes

  1. Node-side: substring fallback for exotic families should pick the most conservative (lowest) multiplier in the family, not the first/highest match — same fail-closed principle as RIP-309b.
  2. Audit historical SPARC payouts (`miner_attest_recent` + epoch_rewards for `device_family='SPARC'`) to quantify the over-payment.
  3. Related hygiene: `antiquity_class` and the proposed `identity` block are self-asserted client fields with zero node-side consumers today — if anything ever grades on them, they need server-side validation first (see finding-controls-that-fire-only-on-honest-clients).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions