Rules

They never change. The system has run 154 steps.

Every coin launched on gravity is a body in one shared N-body system. Nothing else goes into it but the coins' on-chain trades: no server clock, no randomness, no AI.

Mass

A body's mass is the base-10 log of its market cap in SOL, in steps of 1/16, between 0.25 and 5. Market cap is read from the trade itself (the bonding curve's reserves, or the pool's after migration). The cap keeps one huge coin from crushing the rest.

Thrust and brake

A buy pushes the body forward: its speed relative to what it orbits grows by the size of the trade compared with its market cap. A sell brakes it and pushes it outwards. That push fades: each step, the speed eases back by one eighth towards a circular orbit. A coin that sells hard escapes past the edge of the map and is ejected.

The centre and the star

The first body sits at the centre and does not move. Any body that grows two notches heavier takes its place: the two swap position and speed. The body at the centre becomes the star once it holds more than 20% of the total mass.

Capture

A body that falls into the pull of a heavier one (inside its Hill sphere) starts counting quarter-turns around it. Twelve net quarter-turns, so three full orbits, make it a moon. At that moment, the moon's well, which receives 70% of the moon's creator fees, buys the moon back on the market and burns it. Each coin only ever buys itself back; gravity picks the moment.

Collision and ejection

When two bodies touch, the smaller is absorbed: it leaves the map, but nothing changes on-chain. A body past the edge of the map is ejected. Both come back on the outer ring at their next trade.

The step

One step every 10 minutes. The step's trades are applied in chain order (slot, signature, rank), then a leapfrog integrator (kick, drift, kick) runs 40 sub-steps of 2−11. At the end of each step, positions and speeds are rounded down to a grid of 2−32: the state is a set of integers. Only +, −, ×, ÷ and square roots are used, which every IEEE 754 machine rounds the same way. No log, no sine, no arctangent.

The witness

The server runs the system in numpy. The same rules are written again in JavaScript (gravity.js). A witness replays every trade in both and compares the integer state at every step: the gap must be 0. With --fausser, it shifts the server by one step and must find gaps.

curl https://gravities.lol/api/trades.json -o data/trades.json
python temoin.py              # 0 gap expected
python temoin.py --fausser    # must fail

The page you see never computes the system: it reads the server's states and draws a smooth curve between two of them.

Demo bodies

So that the system is not empty on day one, a few demo bodies orbit with simulated trades. They are marked "demo body", their tickers are not real coins, and their captures buy nothing back.

Fees

pump.fun creator fees go through a split locked in the launch transaction: 70% to the coin's own well, 30% to the launcher, who is the creator (the wallet of the dev buy). The site keeps no share.