Protocol / Reference

Introducing Facet

Facet is a platform that lets users launch tokens paired with luxury cars.

The first token launchpad of its kind, built around luxury cars.

We believe a token should be more than a ticker. It should have an identity, a story, and something people genuinely want to rally around.

With Facet, every launch is paired with an iconic machine, bringing automotive culture, onchain innovation, and internet-native communities into one experience.

Cars create culture. Facet brings that culture onchain.

Horsepower meets liquidity.

More tokens. Bigger dreams.

Markets are MEME / CAR. Settlement is the car ERC-20. ETH converts at the frozen car quote. USD is a label. Reads come from the contracts.

Launch lifecycle

Every launch follows the same four steps. There is no path where a creator decides to do something different halfway through.

  1. Create. Name, ticker, image, description, car pair, optional creator tax, optional first buy. The entire supply mints straight to the curve. Nobody, including the creator, is holding a bag set aside before trading opens.
  2. Trade the curve. Anyone can buy and sell. Price rises as people buy and falls as they sell. You can always sell back to the curve. There is no waiting for the creator to add liquidity.
  3. Graduate. Once the curve sells out, it closes. Everything it collected is handed over to build the pool, along with the tokens that were held back for exactly this purpose.
  4. Pool. A Uniswap v4 pool is created and its liquidity is locked permanently. Trading continues there. The tokens in your wallet are the same before and after.

Graduation happens inside whichever purchase finishes the curve. If that automatic step does not complete, anyone can call createGraduatedPool. A launch cannot be left stranded because the creator lost interest.

Car tokens

Facet deploys one ERC-20 per approved car. That token is the quote asset for the bonding curve: you buy and sell in it, the graduation target is counted in it, and the creator is paid in it. It is not title, equity, or a claim on a vehicle.

Only the registry can add cars. A creator cannot pair against a token they just deployed. The quote car is fixed at creation and cannot be switched later.

You pay ETH. The UI converts it at the frozen vehicle quote: 1 ETH buys 1 / stickerEth of that car token. ETH sits in CarEthPool until it is sold back. The curve still settles in the car token.

Each car’s ETH sticker is written once at deploy from the vehicle USD divided by ETH/USD at that moment, then never updated — a car seeded at 4,206 ETH stays 4,206 ETH, so 1 ETH is always the same slice of that token. Graduation is an ETH amount (~4.27 ETH at current settings), not a count of physical cars.

Bonding curve

The curve is a vending machine for the token. It holds the whole supply from the moment the launch is created, and it will always sell you tokens and always buy them back. The price is not set by anyone. It is worked out from how much of the supply has been bought so far.

Pricing uses constant product on the curve’s reserves. getReserves() is the input: the quote side includes a phantom reserve and excludes fees waiting to be swept. That phantom is virtual. Nobody deposits it. It exists so the first buyer does not get the supply for nothing.

spot        = quoteReserve / tokenReserve startPrice  = phantomQuote / supply fdvQuote    = spot × supply startMcUsd  = phantomQuote × ETH/USD  ≈ $4,000

At launch, quoteReserve is the phantom and tokenReserve is the full supply, so start price is phantom over supply and start FDV in quote is the phantom itself. Phantom is sized so that times live ETH/USD that FDV is $4,000. The bond threshold is the same phantom times 2.6061, which keeps the reserved share fixed. Buys add real quote and take tokens out, so both spot and FDV climb. Sells do the reverse. Large buys move the price more than small ones.

You cannot sell to the curve after it has sold out. At that point it is holding the reserves the pool is about to be built from. Selling reopens in the pool once the launch has graduated, usually in the same transaction that finished the curve.

Fees are charged in the car token, never in the launch token. Buying costs a fee on what you spend. Selling costs a fee on what you receive. If your buy would take the last sellable tokens, you fill to the edge, you are charged only for what you got, and the rest is refunded in the same transaction.

Graduation

Graduation is when a launch stops trading on its curve and becomes a Uniswap v4 pool. It happens when the curve has sold everything it was ever going to sell.

Not all of the supply is for sale on the curve. A fixed share is held back from the start, and that held-back share is the liquidity in the pool. It is decided when the launch is created and nobody can change it later.

reserved = supply × phantomQuote / (phantomQuote + threshold)

Because the reserved share is fixed, every launch on the same settings graduates into a pool of the same size, at the same price. It does not matter whether the curve was bought out by one large purchase or by hundreds of small ones. Progress is quote raised against the threshold, or tokens sold against the tradable allocation. Both agree.

The finishing buy seeds the pool. If it cannot, the launch sits swept until anyone calls createGraduatedPool. LP is locked in the launch locker. There is no unlock.

Snipe protection

Every launch opens with a tax on buying, high enough that being first is not worth it, decaying to nothing within seconds. It starts at 99% and decays exponentially across the first 5 seconds. It applies only to buys. Selling is never taxed by it.

What is collected joins the trading fee. The launching address and the creator fee recipient are exempt. Extra wallets can be named at creation for a team bundling opening buys. Exemptions cannot be added later. Each launch snapshots these terms, so a live curve cannot have the window changed underneath it.

Quotes must read currentSnipeTaxBps(recipient). It is keyed on who receives the tokens, not who sends the transaction. It returns zero after the window, which is the ordinary case.

Fees

Every launch takes a 1% trade fee on the car-token leg. The creator can add 0–10% on top, fixed at creation. You pay the same rate on the curve and in the pool. The pool itself charges no LP fee.

Of the whole take, including creator tax, 70% goes to the creator and 30% to the protocol. If buybacks are on, a slice of the creator’s 70% buys the launch token back into a five-year vest. Fees accrue on the curve or the hook until a sweep. Creators withdraw from escrow; they are paid in the car token and unwrap to ETH when they claim through the router.

A creator can point future fees at a different wallet, or turn buybacks on or off. That does not mint, freeze, or touch locked liquidity.

ETH wrap

Users pay and receive ETH in the UI. FacetQuoteRouter wraps ETH to the car token, trades MEME ↔ CAR, then unwraps leftovers. Native-quote launches are disabled. Pairing against ETH directly reverts. The car wrap is the only native path.

Index

Everything that matters reads and writes onchain. There is no Facet API in the trust path. Image is logo() on the token, stored as a Supabase public URL. Price and phase are curve plus factory. Holders, trades, and volume come from a Goldsky subgraph of TokenLaunched, CurveBuy, CurveSell, and Transfer. If Goldsky is down, the token page can still load name, image, price, and progress from the contracts.