Opening a ride
Anyone can open a ride on a thesis; the keeper does it from the FOMO feed. The opener’s first position proves the pool trades both ways.
Starting from a handle
The contract knows an author as a wallet, and nobody knows a trader by their wallet. So the open form asks for their FOMO handle and looks the rest up:
- The wallet. FOMO publishes no API; the lookup goes through fomoapi.io, a third-party one, from this site's server. For a trader on FOMO's leaderboards it has the wallet. For anyone else it has none, so the wallet is found on the chain by what it holds: among the accounts that received one of the trader's coins around the time the position appeared, the one holding exactly the amount FOMO lists is a candidate, and it is believed only if it also holds what FOMO lists for their other positions. Bought or moved in from elsewhere, it makes no difference. The form says when a wallet was found that way.
- What they posted. Their theses on coins of this chain, each checked against the chain: what the wallet still holds of the coin, and whether a ride on it is already on. A coin they sold out of has nothing to mirror and cannot be picked.
- The pool. A Uniswap v4 pool has no address and no registry, only the
Initializelog of its creation. Every native-ETH pool of the coin is read from those logs, each one's price and liquidity from the PoolManager's storage, and the deepest pool without a hook is used. A hook can refuse or tax a sale, and a ride that cannot sell cannot mirror an exit.
The lookup is a convenience, not a source of truth. What it finds is shown before anything is signed, the wallet the ride will watch included; the chain is asked whether that wallet really holds the coin; and the whole call is simulated first. A site deployed without a lookup key asks for the wallet directly, and the contract never learns the difference: a handle is a label in the Opened event, nothing more.
Parameters
| Field | Meaning | Bounds |
|---|---|---|
| author | The FOMO wallet that posted the thesis. | Must hold some of the coin |
| token | The coin. | |
| key | The Uniswap v4 pool key. | currency0 must be native ETH, currency1 the coin |
| duration | How long the ride boards before it sells everything. | 1 hour to 30 days |
| maxChaseBps | How far above the thesis price riders may still join. | 0 to 20000 (200%) |
| minTokensOut | Slippage floor for the opener’s first buy. | |
| thesisRef, thesis, authorHandle | Where the thesis lives on FOMO, its text, and the author’s handle. | 160, 1000 and 64 bytes |
What is checked
- The pool exists and is initialised (
PoolNotInitializedotherwise). - The author holds more than zero of the coin (
AuthorHoldsNothing). - No other ride on this author and coin is boarding or exiting (
RideAlreadyActive): one active ride per author and coin. - The ETH sent covers the open fee (0.0004 ETH,
openFee, ceiling 0.05) plus a first position of at least 0.0005 ETH.
The pool price at that moment, before the opener's own buy, is recorded as the thesis price. The author's balance is recorded as the reference the exit rule mirrors.
The mandatory first position
Everything sent beyond the open fee is the opener's own position, joined like any rider's (with the join fee). It has to be there: it is what proves the pool trades both ways before anyone else is let in, and it funds the probe below.
The sell probe
Right after the first buy, the ride sells 1% of the tokens it just bought straight back into the pool. If that returns less than 70% of the sliver's value at the pool's own spot price, or the pool takes fewer tokens than offered, the open reverts with ProbeFailed. The ride does not ask the token how it behaves: it finds out. This catches:
- honeypots and sell blocklists, which cannot sell at all;
- confiscatory sell taxes, which sell for a fraction of the price;
- fee-on-transfer tokens, because what the ride received on the buy is measured on its own balance and the probe sells a share of that.
The ETH the probe returns is credited to the opener through the accumulator like any sale, without the exit fee: this is a gate, not an exit.
What is emitted, not stored
The thesis text, its reference and the author's handle are carried by the Opened event and never written to storage — a kilobyte of calldata costs cents where the same bytes in storage cost dollars. The app reads them back from the logs, starting at the block the contract was deployed in.