Skip to content
Documentation

How Peer works

Read it straight through and you will never meet an equation. Every place one belongs, it is folded into a Detail block you can open. Every chart on this page is drawn by calling the same functions the protocol calls.

01

The idea

Peer lets you take a position on how a trader does, rather than on what they hold.

FOMO is a social app where people trade in public. You can already follow someone there and watch every position they open. What you cannot do is act on the view you form while watching. Peer is the missing half: it turns a trader into something you can be right or wrong about, with money on it.

A market on Peer is a plain yes-or-no question with a deadline. Will @unipcs be up in 24 hours? You buy the side you believe. If you are right, each share you hold pays out 1 USDG. If you are wrong, it pays nothing. There is no leverage, no liquidation, and nothing to manage in between.

The one-line version
A trader is the underlying. A market is a binary option written on their performance. The price you pay is the market’s estimate of the odds.
02

What you are betting on

The trader, not the token.

This is the distinction the whole product rests on, so it is worth being blunt about. If you buy a memecoin, you are exposed to that coin. If you take a position on a trader, you are exposed to their judgement across everything they hold, including the coins they have not bought yet.

A trader who is up because they called one thing correctly and a trader who is up because they are consistently early both show up the same way here: as a line that goes up. What that line is made of is theirs to decide and yours to have an opinion about.

What this is not
It is not a copy-trading product. Nothing you do here places a trade on FOMO, and the trader is not your counterparty. Someone else taking the other side of your market is.
03

One trade, end to end

Here is every step of a $100.00 ticket, with the real numbers from the live market on @unipcs.

  1. 01

    Pick a trader and a question

    Will @unipcs be up over the next 24 hours? The market closes at a fixed time, and the answer is decided by their total account PnL on fomo, not by anybody’s opinion.
  2. 02

    Look at the price

    Up is trading at 43¢. That is the market saying it is roughly 43% likely. A price is a probability here, which is the single most useful thing to know about this product.
  3. 03

    Buy the side you believe

    $100.00 at 43¢ buys 229.89 shares. There is no fee on the way in.
  4. 04

    Wait, or sell early

    Your position is worth what the market will pay for it at any moment. If the odds move your way you can sell before the close and take the difference. Nothing forces you to hold to settlement.
  5. 05

    Settlement decides it

    At the close the keeper publishes the trader’s total PnL, and every share on the winning side becomes worth exactly 1 USDG. Losing shares become worth nothing.
  6. 06

    Redeem

    229.89 winning shares redeem for $229.89 gross. The protocol takes 2% of the winnings only, which is $2.60, leaving $227.29. That is a 2.27x return on the ticket. If you were wrong, you lost the $100.00 and nothing else.
DetailWhere the fee actually goes

The $2.60 taken from this ticket splits three ways, on chain, at redemption:

liquidity          $0.26   10%
flywheel           $2.34   90%
  burn PEER         $1.17   45%
  to holders       $1.17   45%
trader escrow      $0.00   0%

Trader escrow is 0% in v1, so that line is currently zero. The machinery is still in the contract and turning it back on is one constant. See if you are the trader.

04

Total account PnL

One number per trader: how much money they are up or down on fomo, all time, in dollars. Every market on Peer settles against it.

It is the figure fomo’s own leaderboard ranks people by, and it is the figure the trader is judged by socially, which is exactly why it is worth trading. A market asks whether it is higher at the close than it was at the open. Nothing else about the account matters to a settlement.

Windowed PnL is the same question
A card asks will they be up over the next 24 hours. That is true precisely when total PnL rose over those 24 hours, so the market is written on the total and the window is the gap between two readings of it. One number to get right, not two.

The number is signed. Plenty of accounts are down, and a trader at -$40,000 who ends the day at -$25,000 was up over that window. Direction over the window is the whole question; the level it starts from is not.

DetailWhy not the flow-neutral index this site used to describe

The Peer Index is a time-weighted, flow-neutral return series: the honest way to score a portfolio, and the right answer eventually. It needs three things first, and v1 has none of them: a resolver that maps a fomo handle to a wallet set, a price waterfall to value the holdings, and an indexer walking several chains to see the flows.

Total PnL needs a leaderboard read. It also survives the problem that rules out raw portfolio value: money moved in is not profit, so a deposit does not move it. That is the property the index was built for, and PnL already has it.

So this is a deliberate retreat, and it is written down as one. The index machinery is still in the repository and the interface still charts a line per trader; that line is their PnL, not an index level.

