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.
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.
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 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.
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.
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.
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:
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.
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.
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.
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.
- Check the feeThe factory requires
launchFee + burnContribution. Anything extra is NOT sent back automatically: it is credited toethOwed[you]and you pull it out yourself withwithdrawEth(). That is deliberate, because pushing ETH during a launch would let one reverting recipient brick launches for everyone. - Resolve the supplyThe form sends 0, which the factory reads as its default of 1,000,000,000.
- Validate the parametersHolder share within the cap, price non zero, ticks aligned to the 1% tier's spacing of 200.
- Fix the fee splitYour share is whatever is left: 10000 basis points minus the protocol share minus your holder carve out.
- Clone the tokenA 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.
- Initialise and mintName, ticker and metadata are written in, the anti snipe window is armed, and the entire supply is minted to the factory.
- Find or create the poolThe 1% Uniswap V3 pool for your token against WETH.
- Price the poolInitialise 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.
- Approve the position managerFor exactly the full supply.
- Mint the position100% 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.
- Verify the whole supply went inAllowing under 0.01% for tick rounding dust. If less went in, the launch reverts rather than stranding your supply.
- Renounce the tokenThe 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.
- Lock the liquidityThe 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.
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.
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.
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.
- Claim
claimon 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.
- Name and ticker are finalSpelled the way you want them forever. Check the ticker for an accidental typo, since the form uppercases and strips spaces as you type.
- Your image loads over https or ipfsPaste 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.
- Your description says something500 characters is enough for what the coin is and why. It is on chain forever, so proofread it.
- Social links are realA 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.
- Your floor is deliberateYou have decided the starting price, not accepted the default 5 because it was there. Remember it rounds up to the nearest tick.
- Holder share is 20% or belowAnd the recipient address is one you control or trust. It is immutable for the life of the token.
- You accept getting zero tokensAnd 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.
- You have read the risksThe contracts are unaudited and the factory owner key is compromised. Safety and risks is short and it is honest about what can go wrong.