Field manual
How Polaris reads Robinhood Chain, what every number means and where each one comes from
The Drift
The Polaris scanner reads every ERC-20 Transfer from the zero address on Robinhood Chain, which is how a token's first supply appears. Each new contract is dated from its creation transaction, so a token that mints again weeks later never shows up as newborn. Tokens stay on the radar for 48 hours after birth.
Holder counts and transfer counts refresh every few minutes from the chain explorer. The scanner keeps its place by block number, so nothing is skipped across restarts.
North Score
A number from 1 to 99 for how hard a newborn token is pulling the Drift. Every input is on-chain and the formula is open:
holders = log10(holders + 1) / log10(5000) capped at 1
mints = log10(mints seen + 1) / 3 capped at 1
fresh = 0.2 + 0.8 × (1 − age / 48h)
trust = 1 if the source is verified, else 0.7
score = (0.45·holders + 0.30·mints + 0.25·fresh) × trust × 100
On the radar, a token's distance from the centre is 100 minus its score, its bearing comes from its address and its size from its holders. The highest score is the North Pick.
North Vaults
Each North Vault is an ERC-4626 vault behind its own PolarisProxy. Yield is streamed in linearly: when rewards arrive they unlock second by second over the stream, so the share price climbs smoothly and there is no single moment to front-run.
The ranking uses the same three factors for every vault:
depth = clamp(log10(TVL) / 9, 0.3, 1)
exit = clamp(log10(withdrawable) / 7, 0.3, 1)
score = APY × depth × exit
Before any deposit the terminal checks two things on-chain: the vault is active in PolarisRegistry, and the vault's asset() is the registry asset. The registry refuses to list any vault whose asset does not match. Deposits can be paused by the owner; withdrawals cannot.
On testnet the vaults hold pUSD, a testnet stable anyone can claim once a day from PolarisDollar.drip().
Beacon
One ping per UTC day through PolarisBeacon.ping(). Pinging on consecutive days builds a streak, and a missed day restarts it at one.
xp per ping = 10 + 5 × min(streak − 1, 20)
holder boost = ×1.5 while the wallet holds 10,000 $POLARIS
Every ping emits Pinged(observer, day, streak, xp, gained). The leaderboard is rebuilt from these events, so anyone can recompute it.
Contracts
Every contract is a UUPS implementation behind a PolarisProxy (ERC-1967). Addresses never change across upgrades, and only the owner can authorise one. All sources are verified on the explorer.