Docs
How JPEGX works
What a launch creates, where the money sits, what a trade costs, and the exact contracts behind each claim — on Robinhood Chain.
Overview#
JPEGX launches a coin against an NFT collection. The coin trades from its first block in two Uniswap V4 pools at once: one against ETH, and one against that collection’s reserve — an on-chain vault that holds ETH and buys real NFTs from the collection off the floor.
- Supply
- 1,000,000,000 — fixed, all of it in the pools at launch
- Pools
- Two Uniswap V4 pools: coin/ETH and coin/collection reserve
- Liquidity
- Locked permanently — no code path removes it
- Trade fee
- 1% per trade, in the pool’s quote asset — details
- Creator share of fees
- 0% on this deployment
- Custody
- None — your wallet signs every transaction
Launching#
A launch mints a fixed-supply ERC20 and opens its pools in the same transaction. There is no bonding curve, no presale and no graduation step: the coin trades on public Uniswap V4 pools from its first block, at the address any explorer or aggregator reads.
For an NFT pair the supply is split half into the ETH pool and half into the collection pool. The creator names one opening valuation in dollars, and each pool’s opening price is derived from it and that side’s own dollar price (see pricing), so the two pools open at the same price and there is no gap for an arbitrageur to take out of the locked liquidity.
The standard token has no owner, no mint function, no burn and no pause. Nothing can be added to the supply after launch, and no key can freeze a holder’s balance, because the code to do it does not exist in the contract.
Creating a launch costs a flat launch fee set in the factory, shown in the create form before you sign, plus gas. At the contract level a single launch can open pools against up to 7 assets.
Collection reserves#
Each pairable collection has one CollectionReserve. It is the asset the coin’s second pool is priced in, and it is an ERC20 whose unit is exactly one wei of ETH put in — not a fraction of an NFT with a made-up price. Units are minted one-for-one against ETH, and every NFT the reserve owns was bought with that ETH, so issued units and contributed capital never diverge.
How it buys NFTs
When the reserve holds enough ETH to buy one NFT at the posted floor and still keep its cash floor, anyone can call acquire with a listing. Three things must all hold: the marketplace adapter is one the owner approved, the price is at or under the posted floor, and the purchase leaves the cash floor intact. The caller earns nothing — the NFT goes to the reserve.
Getting out
- ETH, at par.
redeemETHburns units for ETH one wei each, as far as cash on hand allows, first come first served. Part of every unit stays in cash because purchases cannot spend below the cash floor. - An NFT.
redeemNFTburns the higher of the posted floor and what the reserve paid for that item. While the floor is stale it is priced at what the reserve paid. - Through the pools. Selling the coin never requires touching the reserve yourself; a sell pays out through the coin’s pools.
Who sets the floor
The floor is posted by an oracle key, not read from a marketplace on chain. The contract bounds it: at most a 25% move per post, at most one post an hour, and it goes stale after 8 hours — at which point purchases and NFT deposits pause. The reserve’s owner sets the oracle and the approved marketplace adapters. That is a trusted role, and it is listed under risks.
Two pools, one price#
One coin in two pools is two markets for one asset. Left alone, every buy on the ETH pool opens a gap the collection pool does not have, and a bot closes it in the same block — the spread comes out of the buyer’s price.
So the fee hook does the split itself. On an exact-input buy in the ETH pool it routes half the trade through the collection pool and credits the coin to the buyer, inside the same swap; sells mirror in reverse. Both pools move together. The mirror leg is attempted, not required: if it fails, the trade settles through the ETH pool alone rather than failing.
Opening prices come from the price oracle: Chainlink ETH/USD for the ETH side, and the reserve’s posted floor times ETH/USD for the collection side. A price that is missing or stale is refused, and the launch reverts instead of opening at a number nobody stands behind.
Liquidity lock#
Every pool’s LP position is minted directly to the liquidity locker, which checks it owns the position. The locker has no transfer, no withdraw, no remove-liquidity path, no owner and no upgrade path. The liquidity is not locked by a promise or a timer — there is no code that could remove it, and the deployed bytecode is the proof.
The one thing the locker can do is collect, and on V4 that means removing zero liquidity from the position, which leaves it untouched. Anyone may trigger collection. Since launch pools charge no LP fee (the trade fee is taken by the hook instead — see fees), there is normally nothing accruing to the position itself.
Fees#
A trade costs 1%, on buys and sells, and nothing else. No transfer tax, no curve fee, nothing on top. Every trade pays 1% in the asset the coin is priced in. It goes to the protocol; creators receive none of it.
- Trade fee
- 1% default on every launch pool
- Charged in
- The pool’s quote asset: ETH in the ETH pool, reserve units in the collection pool
- Creator share
- 0% — creators receive none of the trading fee on this deployment
- Per-pool maximum
- 5%, enforced by the hook
- Launch fee
- Shown in the create form, flat, to the treasury
Pools can be set higher than the default
1% is the default. The protocol’s fee admin key can set an individual pool higher, up to a hard cap of 5% that the hook enforces — it cannot go above that. Creators cannot change it. Every market page shows that pool’s live rate, read from the hook.
Why a hook and not the pool
A Uniswap pool charges its fee in whatever was paid in, so selling a coin would pay the fee in the coin — which then has to be sold back into the same pool to become money, moving the price to do it. The hook charges both sides in the quote asset instead, so the coin is never taken as a fee. The pool’s own LP fee is therefore zero; anything reading it off the pool will say a trade is free. It is not, and this is where the 1% went.
Where the fee goes
On this deployment the locker’s creator share is fixed at 0% and cannot be changed, so the whole fee goes to the treasury. The locker still records a creator’s “pay me / buy & burn” flag from launch, but with a zero share it routes nothing.
The treasury is a fee splitter with two destinations: half to the protocol’s fee wallet, and half as ETH into a flagship NFT reserve, once that reserve is set. It can be set exactly once. Its current wiring could not be read just now.
Nothing on this deployment buys and burns JPEGX or any other coin with protocol fees.
Token contract & screening#
The factory’s screening configuration could not be read just now. Every launch made through this site uses the standard token described in launching.
How screening works when custom contracts are enabled: the screener reads the contract’s bytecode for mint authority, transfer taxes, blocklists, delegatecall, and functions that can destroy a balance the caller does not own. Four findings block the launch outright; the rest are recorded on chain and shown to buyers. A screen that could not be read is reported as unknown rather than clean. Screening flags known dangerous patterns — it is not an audit and cannot prove a contract safe. Supply held back from the pool for a custom launch is capped at 20% by the factory and can only go to a contract deployed in the same transaction.
Risks#
Transactions are submitted through your wallet and may be irreversible. Tokens and NFTs can be volatile or lose all value. JPEGX does not provide custody, warranties, or financial advice.
- The floor is a trusted input. Each reserve’s floor is posted by an oracle key, bounded to 25% per hour. It caps what the reserve pays for an NFT and prices NFT redemptions and opening prices. A wrong post within those bounds is possible.
- Reserve owners have admin powers. The owner chooses the oracle and which marketplace adapters the reserve may buy through.
- Reserve cash is finite. ETH redemptions are first come, first served, up to the cash on hand. Beyond that the exit is an NFT or the pools.
- Fees can rise per pool. The protocol can set a pool above the 1% default, up to 5%. The market page always shows the live rate.
- Thin pools. Trading more than a pool can absorb moves its price sharply against you. Splitting supply across two pools makes each shallower.
- Locked liquidity is not a price floor. Liquidity that cannot be withdrawn still cannot stop a price falling.
- Launches from other interfaces. The factory also accepts permissionless pairs against arbitrary tokens. Those are marked as unverified quote assets; check the pair before trading one.
- No external audit. The contracts are tested and the liquidity lock is verifiable from the bytecode, but no third-party firm has reviewed them.
Contracts#
Read from the factory at request time, not typed in, so this list cannot disagree with the deployment serving it. Robinhood Chain, chain id 4663.
| Contract | Address |
|---|---|
| Launch factoryCreates every launch and its pools | Not configured |
| Fee hookTakes the 1% trade fee; mirrors ETH-pool trades | Could not be read |
| Liquidity lockerHolds every LP position, permanently | Could not be read |
| Treasury (fee splitter)Receives the protocol's fees | Could not be read |
| Price oracleOpening prices: Chainlink ETH/USD × reserve floor | Could not be read |
| NFT quote routerRoutes trades into collection pools | Could not be read |
| Uniswap V4 PoolManagerThe singleton every pool lives in | 0x8366a39CC670B4001A1121B8F6A443A643e40951Blockscout ↗ |
| Uniswap V4 PositionManagerMints the LP positions the locker holds | 0x58daec3116aae6D93017bAAea7749052E8a04fA7Blockscout ↗ |
Your wallet submits every transaction. JPEGX does not custody assets. See also the Terms of Use and Privacy Policy.