upvote
paper · simulated balance, not real money. live pump.fun data.

how fee routing works

every coin on upvote is a pump.fun coin: same bonding curve, same trading, same graduation to pumpswap. what upvote adds is what happens to a coin's creator fees. each coin is treated as a post on a front page, and its trades are counted the way a front page counts votes:

U = Σ x_k          upvotes:    the sol of buys over the window
D = Σ y_k          downvotes:  the sol of sells
s = U − D          karma
m = newest − rest  momentum:   net votes of the newest half of the buckets, minus the rest

0 · whose fees

pump.fun pays a creator fee on every trade to the coin's creator. a coin launched on upvote sets that creator to a program address, ["creator", mint], so only the program can collect and move those fees. the launcher does not receive them. for every other pump.fun coin the page shows a simulation of the same rule on that coin's live trades, labelled "sim".

1 · observations

the program reads the coin's pump.fun curve. each time it is cranked, the change in the curve's virtual sol since the last crank is one observation: sol in is an upvote, sol out is a downvote. upvote cranks inside every trade it sends, and a keeper cranks after trades made anywhere else, so one observation is about one trade. no trade, no observation.

2 · the window and the phase

the last 100 observations are split into 10 buckets of 10, aligned to the newest. time is counted in buckets, not seconds. per bucket, x is the sol of buys (upvotes), y the sol of sells (downvotes). karma s is the whole window's upvotes minus downvotes; the momentum m is the net votes of the newest half of the buckets minus the net of the rest (for an odd number of buckets, the rest has one more). the phase reads their signs:

s > 0, m ≥ 0   →  hot            →  creator fees buy the coin on pump.fun, then burn it
s > 0, m < 0   →  top            →  fees keep accumulating
s < 0, m ≤ 0   →  buried         →  creator fees move to the floor reserve
s < 0, m > 0   →  rising         →  fees keep accumulating
s = 0          →  controversial  →  fees keep accumulating
fewer than 2 buckets → new → fees keep accumulating

vaults under 0.001 sol wait for the next crank instead of paying for a tiny buyback.

3 · burn and floor

a burn is an ordinary pump.fun buy made by the program with the collected fees, followed by burning every token it bought. the floor reserve is a program-owned account, ["floor", mint]. the program has no instruction that moves lamports out of it: no withdraw, no close, no admin path, no redemption. the test suite proves this by scanning the source and the idl and by checking the balance never decreases across random crank sequences.

outstanding supply      = total supply − total burned
floor backing per token = floor reserve ÷ outstanding supply

floor backing per token can only rise. it is not a claim, not a promise and not a price support: the price can fall below it. nobody can withdraw the floor.

4 · reddit's arithmetic

with every crank the program also stores, from the same window, the numbers a post's page would show: the votes V = U + D, the upvote ratio U / V, the balance min(U, D) / max(U, D) (100% is a dead heat), and reddit's hot score sign(s)·log₁₀(|s|) with s counted in votes of 0.001 sol. reddit's full ranking adds t / 45000, the post's age in seconds: ten times the votes is worth twelve and a half hours. that term compares posts with each other, so the feed handles it by sorting on recency; the program stores the vote term only.

V       = U + D
ratio   = ⌊U · 10000 / V⌋                  basis points
balance = ⌊min(U, D) · 10000 / max(U, D)⌋  basis points
hot     = sign(s) · ⌊1000 · log₁₀(⌊|s| / 0.001 sol⌋)⌋

log₁₀ in integer fixed point: a binary log with ten fractional bits, times log₁₀ 2

these describe the recent past of one market, they are not used by the routing, and they forecast nothing. the program computes them in 128-bit integers; this app runs the same integer arithmetic, and its test suite replays 300 windows generated by the program's own tests. full spec in docs/MECHANISM.md.

5 · after graduation

when a coin completes its curve and moves to pumpswap, the curve stops changing: no new observations, no more buybacks on the curve. a buried phase still moves collected fees to the floor.

the voting words are a way to read past trade flow, not a model of what comes next. upvote is not affiliated with or endorsed by reddit. nothing on this page is advice or a prediction. memecoins are highly speculative and most go to zero. paper mode is a simulation.