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 fee | 1% of every swap — 50% protocol, 50% creator |
| Creator tax | 0–10%, optional, all to the creator, added permanently to the pool's LP fee |
| Launch fee | 0.0005 ETH |
| Protocol's own split | 60% 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):
| quote | launches | volume |
|---|---|---|
| ETH only | 208 | 10,203 ETH |
| other tokens (PONS, par, memes) | 697 | 3,769 ETH |
| any stock | 95 | 142 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, locker0x8a6d37B2E6a2AC7970eF69d2932757F04be0A231, multi-launch factory0x3ea29975a79900179F3e1aEF93347Ba4210c29C1. v4 PoolManager on that chain is0x8366a39CC670B4001A1121B8F6A443A643e40951. Full list in their docs.