05

Why a deposit is not a profit

The reason the underlying is PnL and not the balance in the account.

Suppose a market settled on portfolio value. A trader wires in $10,000 an hour before the close, their balance jumps, and every holder of the up side wins a bet they did not earn. Anybody watching could see that coming and take the free side of it, which is not a market, it is a tap.

Profit and loss is already net of that. Depositing moves the balance and leaves PnL exactly where it was; only a trade that made or lost money moves it. There is no formula here and no correction to apply, which is the point: the property the index had to be constructed to guarantee is one this number has by definition.

What can still move it without a trade
A token in an open position repricing. That is not a loophole, it is the exposure being traded: a trader holding something that doubles overnight did make money overnight, and a market on their PnL should say so.
06

Where the number comes from

A keeper that reads fomo every five minutes and writes down what it saw.

fomo has no developer API and does not publish its traders’ wallet addresses, so the profiles are the entire surface. The source of truth is fomo’s own leaderboard, read by a service that never stops, and the reading is kept as a file rather than a number in a database.

  1. 01

    The keeper holds a session

    The leaderboard is behind a login, so the keeper keeps one browser page open and lets the site’s own SDK refresh its token. A read from outside a browser is refused by fomo whatever headers it carries, so this is not a preference: it is the only thing that works.
  2. 02

    Every five minutes, a snapshot

    Each read writes one file: the time, the source, and every listed trader’s handle and total PnL. About a kilobyte, 288 a day. This is the evidence, and everything downstream is derived from it.
  3. 03

    Published, not just stored

    The keeper serves its own snapshots and settlements read-only. A settlement commits the hash of a file, and the hash of a file nobody can read proves nothing to anyone.
Abbreviated figures are refused
If a source can only offer $6.8M, then a trader who made forty thousand dollars today reads as $6.8M at both ends of the window, and every holder of the call loses a bet they won. The parser rejects any rounded figure rather than settle on one.

The windows are measured here rather than requested. fomo’s window=24h and window=7d return byte-identical rows, so both are decorative: there is one board carrying one lifetime total, and a 24h market is that total sampled a day apart from our own snapshots.

07

Snapshots and the median rule

Neither end of a market is decided by a single reading.

A market’s strike is the trader’s total PnL at the open and its settlement is their total PnL at the close, and both are taken as the median of the three snapshots nearest that moment. Three reads spanning fifteen minutes is what makes a last-second flush worthless: moving one reading moves nothing, because the median ignores it.

strike     = median(3 snapshots nearest opensAt)
settlement = median(3 snapshots nearest closesAt)
outcome    = settlement > strike ? call : put

Only snapshots at or before the moment being valued are eligible. A settlement that can see past its own close is not a settlement.

A snapshot older than 20 minutes at the moment being valued is not eligible, so a keeper that stopped reading cannot have its last good file stretched over a gap it did not observe. If three usable snapshots do not exist, the settlement job refuses to resolve rather than guess, and the market becomes a void. See when a market voids.

DetailWhat the strike actually is on chain

The contract holds strike as an unsigned field, because it was designed for an index level that starts at 1000 and cannot go below zero. Total PnL is signed, so the baseline is stored offset by 10^30 and read back through that offset. One place in the codebase knows about it.

The contract never reads the strike. It is a commitment, not an input, which is exactly why it has to be right: it is the market’s public record of what the number was at the open, written before anyone knew the outcome. A baseline that could be reinterpreted afterwards would be worth nothing.

08

The two launch markets

One question, asked at two horizons: will this trader be up over the next day, and over the next week? Ten traders, two markets each, twenty live markets. Up is a call on their PnL, Down is a put.

Calls and puts · 1 day

Sign of 1-day PnL

Their PnL over one day. The call pays if it ends positive, the put pays if it ends negative.

Calls and puts · 7 days

Sign of 7-day PnL

The same question with room to breathe. A week of PnL, one side pays.

Both settle on the same underlying: the sign of the trader’s PnL over the window, read off the Peer Index. Only the horizon changes, which means the index only has to be right once for every market on the platform to be right.

Further templates are already defined in the protocol: activity markets on whether they open a new position, target-return and range-bound markets shaped by their volatility, streaks, and head to head pairs. They list once the launch pair has volume; nothing about the machinery below changes when they do.

09

How the odds open

Every v1 market opened at exactly 50c, on purpose.

