Settlement rules

How a duel is decided

No judgement calls. Both players trade the same virtual book at real Robinhood Chain prices, valued by the same engine at the same moments, and the higher return wins. Only the stake is real money. Everything below is what the code does — if a rule isn't here, it isn't applied.

01

What counts

Only eligible assets are scored. The list is public and machine-readable at /api/public/assets. Right now it is assets on Robinhood Chain: plus 0 memecoins. Anything else a wallet holds is ignored — it neither helps nor hurts.

A memecoin becomes eligible when it has a Uniswap v4 pool quoted in ETH, WETH or USDG and selling $1,000 of it through that pool returns at least enough to imply ~$10,000 of exit depth. Assets that fall well below that are dropped between duels, never during one.

Robinhood Stock Tokens are excluded in this version. They are detected on-chain (ERC-8056) and never scored.

02

How things are priced

Prices are read server-side, never from a browser. Majors are priced from CoinGecko with an on-chain fallback (ETH from the WETH/USDG pool; USDG at $1). Memecoins are priced from their own Uniswap v4 pool, converted to USD through the quote asset.

Because v4 has no on-chain time-weighted price, DUEL records every eligible pool's price once a minute. When a value is needed for a past instant — the start or end of a duel, or the moment of a trade — the engine uses the recorded sample nearest that minute (within ±10 minutes), then the live pool, then nothing.

A holding the engine cannot price is carried at zero and flagged. It is never guessed.

03

Same book, same clock

When the seat is taken, both players receive the same virtual balance — $10,000 — and the clock starts (15 minutes to 24 hours). Nothing can be added to a book during a duel. When the clock expires, every open position is closed at market and both books are valued at the same instant: ending value.

return % = (ending value − starting value) ÷ starting value × 100
04

Long, short, leverage, liquidation

A position is isolated margin: cash committed (the margin) on margin × leverage of notional, long or short, up to 160x. A 1x long is a spot buy. One position per asset; the opposite side is refused until it is closed. Cross margin is not offered.

A position is liquidated when it has lost 90% of its margin: the engine closes it at the sampled price, the whole margin is gone (the last 10% is the liquidation penalty), and its stops and takes are cancelled. Liquidation is checked before any stop on every tick.

long  liquidation = entry × (1 − 0.9 ÷ leverage)
short liquidation = entry × (1 + 0.9 ÷ leverage)
equity = margin + (mark − entry) × size × (long ? +1 : −1), never below zero

A market open is priced through the asset's own Uniswap v4 pool for the notional using the on-chain quoter, so a $5,000 order into a $30,000 pool pays the impact a real trader would — a short gets the bid, a long the ask. If the quoter cannot price a size, the engine fills at the last sampled price with a 0.3% haircut. Majors without a pool fill at the sampled price with a 0.05% fee.

Stop-loss, take-profit and trailing-stop orders close a chosen fraction of a position when the engine's sampled price crosses the level — checked on every engine tick (about every 5 seconds while either player is on the page, once a minute otherwise). A trailing stop follows the sampled high (long) or low (short) by a percentage. Limit entries open a position when the price comes back to theirs; stop entries open on the breakout through theirs (a stop-limit then works a limit); exit limits close a chosen amount at a level. A bracket set on a working entry attaches the moment it fills. Every trigger fills at the size-priced quote at that moment, not at the trigger price. The engine checks every level every five seconds.

05

Winner

Higher return % wins. Both books start equal, so the percentage and the dollar gain say the same thing. Identical returns to four decimals are a draw: any stakes are returned in full.

06

Disputes

If the engine cannot verify a final result — a price feed fails, a book cannot be valued — the duel is marked DISPUTED with the reason written on it, and any stakes are returned. A disputed duel is never awarded by hand.

07

Stakes

Duels can be played for the record with no stake. Staked duels lock both stakes in the DuelEscrow contract before the clock starts, in ETH, USDG or $DUEL — both sides stake the same asset and amount. The contract can only pay the creator, the opponent or the rake's destination; the settlement signer can only name a participant or call a draw; the rake is frozen per duel and capped at 10%. If a duel is never settled, anyone can refund both sides after the grace period. A draw or dispute refunds both stakes in full.

ETH or USDG   3% of the pot → treasury (40% burn · 40% stakers · 20% ops)
$DUEL         1% of the pot → burned, in full
winner receives the pot minus the rake; draws and refunds pay no rake

DUEL is peer-to-peer: equal stakes, a disclosed fee, and DUEL never takes the other side of a duel. There is no spectator betting.

08

The ladder

Ratings are ELO, K = 32, applied once per finished duel inside the database — no client path. A duel's weight is the product of the rules below; K is scaled by it. Every rating event is public with the opponent, the weight and any flags on it.

weight = pair decay × route × stake × flags
pair decay   same two wallets in one season: 1, ½, ¼, then 0
route        matched by the engine or staked open seat 1 · call-out or rematch ½
stake        staked duel × 1.5
flags        no_contest (loser made no trade) · throw (loser ≤ 2 trades and ≤ −15%)
             · unrated_wallet (below the ladder gate)  →  weight 0

Matched, not chosen. A rated, unstaked duel is paired by the engine with the next wallet waiting for that length — never the same pair twice in a row. Nobody can pick who takes their seat. Call-outs and rematches still play, at half weight.

The gate. A wallet's duels count on the ladder once it holds 0.001 ETH and has sent 5 transactions on Robinhood Chain. Checked when the duel settles, kept once passed.

Caps. A wallet cannot gain more than +60 rating in a UTC day, and cannot rise above 1100 until it has beaten four distinct wallets. Excess is not banked.

In the open. The ladder shows distinct opponents faced, the share of duels that were call-outs, flagged duels, and a concentrated mark on any record with more than half its wins against two wallets or fewer. Invitational seats require five settled duels against four or more wallets and a record without that mark; every seat's duel history is published with the bracket.