How it works

The rules of a round, where the price comes from, and what nobody can do about it.

Bet on the next 15 minutes

A round covers the fifteen minutes that start when it locks, not the fifteen minutes already underway. Betting stays open right up to that lock instant. The moment it locks, the reference price is fixed as a time weighted average. Fifteen minutes later, the end price settles it: UP only if the price finished strictly higher, and DOWN otherwise, so an exact tie resolves DOWN.

Betting closes before the window it decides even opens, and that is on purpose. If the reference price were fixed the moment betting opened instead, a bettor arriving late in that window would already know which way the price had moved since the reference was set, and could bet on a coin flip that had already landed. Fixing the reference only at lock, after betting has closed, means nobody who places a bet has already seen how their own window moved.

The pool is the oracle

Every round settles on a price read from the token's own Uniswap pool, as a time weighted average across the whole window rather than a single snapshot. Anyone, not only a keeper, can call the TwapAccumulator to record a new observation.

Averaging means no single trade decides a round, and time that has already been recorded cannot be repriced after the fact. It does not make a price impossible to push: a pushed price counts until the next observation, and anyone can record one. If observations stop for too long inside a window, the round does not settle on stale data. It voids, and every stake refunds in full.

The trust boundary, in one picture

Price flows down from the pool and the Chainlink feed into settlement. Scheduling flows in separately, from the bottom, on a dashed line that never joins it.

How the price feed and the keeper stay separateThe token's Uniswap pool feeds the TwapAccumulator, which anyone can poke. The accumulator and the Chainlink ETH / USD feed both feed MemePool's settlement. The keeper only calls scheduling functions, drawn as a separate dashed arrow lower down that never reaches the price path above it.Uniswap Pooltoken's own poolChainlink ETH / USDexternal price feedTwapAccumulatoranyone can pokeMemePool settlementlocks & resolves every roundKeeperscheduling only
In words: the token's Uniswap pool feeds the TwapAccumulator, which anyone can call, not only the keeper. That accumulator and the Chainlink ETH / USD feed are the only two inputs MemePool reads to lock and resolve a round. The keeper's own calls, drawn as the dashed line below, only open, lock and resolve rounds on schedule. That line never reaches the price path above it, because nothing the keeper calls sets a price.

Nobody can decide the outcome

The operators can:

  • list a new token for markets
  • appoint or replace a keeper
  • set the fee on future markets, capped at 5 percent
  • pause new bets

Nobody, not even them, can:

  • change a market once it has been created
  • override which side won
  • send a staked USDG anywhere but back to whoever staked it

A round settles on the oracle price or it does not settle at all. When the price cannot be read honestly, it voids instead of guessing, and every stake refunds in full with no fee taken:

  • Nobody locked this round in time, so it was cancelled. Your stake is refundable in full.
  • Nobody settled this round in time, so it was cancelled. Your stake is refundable in full.
  • The price history did not reach back far enough to settle fairly. Your stake is refundable in full.
  • Too few price samples in the window to settle fairly. Your stake is refundable in full.
  • The ETH price feed went stale, so the round was cancelled. Your stake is refundable in full.
  • The token pool ran dry, so there was no honest price to settle on. Your stake is refundable in full.
  • The token supply could not be read, so the market cap could not be settled. Your stake is refundable in full.
  • The price could not be converted safely, so the round was cancelled. Your stake is refundable in full.
Not available where prohibited.