A market with no trades in it still needs a price, and there are two ways to supply one: compute a probability from the trader’s history, or decline to and let the first traders find it. v1 declines. All twenty markets were listed at 50%, seeded with $10.00 of liquidity each, and moved from there by whoever traded first.

A coin flip is the honest opening price
Over 24 hours, the difference between a good trader and a lucky one is almost entirely noise. A model that opened @unipcs at 58% would be claiming a precision the evidence does not support, and a listing price is not a free guess: it is the price the first person pays. Opening flat says what is actually known and lets the market do the estimating.

The pricing model is still in packages/core and the contract still stores an opening probability per market, so seeding from a model is a listing-time argument rather than a rewrite. It stays unused until there is enough of our own history to justify a number other than a half.

DetailWhat the model would do, when it is turned on

A binary on a trader is a digital option, and its price is the probability of finishing above the strike. Two decisions in it matter far more than the formula.

Skill is shrunk hard toward the average. Each trader’s own drift is blended toward the cohort mean, and the whole result toward a coin flip, until there is real history to justify anything else. With no history at all the model returns 50%, which is where v1 starts everything anyway.

The tails are fat, and the model says so. A normal distribution systematically underprices big moves on a memecoin book, and big moves are exactly where whoever seeded the market gets picked off. A Student-t puts real probability in the tails.

w        = historyDays / (historyDays + priorDays)
μ        = w · traderDrift + (1 − w) · cohortDrift
scale    = σ_window · √((ν − 2) / ν)
z        = (ln K − (μ·T − σ_window² / 2)) / scale
P_model  = 1 − T_ν(z)

α        = clamp(historyDays / priorDays, 0, 1)
P        = clamp(α · P_model + (1 − α) · 0.5, 0.05, 0.95)

σ_window is the per-period vol scaled to the option window; the scale is deflated because a location-scale t has sd = scale · √(ν/(ν−2)).

The final clamp means no market can ever open at certainty, which caps how badly a wrong model can hurt whoever seeded the book.

10

How the price moves

There is no order book. A market maker holds reserves of both outcomes, and the price is the ratio between them.

An order book needs two people who want opposite things at the same moment, which a market on a specific trader closing on a specific day will rarely have. So Peer uses an automated market maker instead: it always has a price, and it always takes the other side.

Buying Up removes Up shares from the reserve and adds to Down, so the price of Up rises. That is the entire mechanism, and it is why a big order costs more per share than a small one.

47¢66¢86¢$0$30k$60k
Price of UpCumulative buying pressure into Up, against $50K of liquidity
The number on the button is a probability
A share pays 1 USDG if it wins and nothing if it loses, so a price of 46¢ means the market believes there is roughly a 46% chance. That is why the interface shows cents and a multiple side by side: they are the same fact said twice.
DetailThe closed form

A fixed-product market maker, the same construction Gnosis conditional tokens use. With reserves R_up and R_down:

p_up       = R_down / (R_up + R_down)

sharesOut  = I × (R_up + R_down + I) / (R_other + I)

The price is the opposite reserve over the total, which is the counter-intuitive part: the scarcer an outcome's shares are in the pool, the more the market is charging for them.

A market opens by seeding those reserves so the ratio equals the model probability from the previous section. From that point the model is out of the picture and the price is whatever people disagreeing with each other makes it.

11

What you get paid

A winning share is worth 1 USDG, less 2% of the profit. Cheaper shares pay more, because they were less likely to win.

0.0x10.6x21.1x50¢95¢
Payout multiple, net of feePrice paid per share

The curve is steep at the left because that is where the unlikely outcomes are. A share bought at 10¢ returns nearly ten times if it lands; a share bought at 90¢ returns about a tenth. Neither is a better deal than the other. They are the same deal at different odds.

2% of winnings, at redemption only10%Market liquidity90%PEER flywheel
The fee is charged once, at redemption, on winnings only. Trading itself is free, and a losing position is never charged anything.
DetailThe exact arithmetic
winnings = shares − shares × avgPrice
payout   = shares − winnings × fee
multiple = (1 − fee × (1 − p)) / p

Worked on the ticket from section three: 229.89 shares bought at 43¢ redeem for $229.89, of which $129.89 is profit. The fee is 2% of that, $2.60, leaving $227.29.

12

How a market resolves

Settlement is the median of the three snapshots nearest the close, not a reading at the bell.

If a market settled on a single instant, the person with the most to gain from moving that instant would be the trader themselves. A median over the final quarter of an hour removes that: to move it you would have to hold a manipulated figure for the whole window, in public, against anyone willing to trade against you.

