Skip to content
The Founding Airdrop is live. 20,000,000 $MOON for the founding crew. Join now →
Start here

How to launch a coin

A launch is one transaction. It clones an ERC20, mints the entire supply straight into a fresh Uniswap V3 pool as single sided liquidity, and hands the position to a locker that never gives it back. When the transaction confirms, the market is live. There is no bonding curve, no presale, and nothing to graduate from.

The part that surprises people most: you do not receive any tokens. The whole supply is the liquidity. Read what you get before you launch.

What you need

A wallet on Robinhood Chain with enough ETH to cover the launch fee and gas. That is the whole list. You do not supply any ETH or WETH as liquidity, because the supply itself is the liquidity.

Network
Robinhood Chain (4663)
Launch fee
launchFee on the factory
0.0005 ETH
Protocol contribution
burnContribution on the factory
0.0012 ETH
Total to launch
Plus gas. Both amounts are read live from the factory when you launch.
0.0017 ETH
Supply
Fixed. Not a field on the form.
1,000,000,000
Fee tier
1%

Both fee amounts are set by the factory owner and read at launch time, so treat the table as the current default rather than a promise. The number your wallet shows you is the real one. Gas is the larger cost: the transaction clones a contract, creates a pool, mints a liquidity position and transfers an NFT, so it is much heavier than a swap.

Supply is fixed

Every Moonfiesta launch mints exactly 1,000,000,000 tokens. The factory accepts a custom supply, but the form does not expose one, so through this app your supply is always 1B. Do not plan tokenomics around a different number.

Every field on the form

The launch form lives at Launch a coin. Name and ticker are required, along with a target floor market cap. Everything else is optional and goes into your token's on chain metadata.

Name
Up to 42 characters. Shown everywhere your coin appears. Not unique: anyone can launch the same name.
Required
Ticker
Up to 12 characters, uppercased for you, spaces stripped. 3 to 8 reads best. Not unique either.
Required
Image URL
https, ipfs:// or a data:image URI. See below.
Optional
Description
Plain text, hard cap 500 characters.
Optional
Telegram
@handle or a t.me link. Anything else is rejected before it reaches the chain.
Optional
Twitter / X
@handle or an x.com link.
Optional
Website
An https link or a bare domain like myproject.xyz.
Optional
Target floor market cap
In ETH. Sets your starting price. Default 5.
Required
Holder revenue share
A slice of your fee stream, routed to one address you nominate.
Optional

Name and ticker are written into the token contract at launch and can never be changed. Neither is checked for uniqueness or impersonation, so a copy of your coin with an identical name and ticker can exist minutes later. Buyers should always verify the contract address, never the name.

Picking a logo and a cover

Give the form a link to an image, not a file. It accepts an https URL, an ipfs:// URI, or a data:image URI. Plain http is rejected: the app will not render it as mixed content, so it would cost you gas and then never show up.

A logo and a cover are two different pictures doing two different jobs, and the form asks for them separately. Your logo is square: it becomes the round mark beside your coin’s name, everywhere it appears in a list, a trade or a holder row. Your cover is wide, 16:9, and colours your coin’s page. A square logo stretched across a banner gets its top and bottom cut off; a wide banner squeezed into a circle keeps only its middle. Give each one the shape it wants.

Both are optional and neither is a placeholder. Supply only one and it fills both roles, which is exactly what every coin launched before this field existed does. Supply neither and your coin gets generative art unique to its name and ticker: a real cover, not a gap waiting to be filled. Whatever you give, it is cropped and never stretched, so keep your subject centred. Keep files to a few hundred KB: nothing enforces it, but every visitor downloads it, and a slow image is the first thing people see of your coin.

You cannot store the image on chain

Only the link lives on chain. A data:image URI has to fit inside the 4KB metadata cap along with everything else, which is far too small for a real image. If your host disappears, your image disappears. IPFS is the more durable option.

The on chain metadata blob

There is no backend and no database. Your image, description, telegram, twitter and website are packed into a JSON object, base64 encoded, and written into the token's tokenURI string as a data:application/json;base64 blob. It is part of the token forever and cannot be edited after launch. Get it right the first time.

Description cap
500 characters
Whole blob cap
4096 bytes
Storage cost
~710 gas / byte
Typical blob
Image link, short description, two socials. Roughly 284k gas.
~400 bytes
Full 4KB blob
The cap exists so a launch cannot cost more in metadata than in liquidity.
~2.9M gas

The form shows a live byte counter. Going over either cap fails before you sign, rather than putting a mangled description on chain forever. If you exceed the blob cap, the usual culprit is a very long image URL, not the description.

A free gas saving

If you fill in an image and nothing else, the form writes the bare URL instead of a JSON blob, which is smaller and cheaper. Adding a one word description flips it to the full blob and costs you the JSON overhead. Either write a real description or skip it.

