Reference

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.

Running right now
wallets sighted
records weighed
declarations filed
declarations marked

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

ISight

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.

IIWeigh

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.

IIICount

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.

IVDeclare — or withhold

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.

VMark

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

votera wallet that appeared in the venue's public tape. Nobody is invited and nobody is curated onto the roll.
voiceone voter's open position on one asset, sized against that voter's own equity, then multiplied by their weight.
weightwhat a voter's judgement is worth, from their realised record. Bounded 0.25 to 3.00 so no single voice decides a result.
standingthe band a weight falls in: PROVEN ≥1.80, STANDING ≥1.10, WEAK ≥0.70, DISCOUNTED below that, or UNPROVEN when the record is too short to judge.
convictionhow much of a voter's own book is on one asset, signed by direction and capped at 1, so a single leveraged bet cannot run away with the count.
countthe weighted sum of every voice on one asset, expressed 0–10 where 5.00 is a dead heat.
declarationa count the office was willing to publish: CARRIED, LEANING, SPLIT, LEANING AGAINST or REJECTED.
withhelda count that existed but was not published, because the room behind it was too thin or too unproven.
markthe verdict on a declaration once the price has moved: HIT, MISS, FLAT or NO CALL.
turnouthow many voices were present on an asset at the moment of counting.
concentrationthe share of a count carried by its single largest voice. Above half, it is a copy trade wearing a poll's clothes.

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.

Under 20 closed trades: UNPROVEN

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 … 10

A 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.

CARRIED≥ 7.00
LEANING5.60 – 7.00
SPLIT4.40 – 5.60
LEANING AGAINST3.00 – 4.40
REJECTED< 3.00

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.

voices present6
fewer than this and there is no room to read
proven share34%
a number computed from three unproven wallets is not a weak signal, it is a fabricated one

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

reading the covered list…

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:

recentTradesthe tape — who is trading right now, both sides named
clearinghouseStatethe position — what a wallet holds, and how large against its own book
userFillsthe record — every close, with the venue's own profit and loss stamped on it
metaAndAssetCtxsprice, prior day close, 24h volume, funding and open interest

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.

service state, roll size, sweep countdown, verification window
price, 24h change, volume, funding and open interest for every counted asset
cached two seconds, so a hundred open tabs still cost the venue one call
the latest count per asset plus the declaration history
the current count for one asset, with the voices behind it
the voter roll: address, weight, standing, record
one voter's record and positions; read live if not yet on the roll
weighs any wallet and sets its positions against the room
does not enrol the wallet — the roll stays wallets that appeared in the tape on their own
the office's own hit rate, or a refusal to state one
whether PROVEN voters actually beat UNPROVEN ones
force a sweep now
30 second cooldown — the sweep hits a public venue that owes this office nothing

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.

What connecting does, and does not
  • 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

Not a signal service.

A count describes where the weighed room is standing right now. It is not a prediction and it is never a recommendation.

Not copy trading.

Nothing here follows any one wallet. The entire point is that no single voice, however large, carries a declaration alone.

Not a claim to be right.

The office publishes its own hit rate and refuses to state one before it has enough marks to mean something.

Not private data.

Every figure comes from the venue's public API. No keys, nothing bought, nothing taken from anyone's account.

Not a trading desk.

Execution is not wired. The sizing panel computes real costs from real venue numbers, but nothing places an order.

Not financial advice.

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.

Market makers can look like geniuses

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.

The record is a window, not a life

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.

Positions are read, not intentions

A hedge, a market-making leg and a conviction bet all look identical from outside. Nothing here can tell them apart.

A count is a snapshot

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.

No liquidation price is shown

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 record is still empty

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:

  1. 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.
  2. 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.
  3. 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.