t−35mt−30mt−25mt−20mt−15mt−10mt−5mt−0mmedian of the final 3closeA single print at the bell moves the median by nothing.
Snapshots every 5 minutes. Settlement takes the median of the 3 nearest the close, so no single reading decides anybody's market.
  1. 01

    The window closes

    Trading stops at closesAt. The contract will not accept a buy after it and will not accept a resolution before it.
  2. 02

    The settlement job reads its own evidence

    It takes the median of the three eligible snapshots nearest the close and compares it to the baseline recorded at the open. Higher settles Call; anything else settles Put. The comparison is one shared function, so the number printed by the dry run is the number that goes on chain.
  3. 03

    The outcome is committed with its evidence

    The resolver sends the outcome and keccak256 of the settlement file. The file names both PnL figures, the window, and the snapshots they came from, and it is served publicly, so the hash on chain is checkable by anyone who cares to.
  4. 04

    Winners redeem

    Every share on the winning side becomes worth exactly 1 USDG, less the 2% fee on winnings. Losing shares are worth nothing. Redemption is pull, not push: nobody has to run a distribution.
The resolver is one key, and that is a known limit
In v1 a single resolver key posts outcomes. It is not trusted to be honest so much as observed: every figure it settles on is published, and the hash it commits is of a file anyone can fetch and recompute. The backstop is in the contract rather than in a promise, and it is described below.
OpenSettlingResolvedVoidcloseundisputedany void condition, at any timeResolved pays the winning side. Void refunds every position at cost.
A market is open until it closes, resolved once the settlement lands, then redeemable. Any void condition can interrupt at any point, and voiding refunds every position at what it cost.
13

When a market voids

Voiding returns everybody’s money at cost. It is the designed answer to not knowing, and v1 leans on it.

The condition that actually fires in v1 is the first one. Everything the protocol can settle comes from snapshots, so a gap in the snapshots is a gap in the evidence, and a market whose window contains one cannot be resolved from anything.

Oracle liveness

The keeper stopped reading, so the window has no snapshots to settle from. Three failed reads in a row and it says so in the log by name; every market closing in that gap is refunded rather than guessed at.

Resolver stale

Nobody resolved within 7 days of the close. Anyone may then void the market from the contract, without permission. This is the backstop against the v1 resolver key going dark and stranding collateral forever.

Trader opted out

The subject signed to delist themselves. Every open market on them voids.

Guardian void

A separate cold key can stop a market that should not settle. It is a third key, held apart from the owner and the resolver on purpose.

Voiding is not a failure mode
A protocol that always settles is a protocol that will sometimes settle on a number it cannot defend, and that is worse for everyone holding a position than getting their money back. The settlement job refuses to resolve on missing or stale evidence rather than reaching for the nearest number.

Three further conditions sit in the contract for the index-based markets this protocol is built toward: the wallet set behind a handle changing, a portfolio too small for percentage moves to mean anything, and a book the price sources cannot value. None of them can fire on a market written on total PnL, and they are named here because they are in the enum rather than because v1 uses them.

14

If you are the trader

You are owed money whether or not you have ever heard of Peer, and you can leave with one signature.

Listing is permissionless, so a market can exist on you without your involvement. The contract carries an escrow that accrues to a hash of your handle — no wallet needed, nothing to opt into — and its share is currently set to 0%, because v1 has nobody to process claims. Turning it back on is a single constant, and anything already accrued is still there.

One signature opts you out entirely, which voids every open market on you and refunds each position at cost.

Nothing is accruing right now
With the trader share at 0%, no escrow is being added to. The balance is whatever accrued while the share was non-zero, which for markets listed in v1 is nothing. This page will say otherwise the moment that constant changes, because it reads it.
15

The interface

One card, repeated everywhere, and the token system it is built from.

Peer is a social profile with a fund card underneath it and live odds where the Buy button would be. Every screen in the product is a variation on this component, which is why the leaderboard, the discover grid and the hero all feel like the same object.

Unipcs

Claimed handle
@unipcs·373K followers

"If the Lord will, we shall live, and do this, or that." - James 4:15

