• Duel is open on Robinhood Chain
  • Launch a duel two tokens, three pools, one transaction
  • Round closes in --:--:--
  • Four-hour rounds the winner’s buyback is price-limited
  • Liquidity locked forever, no team tokens

Contracts

Duel is six contracts, five of them deployed on Robinhood Chain and one never deployed, built on the chain's Uniswap V4 deployment. Solidity 0.8.26, Foundry, OpenZeppelin, v4-core. The duels live on the chain: the app reads it, through the site's server or directly, and their history from an indexer of the chain's events.

ContractRole
DuelFactoryLaunches a duel in one transaction: two tokens, three pools, locked positions, the creator's launch buys. Owns the bounded configuration of future duels; a launch commits to the configuration its launcher read (configHash) and reverts if another applied meanwhile.
DuelHookThe Uniswap V4 hook shared by every duel's three pools: fees, the anti-snipe tax, the switch burn, the realignment, the split's average, rounds and buybacks, and every duel's pot, creator fees and protocol fees.
DuelTokenThe plain ERC-20 of every side: one billion units, burnable, no owner, with permits (EIP-2612).
DuelRouterThe exact-input router the app trades through, a sale's permit included; it alone sells a side in several passes when its ETH pool cannot take the sale at once (SALE_PASSES), and what that pool cannot buy back even then through the other side (sell). Any V4 router works as well, in one swap.
DuelLensRead-only views that gather a duel's state for the app.
DuelSimulatorNever deployed. The app puts its code on your own address for one read-only call (a state override), so that a trade runs as you would send it and answers what you would get and where the split would land once the pools realigned.

Version

This launchpad is Duel V1, code name Petunia. Each of its contracts says so (VERSION() and CODENAME() on the factory, the hook, the router and the lens), and each token it launches keeps it for good (LAUNCHPAD_VERSION() and LAUNCHPAD_CODENAME()): a duel's About section shows it, as its tokens say it. A later launchpad, deployed separately, would be V2, with a code name of its own, and its tokens would say so.

Addresses

Duel relies on these Robinhood Chain contracts:

Uniswap V4 PoolManager0x8366a39CC670B4001A1121B8F6A443A643e40951
Universal Router (mainnet)0x204FAca1764B154221e35c0d20aBb3c525710498
V4 Quoter0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94
Permit20x000000000022D473030F116dDEE9F6B43aC78BA3

The hook

A V4 hook's address carries the list of callbacks it implements. Duel's hook uses:

CallbackWhat it does
beforeInitializeOnly the factory may open a pool on the hook, and only a duel's registered pools.
beforeAddLiquidityOnly the factory may add liquidity, at launch.
beforeRemoveLiquidityAlways reverts: liquidity is locked forever.
beforeDonateAlways reverts.
beforeSwapSettles a finished round, updates the averages, takes fees and taxes.
afterSwapTakes the fees due on the amount the swap did not specify, checks that a swap charged before it filled completely, then realigns the three pools.

Fees are taken with the hook's return deltas, so they apply whoever routes the swap.

Who can do what

ActorCan
AnyoneLaunch, trade, settle finished rounds, trigger creator or treasury claims, apply proposed terms once their 48 hours have passed
A duel’s creatorReceive that duel’s creator fees; hand the role, with its fees, to an address that accepts it
Factory ownerPause new launches; change bounded terms for future duels or the protocol treasury after 48 hours. The current treasury receives accumulated protocol fees at claim time. Lower the protocol's share of every duel's swap fee at once, or raise it back, never above its terms.
NobodyWithdraw liquidity, mint tokens, move a pot, change the fee a live duel’s traders pay or its creator’s share, raise the protocol’s share above a duel’s terms, take a duel’s creator role, upgrade contracts

More

  • Security: what protects the funds, and how it was checked.
  • Build on Duel: reading duels and trading from your own code.