REAX.docs Pre-release · not on testnet
MenuValidator guide

Participate

Validator guide

REAX validators do not grade answers against their own opinion. They measure whether each miner serves the approved model faithfully, using private schedules of probes that travel the same gateway path as ordinary requests, and they turn that evidence into weights once per epoch.

Provisional

Everything on this page follows design spec revision 0.6, which is not frozen; every constant marked (provisional) can change. Only one REAX-operated validator exists, and only in the local harness. While there is a single validator, independent validation and cross-validator consensus are not claimed.

Responsibilities

Validators receive no customer content and no organic metadata. They must be independent of other validators.

Private schedules

At the start of each epoch the validator commits to a secret seed s_e and binds it to a public randomness beacon it cannot predict:

c_e = H("reax/sched/v1" ‖ s_e ‖ validator_hotkey ‖ epoch ‖ policy_digest)seed = HKDF(s_e, salt = drand_randomness(r_e), info = "reax/schedule/v1")

The commitment c_e goes into the validator's append-only ledger (anchored on chain where the chain profile allows). The drand round r_e is scheduled at least 60 s (provisional) after c_e, and no scored probe or burst is dispatched before r_e is published. One commitment can therefore never produce two valid schedules.

Allocation never depends on score or rank. Each validator has a disjoint partition of items, and items are grouped into independence clusters: at most one observation per cluster per miner per window counts.

Probes through the gateway

Probes are injected through the gateway's validator-to-gateway API. They leave the gateway with the same ingress caller ID, TLS configuration, egress addresses and connection pooling as organic traffic. The gateway-to-miner envelope contains no data class, no probe, organic or burst flag, and no customer or tenant identifier, and receipts carry the same fields for every dispatch so they do not reveal probe status.

For each injected dispatch the validator receives a gateway-signed record: dispatch_id, miner hotkey, miner_payload_sha256, monotonic dispatch and receipt timestamps, outcome and the miner-signed response. Only timing is gateway-attested.

Where indistinguishability is claimed

Probe timing and field shapes follow privacy-reviewed organic traffic profiles on the GDPR tier. Content-level indistinguishability is not assumed, which is why the organic identity shadow is mandatory before real traffic. The permissionless route carries only validator-generated synthetic traffic, so indistinguishability is not claimed there at all.

Identity stream and labelled pool

SourceWhat it isUsed for
Identity streamFresh unlabelled items from versioned deterministic generators, each dispatched exactly onceIdentity statistic t = TV(p_miner, p_ref)
Labelled poolSealed items with registered provenance, per-validator partitionQuality non-inferiority d, availability, latency
Burst itemsFresh sealed unlabelled items generated after r_e, same generator mix as the identity streamVerified capacity and the burst identity audit
Reference outputsp_ref computed by the reference processor on the exact dispatched bytesPairing partner for t and d; never a label
Organic shadowDesigned, disabled by default (see incentives)Organic identity verdict only

Label provenance

Every labelled item carries a label_source of deterministic (computed by a registered checker), resolved (fixed before an external resolution) or human (at least two independent annotators with an agreement statistic). A model may draft question text but must never decide a label or break a tie. Agreement between models is a divergence signal, not ground truth. A family whose items lack registered provenance is unsupported.

Reuse rules

Epoch pipeline

A ledger epoch is epoch_tempos = 4 chain tempos (provisional), with the tempo taken only from the chain-profile readback. Fidelity is tested over windows of W = 6 consecutive, non-overlapping epochs, each evaluated exactly once at window close.

  1. Commit. Publish c_e; wait for drand round r_e; derive the schedule seed.
  2. Schedule. Per miner and epoch: n_lab = 48 labelled items, n_id = 334 identity items and b_e = 4 capacity bursts (all provisional). If the labelled pool or reference compute cannot cover this, reduce uniformly to a floor; below the floor the family is unsupported network-wide for that epoch and no miner is penalized.
  3. Dispatch. Inject via the gateway; collect gateway-signed dispatch records.
  4. Pair. Match each observation with its reference output on the exact payload bytes.
  5. Window tests. At window close, run the identity, quality and burst-audit tests (and the organic verdict, when enabled). Apply the two-strike rule.
  6. Gain. Compute each miner's gain, apply the ramp, group miners by operator and water-fill under the per-operator cap. Abstain if the rules require it.
  7. Submit. Run the fail-closed chain checks, commit the weight vector, and verify the applied weights after the automatic reveal.
  8. Publish. After epoch close: c_e, r_e, the root of the validator's own probe leaves, and aggregate counts and pass rates. Seeds, leaves and item contents are never published.

Scoring summary

Identity and quality are hard gates, not scores. Among miners that pass them, the raw gain is:

g_i = F_i × A_i × (0.8 + 0.2 × L_i) × κ_i
F_i
1 unless the miner is fidelity_failed in a family it serves (two consecutive failing windows).
A_i
Availability: miner-attributable successes over miner-attributable scheduled attempts; eligibility needs A ≥ 0.50 (provisional).
L_i
Latency credit in [0, 1], capped so that anything within (1 + η) of the reference earns full credit.
κ_i
Verified serving capacity in reference units, from synchronized audited bursts.

The full definitions and every formula are in scoring and incentives.

Weight submission and commit-reveal

REAX targets Bittensor's timelocked commit-reveal (CommitRevealWeightsVersion 4): the validator commits an encrypted weight vector, and the chain reveals and applies it automatically after the reveal period, without a separate reveal transaction. Commit-reveal delays weight copying for the reveal interval; it does not stop copying afterwards, shared operators or collusion, which is why private schedules and monitoring stay required.

Fail-closed rules

Post-reveal readback

LastUpdate is refreshed when a commit is accepted, not when the revealed weights are applied, so a fresh LastUpdate does not prove application. The adapter pairs commit inclusion with the later weights-revealed event and the applied weight state, canonicalizes both sides to u16 and compares them within ±1. A missing reveal raises reveal_missing, a larger difference reveal_mismatch; two consecutive failures pause submission. The adapter also publishes the weight mass that landed on UIDs re-registered between commit and reveal.

Abstain

abstain means no weight transaction for the epoch, plus a signed abstain receipt. It applies when there is no supported family or candidate, the cap is infeasible, the chain profile mismatches, the item pool or reference compute is exhausted, the multi-family gate is closed, capacity proof is missing for external miners on a non-local network, or a chain constraint would be violated. On local and test networks the policy is pure abstain.

What the code does today

The private reference implements a provisional slice of this pipeline in reax_subnet.validator (score_epoch, weights_from_epochs) and reax_subnet.chain:

Several spec 0.6 elements are not implemented yet: the capacity prober, identity generators at production scale, the reference processor, the joint gateway Merkle root, the drand-bound schedule and actual commit transactions. See the roadmap.