Docs.
Every rule this office runs on — the loop, the formulas, the exact thresholds, every endpoint, what it refuses to do, and what this design is known to get wrong.
What this is
PSEPHOS reads every wallet that appears in Hyperliquid's public tape, weighs each one by the record the venue itself has stamped on its closed trades, and adds their open positions into a single figure per asset. Six hours later it reads the price again and marks its own figure.
It is psephology — the statistical study of elections — applied to positions instead of ballots. The whole argument is that a count where every voice carries equal weight is not a count but a headcount, and a headcount is decided by whoever is largest.
The name
ψῆφος — psephos — is the pebble an Athenian citizen dropped into the urn to cast a vote. It is the root of psephology, and it is why the mark is a sphere of pebbles: one stone, one voice. The stones below the waterline are the share already counted.
The vocabulary follows from the root rather than being invented around it — roll, voice, tally, quorum, declaration, returning officer. Nothing here is a metaphor stretched to fit.
The loop
Hyperliquid publishes its own tape, and every trade on it carries the wallets on both sides. PSEPHOS reads that tape and notes whoever appears. Nobody is invited onto the roll and nobody is curated onto it — the roll is simply whoever is actually trading.
For each wallet the venue publishes its realised fills, with the profit or loss stamped on every close. A voice is weighed on that record — the edge it has made per dollar traded, and how often it has been right — never on how large it is.
Each open position is sized against its own holder's book, so a whale putting one per cent on an asset cannot outvote a proven trader going in properly. Those convictions are multiplied by weight and added up. A long is a vote for, a short a vote against.
A result is declared only where the count can carry one. Too few voices, or too few of them proven, and the office declares nothing and says which of the two it was.
Six hours later the price is read again and the declaration is marked HIT or MISS. Moves inside the noise band are FLAT and excluded from the rate. The resulting figure is published whether it flatters the office or not.
Vocabulary
How a voice is weighed
Two independent signals, because either alone is gameable: a wallet can win often while losing money, or make money on one lucky trade in fifty.
hit = (winRate − 0.5) × 2 // −1 … +1 edge = (netPnl / volumeUsd) × 100 // per cent per dollar traded raw = 1.0 + hit × 0.6 + tanh(edge / 0.4) × 1.4 weight = clamp(raw, 0.25, 3.00)
Edge is measured per dollar traded, not per trade. Dividing profit by the number of closes averages the signal away — a wallet with a thousand closes and a thousand dollars of profit reads as “$1 a trade” and lands on neutral beside a wallet that made nothing. Against volume, a whale and a retail account with equal skill land on the same weight, which is the point: this weighs judgement, not capital.
Not scored as bad, not thrown out — counted at base weight 1.00 and reported separately, so any declaration can say how much of it rests on wallets that have proven nothing. Treating an empty record as a zero is not caution, it is inventing evidence.
How a count is taken
for each voter holding this asset:
share = min(1, |positionNotional| / voterEquity)
conviction = sign(positionSize) × share // −1 … +1
contribution = conviction × weight
net = Σ contribution / Σ weight // −1 … +1
reading = 5 + net × 5 // 0 … 10A position is normalised against its own holder's equity before it is counted. Without that step the tally is only a list of who is richest, and a whale putting one per cent of their book on an asset would outvote a proven trader going in properly.
The board shows two bars on every row. The thick one is this weighted figure; the thin one is the same wallets counted equally, which is what an ordinary whale-watcher shows. Where they disagree the weighting is doing work, and where they agree it is not — the reader can see which without taking anyone's word for it.
When a count is withheld
Two floors. Failing either means no figure is published at all, and the board says which one it was.
How declarations are marked
window = 6h after the declaration was filed move = (priceNow − priceThen) / priceThen × 100 |move| < 0.6% → FLAT (excluded from the rate) count was SPLIT → NO CALL (nothing was forecast) move went the called way → HIT otherwise → MISS hitRate = HIT / (HIT + MISS) edge = hitRate − 0.5 // a coin flip is zero
FLAT and NO CALL are reported but kept out of the rate entirely. Burying them in the denominator would flatter the office; counting a drift as a correct forecast is how a coin flip gets sold as skill.
No hit rate is stated at all below 25 scored declarations. Currently 0 are scored, so the record page shows a dash and a progress bar rather than a number.
The record page also splits the hit rate by the standing of the voices that carried each declaration. If PROVEN does not sit above UNPROVEN there, the entire weighting argument is unsupported — and that page is built to show it.
What is counted
Kept deliberately short. A declaration is only worth issuing where enough weighed wallets actually hold a position, and spreading across a hundred markets produces a wall of withheld counts and no insight. The list grows as the roll does.
Where the data comes from
This only works because Hyperliquid is transparent by design. Four public endpoints carry everything:
A voter's record is therefore not modelled, inferred or self-reported — it is read off the exchange that settled it. No API key is used anywhere in this office and nothing is bought.
The API
Open, unauthenticated, and the same endpoints this site runs on. Every GET below is a live link.
Connecting a wallet
Hyperliquid settles on its own EVM chain, so this needs an EVM signer — MetaMask, OKX, Rabby, or Phantom once its Ethereum side is switched on. Wallets are discovered through EIP-6963, so the chooser lists whatever is actually installed rather than whichever extension won the window.ethereum slot.
- It reads an address. No signature, no transaction, no deposit, no chain switch.
- It weighs you. Your realised record is read off the venue and run through the same formula as every voter on the roll.
- It compares you. Each of your open positions is set against what the weighed room decided: WITH, AGAINST or NO CALL.
- It does not enrol you. The roll stays only wallets that turned up in the tape on their own. Letting anyone add themselves to a count they can also read is how a poll becomes a petition.
What this is not
A count describes where the weighed room is standing right now. It is not a prediction and it is never a recommendation.
Nothing here follows any one wallet. The entire point is that no single voice, however large, carries a declaration alone.
The office publishes its own hit rate and refuses to state one before it has enough marks to mean something.
Every figure comes from the venue's public API. No keys, nothing bought, nothing taken from anyone's account.
Execution is not wired. The sizing panel computes real costs from real venue numbers, but nothing places an order.
A count is a reading of a room. What you do about it is entirely yours.
Known limits
What this design is known to get wrong. A reference that documents only the parts that work is marketing.
A wallet capturing spread can post a win rate near 100% across hundreds of closes and earn maximum weight — while holding no directional view at all. If such wallets come to dominate the roll, the count measures inventory rather than opinion. This is the most serious open weakness and it is not yet fixed.
Weight is computed from the fills the venue returns, which is a recent window. A voter who was excellent last year and poor this month is weighed on the recent part.
A hedge, a market-making leg and a conviction bet all look identical from outside. Nothing here can tell them apart.
Positions are re-read on a rolling basis, so a declaration reflects the room as of the last sweep, not this instant. The board stamps when each was filed.
Computing one needs each asset's maintenance margin, which this office does not read. An invented liquidation price on a desk built to argue against invented numbers would be the worst thing on the page.
The verification window has not yet matured on enough declarations to state a hit rate. Until it does, every claim on this site about the value of weighting is a claim, not a result.
How to judge this office
Not by whether a call went your way. Three numbers decide whether any of this was worth building:
- Is the hit rate above a coin flip? If declarations resolve at 50%, the count carries no information and everything else on this site is decoration.
- Do decisive counts beat narrow ones? A count of 8.5 should be right more often than a count of 5.6. If it is not, the scale is noise.
- Do PROVEN voices beat UNPROVEN ones? This is the weighting argument itself. If the two bands hit at the same rate, weighting adds nothing and the honest thing is to say so.
All three live on the record page, computed from marks rather than claims, and none of them are edited to flatter.