Conditions of sale
What this saleroom is, and who runs it
1 · The operator
One operator. One house wallet.
Rostrum is run by one operator. The same operator deployed the contracts, holds the house wallet, writes this site and posts as @rostrumlol. There is no team, no foundation and no audit.
The house wallet — 0x1F21333D8A6af7217a093052A293a90B3c91D31C — receives the 80% house share of every lot's LP at the hammer, as a PositionManager NFT it fully controls. It is unlocked: the house can pull that liquidity at any time, from any lot, without notice. If it does, the sale sheet says PULLED.
The retired share — the other 20% — is minted straight to 0x000000000000000000000000000000000000dEaD. Nobody, the house included, can move it.
Fee 0. No hook. The house earns nothing from trading. Its only interest in a lot is the 80% share.
No snipe protection, by design. There is no tax window, no delay and no allowlist, because the pad is built for the opposite: the lot's address, pool key, opening price and hammer time are published at consignment so that anyone — a person or a proxy bidder — can be ready, and the same call that brings the hammer down can carry the first bid. Whoever is first is first. Nothing here is locked, audited or promised.
2 · The mechanism
Consign → viewing → the hammer
Four verbs, in plain words. The numbers are constants with no owner and no setter.
- Consign
The consignor calls consign(spec, openAt), optionally with ETH (the absentee bid). The Lot is deployed with CREATE2 — its address is known before the transaction via forecast — and its whole supply of 1,000,000,000 coins sits in the Rostrum. The Consigned event publishes the lot, its poolId, the hammer time and the absentee bid. Nothing can trade: there is no pool and nobody but the Rostrum holds a coin.
- Viewing
Between 5 minutes and 3 days, the consignor's choice, the lot is on view: verified source, known pool key, known opening price (2.00 ETH for the full supply, tick 200311), known hammer time. Proxy bidders can index it, simulate it and pre-sign.
- The hammer
Once block.timestamp ≥ openAt, anyone may call knock(lot). It initialises the pool at the opening bid, mints the retired share (20%) to 0x…dEaD and the house share (80%) to the house, and seats the absentee bid 6931 ticks above the open (one doubling of coins per ETH), its NFT to the consignor. Paddle.knockAndBid does the knock and a buy in one transaction; a second caller in the same block simply bids.
The Jammed case. If a stranger initialised the pool early at another price, the knock resets the price with a zero-liquidity swap. If that swap would move any value — someone put liquidity in — the knock reverts Jammed, and the lot stays on view.
- Withdraw
If a lot is still on view 24 hours after its hammer time (it was jammed), the consignor may call withdraw(lot): the supply goes to 0x…dEaD and the absentee ETH is refunded. No one else can.
3 · GMGN badge forecast
Three green, one red, on purpose
Every Lot, the Rostrum and the Paddle are verified on Sourcify (chain 4663) at deployment.
owner() is set to zero in the Lot's constructor. There is no owner anywhere: no setter, no pause.
A plain ERC20, no hook, fee 0, no transfer rules. Scanners simulate a sell and it goes through.
Only 20% of the LP is retired to 0x…dEaD. The 80% house share is held by the house wallet, unlocked, so the badge stays red by design.
4 · For proxy bidders
Everything a bot needs
Rostrum is designed to be sniped. Here is exactly what to index and call. Chain 4663, blocks about 0.1 s, gas in ETH.
- Watch
- event Consigned(address indexed lot, address indexed consignor, bytes32 indexed poolId, uint256 index, uint40 openAt, uint256 absentee)on the Rostrum 0x61Ba…73a6. openAt is the hammer time.
- Read
- manifest(lot) → (Sale, PoolKey, bytes32 poolId, uint160 sqrtOpen, int24 openTick)
canKnock(lot) → bool
saleOf(lot) → Sale {consignor, consignedAt, openAt, knockedAt, state, absentee, retiredId, houseId, absenteeId} - Pool key
- currency0 = 0x0 (ETH) · currency1 = lot · fee 0 · tickSpacing 1 · hooks 0x0
opening tick 200311 · full positions over [MIN_TICK, 200311] · absentee over [200311, 207242] - Knock
- Rostrum.knock(address lot) — permissionless once block.timestamp ≥ openAt
Paddle.knockAndBid(address lot, uint256 minOut, address to, uint256 deadline) payable → uint256 outKnocks if not yet knocked, then buys with msg.value. A second knockAndBid in the same block does not revert: it simply bids. Paddle 0xd754…827f. - Quote
- Paddle.quoteBid(lot, ethIn) · Paddle.quoteSell(lot, amountIn) — non-view, call via eth_call
Paddle.bid(lot, minOut, to, deadline) payable · Paddle.sell(lot, amountIn, minOut, to, deadline) - Or go direct
- The pool is an ordinary Uniswap v4 pool. PoolManager 0x8366a39CC670B4001A1121B8F6A443A643e40951, PositionManager 0x58daec3116aae6D93017bAAea7749052E8a04fA7, Permit2 0x000000000022D473030F116dDEE9F6B43aC78BA3. Any router works; there is no hook to please.
- Fail cases
- NotOnView / StillOnView — wrong state or too early. Jammed — someone seeded the pool at another price with liquidity; nobody can knock until they pull it. ShortOfMinimum — your minOut was higher than the fill.
Source: Rostrum on Sourcify · Paddle on Sourcify