Skip to content
Robotensor Competition
All pages

Vector · Reference

Duel records

The files a validator publishes, how every identifier in them is derived, and how to deal a duel's units again from the record and one chain block.

Look-up page — built for scanning

The result store

Every event is written to an append-only result store, which a validator can mirror to a public Hugging Face dataset; the competition dashboard reads the same files.

FileContents
index-NNNN.jsonlOne canonical record per event: a genesis, a duel or a vacate. The source of truth; it only grows
events/<event_id>.jsonOne event in full: its units, per-task scores, verdict, seed block, benchmark commit and contract version
media/<sha[:2]>/<sha>.mp4Clips, by content hash: each scored unit's demonstration and both sides' rollouts
head.jsonThe current king
queue.jsonThe entries waiting to duel, and the one duelling now
running.jsonThe duel in progress and how far it has got
champions.jsonThe champions paid now, and each one's share
manifest.jsonThe store's layout version

Identifiers

All hashes are sha256 of UTF-8 text, written as lowercase hex, with fields joined by |.

IdentifierDerivation
Submission keyThe first 16 hex characters of sha256(repo@revision), the revision as 40 lowercase hex characters
Duel idsha256(spec version | challenger key | challenger revision | king key or none | king revision or none)
Event idsha256("event" | kind | sequence | duel id), where sequence is the validator's own event counter; for a vacate, the last field is the king's submission key
Entropy<seed block>:0x<seed block hash>, the hash as 64 lowercase hex digits

Dealing units

For each task in contract order, a counter yields integers from sha256(vector/units/3 | duel id | entropy | task | n) for n = 0, 1, 2, …, taking the first 8 bytes big-endian and rejecting draws that would bias the modulo. Each run of the task takes 20 candidate scored-scene seeds, then 20 candidate demonstration seeds distinct from them, all in [2,000,000, 2³¹ − 1). The expert's first success in each list is used; a unit is void only if every candidate in a list fails.

Because a task's units are drawn in order, a smaller duel's units for each task are the first units of that task in a larger one.

Checking a record

  1. Read the seed block's hash from the chain, and form the entropy.
  2. Recompute the duel id from the record's two submissions and the contract version.
  3. Deal the units, and compare each unit's published scored-scene seed with its candidates.
  4. Check each demonstration against its published sha256 and clip.
  5. Recompute every task's rate and the two scores from the per-unit outcomes, and the verdict from the margin.

The expert's own trajectory is not reproducible from a seed (its planner stops on a wall clock), so what is checked is that each scene was one the duel was entitled to use and that the verdict follows from the published outcomes.

Duel records · Docs · Robotensor Competition