Documentation · Launch a coin
DocsGetting started

Launch a coin

Launching is three transactions in a fixed order. The order is not a design choice — Pons timelocks the creator fee recipient for 72 hours, so the vault has to exist and be named inside the launch call itself.

You do not need any of this

The launch page does all three from a wallet, in one click. It sizes the multiplier, deploys the vault and names it as the creator fee recipient inside the Pons call — which is the only moment that field can be set correctly.

What follows is the same sequence by hand, for anyone who would rather send it themselves. You need ETH on Robinhood Chain for gas and the 0.0005 ETH launch fee.

Why the order is forced

Pons exposes a constant named CREATOR_FEE_RECIPIENT_TIMELOCK, set to 72 hours. Pointing a launch's fee stream at a new address does not take effect until that window has elapsed. If the vault were deployed after the curve, the first three days of fees — which on a bonding curve is the busiest the coin will ever be — would land somewhere else.

So the vault is built knowing only what exists before the curve does: the skin, the quote asset, the supply and the multiplier. The token address is pinned afterwards, once, and permanently.

Step 1 — Deploy the vault

The vault's constructor takes the oracle, the skin id, the quote token, the quote unit, the token supply, the multiplier and the Pons fee escrow. Every one of them is immutable.

SKIN="AWP | Dragon Lore (Field-Tested)" \
SKINS_PER_SUPPLY=… \
forge script contracts/script/DeployLaunchpad.s.sol:DeployVault \
  --rpc-url rh_mainnet --broadcast

Choosing the multiplier

Pons fixes the opening market cap of a USDG pair at $3,236. No liquid skin is worth that — the most expensive item in the reference basket trades around $2,150 — so a coin whose whole supply represented one skin would open far above its target, in the one direction a fresh vault cannot defend, since it holds no tokens to sell.

The multiplier fixes that by declaring the supply to be worth N skins, with N chosen so the target lands exactly on the opening cap. A $400 skin gives N ≈ 8.09; the coin opens at peg and tracks the item's price movement from there, which is the actual promise.

Step 2 — Launch on Pons

Done through the Pons interface. Two fields matter and neither can be corrected cheaply afterwards.

FieldValueIf you get it wrong
Paired assetUSDGWETH is not on the approved list; the launch reverts
Creator walletthe vault address72 hours of fees go elsewhere and cannot be recovered
Creator tax0 bps by defaultAbove zero it accrues, but see below on where it lands

On the creator tax

Pons lets a launch set a second charge of up to 1,000 bps on top of the 1% trade fee, and the launch page exposes it as a slider. It is not small: the curve accrues it as a separate balance at the full rate, so 200 bps brings in roughly four times what the 0.70% creator share of the fee does. Two live curves confirm the accrual exactly — both set to 200 bps, both showing a creator tax balance precisely twice their quote fee balance.

What we could not confirm is where that balance goes when it is swept. The curve's feeEscrow() is the same escrow that credits the creator fee recipient, so it may well reach the vault and fund defence far faster than the fee share alone — which would rewrite the arithmetic on the coverage page entirely. But no sweep has happened on a curve we could watch, so that is inference, not evidence. Zero is the default because it is the only setting whose effect is not in question.

Pons applies an opening tax of 99% that decays to zero over the first three seconds. It is an anti-snipe measure and it applies to everyone, including you. Do not buy your own coin in that window.

Step 3 — Bind the curve

The last transaction deploys the adapter and hands it to the vault, which pins the token address for good. From there the keeper can call defend() and the coin is live.

VAULT=0x… CURVE=0x… TOKEN=0x… \
forge script contracts/script/DeployLaunchpad.s.sol:BindCurve \
  --rpc-url rh_mainnet --broadcast

What you cannot do afterwards

  • Withdraw from the vault. No function exists, for any address.
  • Repoint the vault at a different token. setCurve() reverts once it has been called.
  • Change the band, the maximum spend or the multiplier. All immutable.
  • Change the reference price for a skin arbitrarily — that takes a quorum of signed reports, and the oracle page describes the constraints on them.

Snapshot data last refreshed Sep 23, 2026 UTC.