Target floor market cap

This is the only number that changes your market, and it is the one people get wrong. It does not raise money and it does not reserve anything. It picks your starting price:

The whole formula
starting price = floor market cap / supply
Supply is always 1,000,000,000, so the floor market cap alone decides your launch price.

Your liquidity sits entirely above that price. Because the pool holds no WETH at launch, nobody can sell into it below the floor. The price can only be pushed up from there, by people buying. A floor is a starting line, not a support level: once buyers own tokens, they can sell them back down towards it.

A low floor means cheap tokens and a small market cap that moves fast. A high floor means a buyer's ETH gets less of your supply and the chart moves slowly. There is no correct answer, but a floor far above what anyone will pay just means nothing trades.

Your floor lands on a tick, not on your number

Uniswap prices live on discrete ticks, and the 1% tier spaces them about 2.02% apart. Your floor is rounded to the first tick at or above your target, so a 5 ETH target actually starts at about 5.07 ETH. Expect to land up to roughly 2% above what you typed.

A worked example

Take the default: 1,000,000,000 supply and a 5 ETH floor. Your starting price is 5 divided by 1e9, which is 0.000000005 ETH per token, or 5e-9. Now someone buys with 0.1 ETH.

Supply
1,000,000,000
Floor market cap
5 ETH
Starting price
5.0e-9 ETH
Buy
0.1 ETH
Fee taken
The 1% swap fee, off the top. 0.099 ETH reaches the pool.
0.001 ETH
Tokens out
About 1.94% of supply.
~19,415,000
Average fill
Above the floor: the price moves while you buy.
5.099e-9 ETH
New price
Up 4.0%.
5.2e-9 ETH
New market cap
5.2 ETH

So 0.1 ETH moves a 5 ETH coin by 4%, and the buyer pays an average of 5.099e-9 rather than the 5.0e-9 headline, because every token they buy costs slightly more than the last. That is the curve doing its job. Halve the floor to 2.5 ETH and the same 0.1 ETH moves the price twice as far. Double it to 10 ETH and it moves half as far.

Note what did not happen: no ETH went to you. The 0.099 ETH is sitting in the pool as liquidity, and the 0.001 ETH fee is the only part that becomes yours to claim.

Holder revenue share

Optional. It carves a slice of the 1% swap fee off your share and routes it to one address you nominate at launch. The split is written into the locker at launch and is immutable for that token forever.

The default protocol share is 20%, so with no carve out the split is 80% you, 20% protocol. The carve out comes out of your 80, not the protocol's 20. Set 15% and you get the split the live test token uses: 65% creator, 20% protocol, 15% holders.

No carve out
creator / protocol / holders
80 / 20 / 0
10% carve out
70 / 20 / 10
15% carve out
65 / 20 / 15
Chain cap
maxCommunityBps on the factory. Above this the launch reverts.
20%
The form lets you type more than the chain will take

The form accepts up to 50%, but the factory rejects anything above its own maxCommunityBps, which is 20% at the deployed default. Enter 25% and the transaction reverts with CommunityTooHigh and you pay gas for nothing. Keep it at 20% or below.

It does not pay your holders for you

Despite the name, nothing distributes this to holders. It accrues to the single address you nominate, and that address claims it like any other recipient. Splitting it across holders is your problem to solve, with a distributor contract or by hand. If you point it at your own wallet, it is just your own fees with extra steps.

What the one transaction does

Every step below happens atomically. If any one of them fails, the whole launch reverts and you have no token, no pool, and no spent fee.

  1. Check the fee
    The factory requires launchFee + burnContribution. Anything extra is NOT sent back automatically: it is credited to ethOwed[you] and you pull it out yourself with withdrawEth(). That is deliberate, because pushing ETH during a launch would let one reverting recipient brick launches for everyone.
  2. Resolve the supply
    The form sends 0, which the factory reads as its default of 1,000,000,000.
  3. Validate the parameters
    Holder share within the cap, price non zero, ticks aligned to the 1% tier's spacing of 200.
  4. Fix the fee split
    Your share is whatever is left: 10000 basis points minus the protocol share minus your holder carve out.
  5. Clone the token
    A minimal proxy of the canonical LaunchToken, at an address derived from your wallet plus a random salt, so the app knows the address before you sign.
  6. Initialise and mint
    Name, ticker and metadata are written in, the anti snipe window is armed, and the entire supply is minted to the factory.
  7. Find or create the pool
    The 1% Uniswap V3 pool for your token against WETH.
  8. Price the pool
    Initialise it at your floor if it is fresh, then require the live price to equal yours. A pool someone else created first cannot mis-price your launch.
  9. Approve the position manager
    For exactly the full supply.
  10. Mint the position
    100% of supply, 0 WETH, into a range that sits entirely above the floor. This is the single sided part. The approval is then reset to zero.
  11. Verify the whole supply went in
    Allowing under 0.01% for tick rounding dust. If less went in, the launch reverts rather than stranding your supply.
  12. Renounce the token
    The anti snipe clock starts and the factory pointer is zeroed. From this instant the token has no admin, no owner and no mint function. Not even Moonfiesta can touch it.
  13. Lock the liquidity
    The position NFT is transferred to LpLocker with your fee split encoded into it, and the launch is emitted. It never comes back.

