Skip to main content

par — a pons fork, and the closest thing to a control group

Robinhood Chain. Public docs at par.family/docs. Read 11 Sep 2026. Worth more than pons v2 to us in places, because several of our open questions are settled in its production code.

The shape: no curve at all

A launch is four operations in one transaction — deploy a 1B fixed-supply ERC-20, initialize a v4 pool, mint one position holding the entire supply from the opening price to max tick, hand it to the locker. Optional dev buy in the same transaction.

"No bonding curve phase exists. The pool is open to everyone from the block it is created in."

A one-sided full-range-upward position is a constant-product curve. Their own maths gives it away — with P the fixed opening reserve (1.3557 ETH equivalent for every launch) and q the cumulative quote paid in:

tokens left in pool t = P*S / (P + q)
market cap (P + q)^2 / P

That is our curve, with P playing the part of the virtual reserve. The same family, for the third time. The difference is that they never graduate — there is no second venue, so there is no closing price to match an opening price, and the forced relation simply does not arise.

The finding that matters most: multi-market launches

One token, one to five quote assets, simultaneously. Supply is split equally across the pools, every pool opens at the same market cap, and arbitrage holds them together. The interface shows one price, weighted by how much of the supply each pool still holds. Separate contract stack (PairPadMultiLaunchFactory), sharing the escrow, pricer and token contracts.

This is composable pairing, live, without a basket wrapper. And it is cheap for them for one specific reason: a one-sided launch has no raise to split — only supply, which divides trivially. Our curve accumulates a raise in a single asset, so seeding five pools would mean acquiring five assets at graduation. See notes/references/pairing-topologies.md.

No hook, and that is deliberate

Pool key uses hooks = address(0), tick spacing 10, and the LP fee is set to base + creatorTax. Fees are therefore ordinary LP fees, collected by the locker as a zero-liquidity decrease.

The consequence is the one RHUB pays for: everything quotes it. "Anything that trades v4 on this chain — wallets, aggregators, terminals — trades it immediately with no par-specific code." No afterSwapReturnsDelta, so no exclusion from Uniswap's own router, so no allowlist to apply for.

Since our launch liquidity is 100% protocol-locked, an LP fee is a protocol fee. That makes "no hook at all" a real option for us and not an obviously worse one — see DECISIONS.md O14.

Fees

Base fee1% of every swap — 50% protocol, 50% creator
Creator tax0–10%, optional, all to the creator, added permanently to the pool's LP fee
Launch fee0.0005 ETH
Protocol's own split60% buys back and burns $par, 40% to the protocol wallet

Collection is permissionless (collectFees() on the locker). The protocol's token-side share is burned; the creator's is credited to an escrow to withdraw.

Two things that answer our open questions

Fee destination is a permanent choice at launch — O9. A creator may send their share to a Holder Vault (distributed to holders pro rata, in the actual quote asset and token, no slippage) or a Burn Vault (buys the token and burns it). Both are described as irreversible: "The vault has no owner and no function that could hand the share back." That is the immutable end of O9, shipped.

But their redistribution runs on a keeper. Holder payouts are "harvested hourly through PairPadDisperseV2", with rounds triggered by an operator wallet. They bound it honestly — "the operator can delay or misprice a round; it cannot redirect one" — but it is exactly the dependency D1 forbids us. ../concept is our answer and it is a harder one.

Parameter changes bind only future launches. The owner may move the base fee, protocol share and max creator tax, and "cannot retroactively change launched token terms", nor touch pools, locked positions or escrowed fees. That is our D12 and D13 rule, live in production.

Quote assets: priceability instead of curation

Any token on the chain may be the quote asset. The gate is not an approved list — it is a pricer that must find a route to ETH, up to four hops, mixing v3 and v4, where every hop holds at least 5 ETH worth of its far side in range. No route, no launch (QuoteAssetNotPriceable). Native ETH and USDG are special-cased.

A mechanical, permissionless alternative to pons's approved set — and to our QuoteRegistry.

Stocks — how they actually do it (read 13 Sep 2026)

Nothing stock-specific at all. A stock token is an ordinary quote that the pricer can value, and it is labelled "verified" rather than "wild" in the interface. No wrapper, no handling for splits or dividends. The only warning is generic: "A token quoted in another token carries that token's risk in full." It works because Robinhood's stock tokens never move balanceOf on a corporate action — notes/references/robinhood-stock-tokens.md.

Multi-market is their basket. INDEX is one token with five pools, against AAPL, MSFT, NVDA, GOOGL and TSLA. The supply is split, not the raise, so no wrapper is needed.

Demand, from their indexer (api.par.family, the latest 1,000 of 1,009 launches):

quotelaunchesvolume
ETH only20810,203 ETH
other tokens (PONS, par, memes)6973,769 ETH
any stock95142 ETH — 84 of it INDEX

Stock pairing is about 1% of par's volume. INDEX is the only one that traded meaningfully.

Also worth knowing

  • No snipe protection at all: "Bots can buy in the block after the launch like anyone else." Shipping without it is evidently survivable (O12).
  • Fee recipient is the only creator-mutable field, and a protocol change to it carries a 3-day notice.
  • Single-market factory 0x9d33Ba78389c8772bC114Cba47Dc1985E933e76F, locker 0x8a6d37B2E6a2AC7970eF69d2932757F04be0A231, multi-launch factory 0x3ea29975a79900179F3e1aEF93347Ba4210c29C1. v4 PoolManager on that chain is 0x8366a39CC670B4001A1121B8F6A443A643e40951. Full list in their docs.