PnL · 24H2,791.36
+4.9%
Index
2,791.36
Vol (σ)
119%
Win rate
72%
Volume 30d
$18.9M
Will @unipcs be up over the next 24 hours?$106K vol
0
1
2
3
4
5
6
7
8
9
10
Accent--accent
Up--up
Down--down
Sunken surface--surface-sunken
One neutral ramp, eleven steps, generated in OKLCH so the perceptual distance between neighbours is even. Every step carries a trace of the brand violet (hue 288), which is why white surfaces sit against the accent instead of fighting it. Nothing on the site is pure black or pure white.
Display--step-6
Heading--step-3
Lede--step-1
Body--step-0
A fluid scale: every step is a clamp() between a phone size and a desktop size, so type grows with the viewport rather than jumping at a breakpoint. Bricolage Grotesque carries the display voice; Instrument Sans runs the interface, chosen for its tabular figures because most of this product is a screen full of prices.
--shadow-1
--shadow-2
--shadow-3
--shadow-4
--shadow-5
Five elevations, each a stack of three tinted layers rather than one grey blur. The tint is the same violet as the neutrals, which is what stops a shadow reading as dirt on the page. A card at rest sits at 2 and lifts to 4 under the cursor.
--ease-reveal
cubic-bezier(0.16, 1, 0.3, 1)
Entrances. Fast out, long settle.
--ease-ui
cubic-bezier(0.32, 0.72, 0, 1)
Hover, press, state change.
--ease-draw
cubic-bezier(0.65, 0, 0.35, 1)
Path draws and bar fills.
--ease-lift
cubic-bezier(0.22, 0.61, 0.24, 1)
Card hover. Cannot overshoot.
--dur-hover
280ms
A card answering the cursor.
--dur-draw
1400ms
An index line drawing itself.
Four curves and a handful of durations, and no spring anywhere with a damping ratio under 1. Overshoot reads playful, and playful is not what a page about somebody's money should read as.
16

The PEER token

PEER is live on Robinhood Chain. It is not what markets settle in.

Worth separating the two things, because they are easy to confuse. Markets on Peer are priced, traded and settled in USDG, the stablecoin bridged USDC arrives as on Robinhood Chain. You do not need to hold PEER to take a position on anybody.

PEER contractRobinhood ChainChain 4663

0x96f0889cbc2d1423fd64fd1307335fe72f1a198e

View on explorer

This is the only official PEER contract. Markets are priced and settled in USDG, and nothing on Peer requires holding PEER.

Check the address
This page and the site footer print the contract from a single constant, so they cannot disagree with each other. Any PEER contract that does not match these forty characters exactly is not ours, whoever is posting it.
17

Parameters

Everything the contracts are configured with, in one table.

ChainRobinhood Chain
Chain IDtestnet 466304663
Collateralbridged USDC arrives as thisUSDG
Redemption feeon winnings only, never on entry2%
Fee splitburn PEER / to holders / trader escrow / liquidity45 / 45 / 0 / 10
Underlyingread from fomo, in dollars, signedTotal account PnL
Snapshot cadence288 readings a day, each one a published file5 min
Strike and settlementsnapshots nearest the open and the closemedian of 3
Maximum snapshot ageolder than this and it cannot value a moment20 min
Opening priceevery v1 market, seeded flat50%
Seed per marketthe liquidity a market opens with$10.00
Markets liveten traders, two windows each20
Resolver graceafter which anyone may void a stale market7 days
Supported wallet chainsSolana, Base, BNB Chain, Monad, Robinhood Chain
PEER tokenRobinhood Chain, chain 4663Live
18

Glossary

The dozen words this page uses in a specific way.

Total account PnL
How much money a trader is up or down on fomo, all time, in dollars. The underlying every market settles on.
Snapshot
One reading of the leaderboard, written to a file with its time and source. The evidence behind every strike and every settlement.
Keeper
The service that takes those readings every five minutes and serves them publicly.
Baseline
The trader's total PnL at the open, committed on chain as the market's strike. A record, not an input.
Median rule
Both ends of a market are the median of the 3 snapshots nearest that moment, so no single reading decides anything.
Call
The call side: pays if PnL is higher at the close than at the open.
Put
The put side: pays if it is not.
Binary
A contract worth exactly 1 unit of collateral if its condition holds and nothing if it does not.
Price
What one contract costs. Because it pays 1 or 0, the price is also the market's estimate of the probability.
Payout multiple
What a winning ticket returns, net of the redemption fee. The reciprocal of the price, roughly.
FPMM
Fixed-product market maker. Holds reserves of both outcomes and prices from their ratio.
Void
A market stopped early and refunded at cost, because a condition made settling unsafe.