Live on Monad testnet · drand evmnet

Markets
nobody
can rig

A Croom price is not quoted by anyone. It is computed from a public randomness beacon that signs a new value every three seconds — so nobody can influence a tick, nobody can see one before it exists, and anyone can recompute the entire history from public data.

Not even the person who created the market.


What a Room is

Three properties,
and they define the product

01

Un-riggable

The price process is fixed at creation and driven by randomness no party controls. A Room's identity is the hash of its parameters, so changing one makes a different Room rather than an edited one.

02

Un-ruggable

No treasury. No liquidity pool to drain. No mint function, no owner keys, no pause. There is nothing to pull, because there is nothing held.

03

Immortal

A Room does not go to zero and does not stop. The beacon ticks every three seconds, and the price follows it — whether or not anybody is watching.


The mechanism

The chain is never
told a price

Because a Croom price is a deterministic function of public data, the chain does not need to be told one. It can be shown one, with proof, by whoever needs it. So the chain stores commitments and a game that anyone can win if a commitment is wrong.

Step 01 — Entropy

A beacon round is verified on chain with a single pairing check, raising a monotone proven floor: the highest round shown to exist. Never a timestamp — a clock is an estimate of when a round existed, and the floor is a proof that it does.

Step 02 — Registry

Anyone opens a Room by submitting a spec. The chain keeps the hash and emits the body. Immutability is structural, not promised: there is no field an administrator could change, because the identifier is the content.

Step 03 — Ladder

A poster commits a batch of prices as one 32-byte root, publishes every value, and puts up a bond. Anyone who can show the batch is wrong takes that bond — in one transaction, with no stake of their own.

Step 04 — Market

Stake on a direction. Entry closes before the randomness that decides the outcome exists. Participants face each other, the fee is one published percent, and the protocol never takes a side.


Not a screenshot

A liar lost their bond.
A bettor got paid.

A checkpoint was posted whose price at one round was wrong by a single unit — 10-18 of a price, the smallest lie the encoding can express. A second address, told nothing, re-derived the batch from the public beacon, found the value that does not follow, and proved it.

Dishonest checkpoint posted 0xfbdb3101…
Disproved, bond forfeited 0x35b60b28…
Result rejected
And the other half

Two accounts staked opposite sides of a window, and settlement was shown the opening and closing prices with Merkle paths into a batch the ladder had already finalised. No oracle was asked. A batch still inside its challenge window is refused outright, so a payout cannot rest on a number the fraud proof might still overturn.

Settled against two proven prices 0xb747af55…
Winner paid out 0x533c173d…
Staked 0.02, received 0.0495 MON

The 1% rake was credited to the Room's creator rather than sent — a creator whose address reverts on receipt must not be able to freeze everybody else's settlement. One market, two accounts, five hundredths of a MON. The mechanism is proven; the volume is nothing.

20,000
rounds reproduced bit-for-bit against a Rust implementation written first
50
Rooms live, spanning the full permitted parameter range
0
calls to the blockchain needed to compute a chart, and zero oracles in the settlement path
Check one yourself

Round 21,173,055 was proven on Monad and the contract emitted this randomness. Reproduce it from the public beacon without asking us for anything:

curl -s https://api.drand.sh/v2/chains/04f1e906…/rounds/21173055 \
  | python3 -c 'import sys,json,hashlib; print(hashlib.sha256(bytes.fromhex(json.load(sys.stdin)["signature"])).hexdigest())'

0x0a53345742bad1bdfc2064519f95dfe41bd3044ca9f64d8ed4cbef0c27a6f3e4

Live on Monad testnet Open app