Standard
Creator keeps the full half.
- Treasury
- 50%
- Creator
- 50%
- Holders
- 0%
Documentation
PotatoPad is a memecoin launchpad on Robinhood Chain. Every coin is live on Uniswap V3 the instant it launches, with a fixed supply that can never change and liquidity locked forever. Here is how all of it works.
PotatoPad is a memecoin launchpad on Robinhood Chain (an Arbitrum Orbit L2, chainId 4663). You can spin up a token in a couple of clicks, and it starts trading the instant it launches. No forms to fill out with a market maker, no waiting for a listing.
The one-line pitch: launch a coin that is live on Uniswap V3 from block one, with a supply that can never change and liquidity that is locked forever, so the person who created it cannot pull the liquidity.
The name is a nod to Robin Hood. The theme is potatoes and giving to the poor, and one of the launch types (Give-to-the-Poor mode) even rewards small holders with a bigger slice of trading fees. Warm and a little silly on the surface, with strict guarantees underneath.

How it started. The very first coin planted here was CHIP (
CHIP/WETH on Uniswap V3, launched 16 July 2026,0x1e4d3243a287EDb687A4cBf2A1223dA54E8c835f). One potato, then a whole sack.
Four things are true of every PotatoPad coin, and they are enforced by the contracts, not by a promise:
Read this part plainly. It is written to be honest, not to sell you anything.
PotatoPad is UNAUDITED. The contracts have not been through a formal third-party security audit. They are open and original (MIT licensed), but "unaudited" means exactly that: use them at your own risk, and do not put in more than you can afford to lose.
These are guarantees enforced in code, and you can verify each one on-chain:
owner() getter returns the zero address, which is just there so scanners and DEX tools mark it as renounced.) Nobody can freeze your balance or change the token after it ships.One thing that is explicitly NOT a hidden tax, so you know what you are looking at: the only extra rule in the token beyond a vanilla ERC20 is a time-boxed anti-snipe cap. For the first 1200 blocks after launch (about two minutes at current block times), a single non-exempt wallet cannot end a transfer holding more than 2% of supply. After that deadline block it is a complete no-op and the token behaves like any normal ERC20 forever. It is a max-wallet limit during launch, not a buy/sell tax and not a decaying fee.
Locked liquidity and an immutable token protect you from a rug and from a surprise reprint. They do not protect you from the market.
Do your own research. This is not financial advice. PotatoPad gives you strong, checkable guarantees about how the contracts behave. It gives you zero guarantees about price or profit. Treat every launch as high risk, verify things yourself on the explorer (https://robinhoodchain.blockscout.com), and only risk what you are fine losing.
You need two things to use PotatoPad: a wallet connected to Robinhood Chain, and a little ETH on that chain for gas. Here is the whole setup.
PotatoPad runs on Robinhood Chain, an Arbitrum Orbit L2. Any EVM wallet works (MetaMask, Rabby, and similar). Add the network with these details:
| Field | Value |
|---|---|
| Network name | Robinhood Chain |
| Chain ID | 4663 |
| RPC URL | https://rpc.mainnet.chain.robinhood.com |
| Currency symbol | ETH |
| Block explorer | https://robinhoodchain.blockscout.com |
Connecting your wallet on potato.fm will usually offer to add or switch to the network for you.
potato.fm/create, fill in the name, symbol, image, and any socials, and sign one transaction. Launching costs only gas, plus whatever ETH you choose to put into an optional dev buy. There is no separate launch fee.potato.fm/token/<tokenAddress> with a live chart and a built-in buy/sell widget. You can also trade through any Uniswap V3 compatible interface.The community lives on the Telegram linked from potato.fm. That is the place for questions, help, and updates.
Launching on PotatoPad is one signed transaction. No presale to run, no liquidity to add yourself, no contract to write. You bring a name, a symbol, and some art. The pad does the rest.
Then you sign once.
0x7a70. That is "TATO", the closest you can spell to "potato" in hex (p, t, and o are not hex digits). It is cosmetic, and it costs you nothing.owner() returns the zero address, so scanners read it as renounced. Once deployed it can never be changed.The pool opens at a fully-diluted valuation of about 1.3 ETH (the exact on-chain actualStartFdv is roughly 1.3025 ETH, after the pad snaps the opening price to the 1% tier's tick spacing). FDV is just token price times the 1,000,000,000 supply, denominated in ETH.
Because essentially all of the supply sits in that one position starting at the opening price and running upward with no ceiling, the price is simply the pool's slot0 tick. Every buy walks the price up the range, every sell walks it back down. From block one it is a normal Uniswap V3 pool that anyone can trade, chart, and price like any other token.
For the first 1200 blocks after launch (roughly 2 minutes at Robinhood's ~0.1s block time), no ordinary wallet may finish a transfer holding more than 2% of supply (20,000,000 tokens). An over-cap transfer reverts. This throttles bots from vacuuming up the launch supply in the opening blocks.
After that deadline block the cap is a complete no-op and the token behaves like a vanilla ERC20 forever, with no residual limit. (The launch infrastructure, the pad, pool, position manager, locker, and burn address, is exempt so normal pool mechanics and fee collection never trip the cap.)
If you attach ETH to the launch, the pad performs the very first buy for you on the same pool, at the same 1% fee everyone else pays. Two things to know:
Essentially all 1,000,000,000 tokens go into the pool. There is no presale, no team allocation, no vesting, and nothing held back. The only way anyone, including you, starts with a bag is the dev buy, and that is an ordinary market buy on the same pool, at the same price and fee as the public, capped at 2% during the window.
Once launched, the token is immutable and the LP is locked. PotatoPad never custodies your funds and holds no keys to your token.
You upload art for "PotatoRocket" ($PROCK), paste your X link, and decide to make a small dev buy. You sign one transaction. Out comes a 0x7a70… token with a 1,000,000,000 supply, a live Uniswap V3 pool opening near 1.3 ETH FDV, and all of its liquidity locked in the fee locker. Your dev buy lands your first tokens (under the 2% cap), any unused ETH comes back, and from that block on anyone can buy or sell.
The standard launch above is one of a few types. Holder-reward and Give-to-the-Poor launches share this exact machinery (same fair launch, same single-sided locked LP, same anti-snipe) but change how fees are shared, and Give-to-the-Poor tokens keep permanent per-wallet caps rather than the time-boxed one. Those are covered in their own sections.
Every PotatoPad token trades on Uniswap V3 from block one. There is no waiting for a bonding curve to fill on some custom AMM, and no "graduation" step that flips trading on later. At launch the pad seeds the entire supply into a single Uniswap V3 position, and that position is the curve. So the moment a token exists, it has a real, public Uniswap V3 pool that anyone can buy from or sell into.
Trading costs 1% on buys and 1% on sells. This is the standard Uniswap V3 pool fee for the 1% fee tier (fee tier 10000, tick spacing 200), charged on the amount you put in. It is symmetric, so the rate is 1% in both directions, charged on whichever asset you put in: WETH on a buy, the token on a sell.
A couple of things worth knowing:
Where that 1% goes is covered in the fees section: in short, the token side of collected fees is burned and the ETH side is split between the creator and the treasury (and holders, on the reward and Give-to-the-Poor launch types).
There is no custom pricing formula to trust. Price is simply the pool's current tick, read from Uniswap V3's slot0. Because the whole supply sits in one concentrated-liquidity range, buying walks the price up that range and selling walks it back down, exactly like any other Uniswap V3 pool. As buyers push the price up through the range, the token moves toward its bond target. Nothing about that mechanism is special to PotatoPad. If you can price or chart a Uniswap V3 token, you can price and chart a PotatoPad token.
Fully-diluted valuation is just price times total supply:
FDV = price x 1,000,000,000
Every PotatoPad token has a fixed supply of exactly 1,000,000,000 (1 billion) tokens, so FDV is the current pool price of one token multiplied by 1 billion, denominated in the quote asset (ETH / WETH on Robinhood Chain). For reference, a fresh curve launch opens near ~1.3 ETH FDV and its bond target sits near ~23 ETH FDV. For exact, tick-aligned figures, read the pad's on-chain getters (actualStartFdv(), actualTopFdv()) rather than hand-math.
You have two easy paths, and they hit the same pool:
https://potato.fm/token/<tokenAddress> and use the built-in trade widget. Robinhood Chain (chainId 4663) is the default, so there is nothing extra to configure.Same pool, same 1% fee, same price either way. PotatoPad never sits between you and the trade. This is not financial advice, and PotatoPad is unaudited, so trade with care.
A curve-pad token on the current pad starts life around 1.3 ETH fully-diluted valuation (FDV) and climbs as people buy. When its price reaches the bond level, about 23 ETH FDV on that pad, the token "graduates" (also called bonding). FDV here is just price times the fixed 1,000,000,000 supply, priced in ETH.
Here is the part that trips people up, so we will say it plainly: graduation is a milestone, not a migration. Nothing mechanical changes.
10000) on buys and sells, before and after bond.On-chain, graduation is tiny. Someone calls bond(token), and if the price is at or above the bond tick, the pad flips one flag (bonded = true) and emits a Bonded event. That is the whole state change. In the contract's own words, bond() "moves no funds or liquidity" and "only flips the bonded progress flag and emits an event (a marker for the UI, not a state migration)." Think of it as a badge the token earns, not a gear that shifts.
The single most important thing to know: the Bonded event is best-effort, not a reliable oracle. bond() is permissionless (anyone can call it), and it only latches if it is called while the price is at or above the bond tick. The chain keeps no memory of past crossings, so a token can effectively be past its bond price without Bonded ever having fired. Do not treat "no Bonded event" as "not graduated."
Instead, derive status from live price versus the bond tick:
slot0 tick and compare to the pad's tickCeil(). The pad does exactly this internally, accounting for token ordering: if the launched token is token0 the price rises with buys (tick >= tickCeil), and if it is token1 the price reads inverted (tick <= -tickCeil).bondable(token) returns true once the price has reached the bond level (and it has not been latched yet).curveProgressBps(token) returns progress from launch to bond as 0 to 10000 basis points, and 10000 once bonded. One caveat: it measures the tick range, and ticks are logarithmic in price, so it is not a straight-line share of the ETH FDV climb. A reading of 6200 is about 62% of the tick span to the bond tick, but only roughly a third of the 1.3-to-23 ETH FDV distance. Read it as a curve-position gauge, not a percentage of market cap.For exact FDV thresholds rather than the round "1.3 ETH / 23 ETH" figures, read the on-chain getters actualStartFdv() and actualTopFdv() (the pad snaps the underlying ticks to spacing 200, so the enforced values differ slightly from the round targets, which are themselves on-chain as targetStartFdv() and targetTopFdv()). These bounds are set per pad at deploy time as constructor parameters, so for a token on an older curve pad, read them from that pad rather than assuming the current 1.3/23 numbers.
Bottom line: graduation is a celebration marker, not a mechanism. The token traded on Uniswap V3 the whole way up and keeps trading on the exact same pool, at the exact same 1% fee, the moment after it bonds.
Every swap on a PotatoPad token pays a flat 1% pool fee. It is the standard Uniswap V3 fee tier (10000, tick spacing 200), and it is symmetric: 1% on buys and 1% on sells. This is a pool swap fee, not a tax baked into the token, so moving tokens wallet to wallet costs nothing.
Because Uniswap charges the fee on whatever token you put in:
Where the fees live. The launch LP is minted straight into the PotatoFeeLocker and locked there forever. There is no withdraw and no decrease-liquidity path, so the principal can never be pulled. What the locker does let out is the swap fees, which pile up inside that locked position as people trade.
Realizing the fees is permissionless. Fees do not sweep themselves on every swap. Anyone (a creator, a bot, a curious holder, whoever) can call collect(positionId) on the locker to harvest the accrued fees into it. A plain swap does not trigger this, so someone has to crank it, but that someone can be anybody.
The split of what gets collected:
0x000000000000000000000000000000000000dEaD in full. Neither the creator, the treasury, nor holders receive it. This is the deflationary part: every sell quietly burns a sliver of supply.CREATOR_FEE_SHARE_BPS = 5000 (50%). The treasury's half is auto-forwarded on every collect (pushed straight out, with a claimable fallback so collection can never get bricked). The creator's half is pull-claimed: it waits as a claimable balance until the creator withdraws it, at which point the WETH is unwrapped and paid out as native ETH.We say "by default" because the pad owner can set a different treasury share per token on standard launches (for example, leaving a team 90% and keeping 10% for the treasury). That lever only ever touches future fees, never the locked principal or fees already accrued.
On the token page. The "Creator fees" (Harvest) card folds both steps into one button. If you are the creator, "Collect & claim" fires collect and then claims your WETH out to your wallet. If you are just passing through, the same card offers a plain "Collect fees" crank that harvests the fees into the locker (the creator's share still only ever goes to the creator, so cranking it for someone else just does them a favor).
Fees are perpetual. Because the LP is locked at launch and lives on Uniswap V3 the whole time, fees start accruing from block one and keep accruing for as long as the token trades. Graduation ("bond") does not change the fee: it stays 1% before and after.
Worked example. Someone buys with 1 WETH. The pool keeps 1%, so 0.01 WETH, as the fee. After a collect, that 0.01 WETH splits into 0.005 auto-sent to the treasury and 0.005 set aside for the creator to claim. A sell, by contrast, pays its 1% fee in the launched token, and that side is burned.
Every launch splits the 1% trading fee the same way at the top: the treasury always takes 50%, and the other 50% (the "creator half") is what a launch mode decides how to hand out. You pick this once at launch, and it is fixed for the life of the token. There are three ways to go.
Creator keeps the full half.
Creator shares the half with holders.
Creator takes nothing; holders take the half.
Standard. The creator keeps the full creator half. Of total fees that is 50% creator, 50% treasury, and holders get nothing extra. This is the default.
Holder rewards. Instead of keeping it all, the creator shares the creator half with everyone holding the token. A slider at launch sets how much the creator keeps (anywhere from 0 up to 45% of total fees); holders split the rest (5% up to 50% of total fees). This is the ability to give more fees away: the further you slide toward holders, the more of the trading fees flow to the people holding your coin, paid out continuously as it trades.
Give-the-Poor (Cashback). The all-in version of holder rewards: the creator keeps nothing, and the entire creator half (a full 50% of every trading fee) streams to holders. Pure Robin Hood, the dev earns zero and the crowd earns it all.
How holders get paid. On a holder-rewards or Give-the-Poor launch, each holder earns a share of the reward pool in proportion to how much of the token they hold, accruing as the token trades. You claim it as native ETH from the token page: claim() on the token pays you out, and pendingRewards(yourAddress) shows what you are owed. The "Creator fees" Harvest card is replaced by a holder-rewards card on these launches.
No extra wallet caps. Reward tokens behave like every other PotatoPad token. The only transfer rule is the standard launch anti-snipe (max 2% per wallet for the first 1200 blocks, then a plain ERC20 forever). There is no permanent per-wallet cap.
One more lever, separate from the mode you pick: on standard launches the pad owner can set a different treasury share for a specific token (for example, leaving a team 90% and keeping 10% for the treasury). That is an owner tool, not a launch option, and it only ever affects future fees, never the locked liquidity or fees already accrued.
Rewards and creator earnings come from trading fees, so they depend entirely on how much the token trades. They are never a fixed yield and never guaranteed. None of this is financial advice.
This is the short version for teams building indexers, wallets, aggregators, or charts on top of PotatoPad. The full technical reference, with complete ABIs and exact event signatures, lives in POTATOPAD_INTEGRATION.md at the repo root, and every ABI plus a minimal Uniswap V3 pool ABI ships in potatopad-abi.json. When this summary and that doc disagree, the doc wins.
The one idea that makes everything else simple: every PotatoPad token is a normal Uniswap V3 pool from block one. There is no custom curve contract and no migration. You price it, chart it, and detect its trades exactly like any other Uniswap V3 token.
4663https://rpc.mainnet.chain.robinhood.comhttps://robinhoodchain.blockscout.com0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73.| Role | Address |
|---|---|
| PotatoCurvePad (the current launchpad, watch this) | 0xbE2aCD9044516399aa4C697c299571664fBe9d4B |
| PotatoFeeLocker (fee custody, default 50/50 split, configurable per token) | 0x47eC8916647007c66985aa316f70C44Dd41D75EB |
| Uniswap V3 Factory (Uniswap's, not ours) | 0x1f7d7550b1b028f7571e69a784071f0205fd2efa |
| Uniswap V3 NonfungiblePositionManager | 0x73991a25c818bf1f1128deaab1492d45638de0d3 |
| WETH (quote asset) | 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 |
The two CREATE2 deployer factories (PotatoTokenFactory 0x713fA9c01E9605F45a46284AbE848A32Ae7917fc, PotatoPoorTokenFactory 0x477782AD8EA1bBD93d833D627cb42b892CE1E8A6) emit no events. Do not watch them. Every launch log is emitted by the pad.
New-token creation is emitted by the pad, so the emitting address on the log is the pad, never a factory. Watch:
event TokenCreated(address indexed token, address indexed creator, string name, string symbol,
address pool, string imageURI, string website, string twitter, string telegram);
TokenCreated.pool is the token's Uniswap V3 pool, the thing you index for Swap events and pricing. A companion CurveOpened(token, pool, positionId, liquidity) fires in the same launch transaction.
The pad is versioned. 0xbE2aCD...9d4B is the current pad (deployed around block 20461687) and is where new launches land, but older tokens still live on earlier pads and still trade on their own standard 1% pools. To resolve every token ever created, scan the same TokenCreated signature on every pad below (one ABI parses them all). A token belongs to exactly one pad, so dedup by token address.
| Pad address | Type | Index from ~block |
|---|---|---|
0xbE2aCD9044516399aa4C697c299571664fBe9d4B |
curve | 20461687 (current) |
0x1651056D39141717179581fF5305b0EF45C68241 |
curve | 19264637 |
0x00623884A6F2F2D07F805264D39b1c19e0F3194a |
curve | 17543173 |
0x94085E08B91dA3cB974c14FE6d51B20a014b6069 |
curve | 14984902 |
0x88bb90A984B4f61d971d71b25c81b187AEE4Ca07 |
direct | 14984800 |
0x88eB8F4aC925C0a6b5501da0eb7E202a036EA338 |
direct | 14072000 |
0xe26e17B552A3f0361b0546443FFe58F7cF509001 |
direct | 13221549 |
0x67225AC6ba037aA220F68e5aAA2b49Be4B0863E8 |
direct | 12757281 |
0x12A075A946c790F05a23d2DcEa70B207DB23D91F |
direct | 11555000 |
0xc12723c251dABcBe10c4F44060A6AE6b5E96a79d |
direct | 11481181 (holds CHIP) |
The "index from" blocks are practical starting points, not exact deploy blocks, and the ranges overlap slightly where one pad handed off to the next, which is the other reason dedup by token address is required.
The type column matters for the rest of this section:
tickCeil). Only these tokens have curve state and a graduation concept.TokenCreated event, same standard Uniswap V3 1% pools, but no curve and no graduation. The getters in the next two subsections do not apply to them.On a curve pad, curves(tokenAddress) returns the token's curve record: creator, pool, positionId, and a bonded bool. If creator comes back as the zero address, that token was not launched on this pad (for example, a direct-pad token), so treat it as "not a curve token here" rather than "0% bonded".
Two view helpers on the pad give you progress without any tick math:
bondable(token) returns true when price currently sits at or above the bond threshold.curveProgressBps(token) returns 0 to 10000 (basis points) of the way from the opening price to the bond price.Call these only against a curve pad and only for a token that pad launched. Reading them for a direct-pad token is meaningless.
Price comes straight from the pool's slot0 (the sqrtPriceX96 / tick), same as any Uniswap V3 pool. Fixed supply is 1,000,000,000 tokens (18 decimals), so:
FDV (in ETH) = price (ETH per token) x 1,000,000,000
Multiply by an ETH/USD spot price for a dollar figure. The pad's opening and bond targets are 1.3 ETH and 23 ETH (readable as targetStartFdv() and targetTopFdv()), but the pad snaps the derived ticks to tick spacing 200, so the enforced values differ slightly. For the exact enforced numbers read the on-chain getters actualStartFdv() and actualTopFdv() (both return wei), plus tickFloor() and tickCeil(). On the current pad actualStartFdv is about 1.3025 ETH and actualTopFdv is about 23.2 ETH.
Graduation is the token's price crossing the bond tick. Do not rely on the Bonded(token, pool, positionId) event as your source of truth. bond() only latches while price is above the threshold, the chain keeps no memory of past crossings, and bond() reverts with AlreadyBonded() once set, so a token can cross, retrace, and never emit Bonded at all. Treat the event as a best-effort marker only.
Derive graduation yourself. The cleanest path is bondable(token) (or curveProgressBps(token) == 10000). If you want to compute it from the live pool tick directly, use the exact ordering rule the pad uses, where the token is token0 when its address sorts below WETH:
graduated = (token < WETH) ? (tick >= tickCeil()) : (tick <= -tickCeil())
WETH is 0x0Bd7D308..., so real tokens sort on both sides of it. Getting that sign backwards is the most common integration bug here, so use both branches.
Nothing mechanical changes at graduation: no migration, no re-pooling, no fee change. The LP was permanently locked in the fee locker at launch, and the pool fee stays 1% (10000, tick spacing 200) before and after. So for trade detection you always read Swap on the token's V3 pool, and WETH flowing into the pool is a buy of the launched token.
https://potato.fm/token/<tokenAddress>
chainId 4663 is the default, so no query parameter is needed. Example: https://potato.fm/token/0x1d0a632CF332256ff26537B4d9583C74b4266896.
For full ABIs, exact event signatures, the fee-split details, and the anti-snipe and Give-the-Poor cap rules, read POTATOPAD_INTEGRATION.md and load potatopad-abi.json. This is a summary, not the spec, and PotatoPad is unaudited. None of this is financial advice.
PotatoPad is unaudited and this documentation is informational, not financial advice. Verify everything on-chain at robinhoodchain.blockscout.com. For full ABIs and integration details see POTATOPAD_INTEGRATION.md.