What you get, and what you do not

You get a live market, a permanently locked LP position, and a claim on the creator share of every swap fee that position earns for as long as anyone trades it.

You get zero tokens

Read this twice. The entire supply is minted into the pool. Your wallet balance of your own coin is 0 and there is no way to change that. There is no team allocation, no creator reserve, no vesting schedule, and no way to add one later.

If you want to hold your own coin, you buy it on the open market with your own ETH, paying the same 1% fee and the same price impact as everyone else. You can do that in the next block. You will not have any advantage over a sniper watching for new launches, and during the anti snipe window you are subject to the same max wallet cap as they are.

You also do not get the liquidity. The 0.099 ETH from the worked example belongs to the pool, not to you, and the locked position means you can never withdraw it. Your only revenue is the fee stream. See Locked liquidity for exactly what that lock does and does not protect.

The anti snipe window

For a short window after launch, the token rejects any buy that would take a wallet over a fraction of supply. On the current defaults that is 2% of supply, or 20,000,000 tokens, for 300 seconds.

Using the worked example, a 0.1 ETH buy at a 5 ETH floor lands about 19,415,000 tokens, which is just under the cap. Around 0.103 ETH would hit 20,000,000 exactly and revert. That is the practical size limit on the first buy of a 5 ETH launch. A higher floor buys fewer tokens per ETH, so the cap binds at a larger ETH amount.

Max wallet
Of supply. 20,000,000 tokens on a 1B launch.
2%
Window
From the launch transaction. Then off forever.
300s
Applies to
Transfers out of the pool. Sells are never capped.
Buys only
It is a deterrent, not a control

Do not build a launch plan around it. It is trivially bypassed by splitting a buy across several wallets, and it only inspects transfers that come directly out of the pool, so a route where the sender is not the pool sidesteps it entirely. It raises the effort of sniping your launch. It does not prevent it.

These defaults are read at launch time

The cap and window are snapshotted into your token when it is minted, and are frozen afterwards. But they are read from settings the factory owner controls, and the factory owner key is compromised. A hostile owner could set a punitive cap or a very long window that would apply to your launch, not to tokens already live.

The same applies to the fees and the protocol share. Check the values before you launch and read Safety and risks first. The contracts are unaudited.

Claiming your fees

Fees do not arrive automatically. Every swap pays the 1% fee into your locked position, where it sits until someone harvests it. Harvesting is two steps and the first one is permissionless, so anyone can trigger it for you.

  1. Harvest
    collectRewards on LpLocker sweeps the position's fees, splits them by the shares fixed at your launch, and credits each recipient inside FeeVault.
  2. Claim
    claim on FeeVault pays out what you are owed. It is pull based: nothing is ever pushed to your wallet, and there is no admin path to move what is credited to you.

Buys pay their fee in WETH and sells pay it in your token, so you can end up owed both. The creator dashboard wraps both steps. For the full detail on how the split works and when it is worth the gas, see Fees and rewards.

Pre-launch checklist

Nothing on this list can be fixed after the transaction confirms. There is no edit button, and relaunching means a new address and starting over.

  1. Name and ticker are final
    Spelled the way you want them forever. Check the ticker for an accidental typo, since the form uppercases and strips spaces as you type.
  2. Your image loads over https or ipfs
    Paste the URL in a fresh browser tab. If it does not load there, it will not load on your token page. Check the 16:9 crop in the live preview.
  3. Your description says something
    500 characters is enough for what the coin is and why. It is on chain forever, so proofread it.
  4. Social links are real
    A t.me link to a group that exists, an x.com handle that exists. Broken links on a brand new coin read as a scam.
  5. Your floor is deliberate
    You have decided the starting price, not accepted the default 5 because it was there. Remember it rounds up to the nearest tick.
  6. Holder share is 20% or below
    And the recipient address is one you control or trust. It is immutable for the life of the token.
  7. You accept getting zero tokens
    And if you plan to buy your own coin, you have the ETH ready and know about the max wallet cap in the first 300 seconds.
  8. You have read the risks
    The contracts are unaudited and the factory owner key is compromised. Safety and risks is short and it is honest about what can go wrong.