Back the idea before it's a token.
Everything about how PitchPump works, and how to build on it.
Pitch
Someone proposes a token and pays the first vote.
Validate
Backers pay the same price to join.
Launch
The last spot fills and the token goes live.
Curve
Anyone trades on a bonding curve.
Graduate
Liquidity moves to Uniswap v4, locked forever.
Overview
PitchPump is a place to launch and trade tokens on Robinhood Chain, where a token only exists once enough people have backed it. Anyone can pitch an idea. Other people validate it by paying the same price the pitcher did. When the last spot fills, the token launches, and everyone who backed it receives an equal share.
PitchPump never holds your funds outside its smart contracts. Every pitch, vote, trade and claim is a transaction your own wallet asks you to approve.
- Names, symbols and pictures can be copied. Always check the token address.
- Prices come from each token's live bonding curve or Uniswap pool.
- Tokens can be volatile, illiquid, or lose all value.
How it works
Pitch
The pitcher sets the token's name, symbol, description, picture and links, the price per vote, how many validators it needs, and an optional creator tax. The pitcher pays the first vote and becomes contributor number one.
Validate
Other people back the pitch by paying the same price per vote. Until launch, validators can withdraw their stake at any time, and the pitcher can cancel to refund everyone.
Launch
When the last spot fills, the token is created in that same transaction. The whole pot, minus the launch fee, buys into a bonding curve, and the tokens bought are split equally between all contributors.
Trade on the curve
Anyone can buy and sell against the bonding curve. Buying moves the price up and selling moves it down.
Graduate
Once 4.2 ETH has entered the curve, it closes and its reserves move into a Uniswap v4 pool, where the liquidity is locked permanently and trading continues.
Pitching and validation
- Price per vote
- Set by the pitcher, minimum 0.0005 ETH. Every contributor pays exactly this amount, including the pitcher.
- Validators needed
- Between 1 and 500, not counting the pitcher.
- Creator tax
- Optional, from 0% to 10%, charged on every trade and paid to a wallet the pitcher chooses. Locked permanently once the pitch is created.
- Deadline
- None. A pitch stays open until it fills or the pitcher cancels it.
- Withdrawing
- Validators can take their stake back at any time before launch. The pitcher cannot withdraw alone, but can cancel the whole pitch.
- Cancelling
- Returns every contributor's stake in full. No fee is charged on a pitch that never launches.
Validators are backers, not reviewers. Validating means putting your own ETH behind an idea on the same terms as everyone else.
For pitches with up to 50 contributors, refunds on cancel are sent automatically. Above 50, each validator withdraws their own stake from the pitch page, so that no single transaction grows too large to fit in a block.
Launch
The transaction that fills the last spot also launches the token:
- A new token is created with a fixed supply of 1,000,000,000.
- The full supply is placed in a new bonding curve.
- The pot, minus the 0.0005 ETH launch fee, buys tokens from the curve.
- The tokens bought are split equally between every contributor.
Because all of this happens in one transaction, nobody can buy ahead of the contributors. There is no separate moment where the market opens before the backers are in.
With up to 50 contributors, everyone's tokens arrive in their wallet automatically. Above 50, each contributor presses Claim on the pitch page to collect their share.
A new token opens at a market cap of about 1.8 ETH. Contributors' combined stake moves it only slightly. For example, eleven contributors at 0.0005 ETH each launch a token at about 1.81 ETH.
Trading and pricing
Before graduation, every token trades against ETH on its own bonding curve. After graduation, it trades against ETH in its own Uniswap v4 pool. The price you see is the live price, and it moves with every trade. The amount you receive can differ from the quote, and slippage sets how much of that movement you accept.
- Price
- The current price of one token, from the curve or the pool.
- Market cap
- Price multiplied by the fixed supply of one billion tokens.
- FDV
- The same as market cap, since the supply is fixed.
- Liquidity
- The real ETH available to trade against.
- Price impact
- How much your trade itself moves the price.
- Slippage
- The maximum price movement your transaction will accept before it fails.
How the curve prices tokens
The curve is constant-product, and it starts with a virtual reserve of 1.8 ETH that is never actually held. The virtual reserve sets the opening price, so a new token has a real price and market cap from its first moment, even before much ETH has come in.
price = (1.8 ETH + real ETH in the curve) ÷ tokens left in the curve
Selling back to the curve is allowed at any time before it fills. If a buy would take the curve past its limit, it fills only the tokens that are left and refunds the rest of your ETH in the same transaction.
Graduation
A curve is full once 4.2 ETH of real ETH has entered it. At that point it stops trading, and anyone can graduate it. Every token graduates at the same market cap, about 20 ETH, no matter how many trades it took to get there.
Graduation moves the curve's reserves into a Uniswap v4 pool paired with ETH. The pool opens at exactly the curve's closing price, so there is no jump or gap. The pool's liquidity position is held by a locker contract with no withdrawal function, so it stays locked forever.
Graduation only confirms that the threshold was reached. It is not a quality signal and does not guarantee future liquidity, price, or an exit.
Fees and burns
| Fee | Amount | When | Goes to |
|---|---|---|---|
| Launch fee | 0.0005 ETH | Once, when a pitch launches | Half platform, half burn wallet |
| Trading fee | 1% | Every buy and sell, on the curve and on Uniswap | Half platform, half burn wallet |
| Creator tax | 0–10% | Every buy and sell, if the pitcher set one | The creator's chosen wallet |
- The most any trade can pay is 11%: the 1% trading fee plus the 10% maximum creator tax.
- All fees are paid in ETH, never in the token.
- Fees are fixed in the contracts forever. Nobody, including the PitchPump team, can change them.
- A pitch that never launches pays no fee.
Claiming
Fees are not sent out automatically. They build up in the contracts, and each recipient claims their own balance from the Profile page or the token page. This keeps trading from ever depending on a payout succeeding.
Burns
Half of every platform fee goes to a dedicated burn wallet. It is intended to fund buybacks of the PITCH token, which are then sent to a burn address and removed from circulation. Burning does not guarantee a higher price.
Risk disclosures
Tokens launched through PitchPump are created by users and are experimental. Before signing any transaction, check the token address, the creator, the liquidity, how concentrated the holders are, and the transaction preview in your wallet.
- Prices can move quickly, and liquidity can be thin.
- Similar names and pictures can belong to unrelated tokens.
- Smart contracts, wallets, RPCs and indexers can fail.
- Displayed values are estimates, not execution guarantees.
- Transactions on a blockchain are final and cannot be reversed.
- The contracts have been informally reviewed but have not undergone an independent audit. They are immutable, so a bug cannot be patched after deployment. Only use money you can afford to lose.
Not financial advice
Nothing on PitchPump, in these docs, or in any PitchPump communication is financial, investment, legal or tax advice. PitchPump is software for launching and trading tokens. It does not recommend, endorse or vouch for any token, pitch, creator or trade.
A pitch filling up, a token graduating, a high market cap or a large number of validators is not a signal of quality or future value. Tokens can go to zero.
You are solely responsible for your own decisions and for complying with the laws that apply to you. Do your own research, and speak to a qualified professional before making financial decisions.
Integration
Everything reads directly from the contracts. Index the strategy, curve and pool events for a trust-minimized, onchain source of truth.
Network
- Network
- Robinhood Chain
- Chain ID
- 4663
- Native asset
- ETH
- Public RPC
https://rpc.mainnet.chain.robinhood.com- Explorer
- robinhoodchain.blockscout.com
- Supply
- 1,000,000,000 per token, 18 decimals
- Curve
- 1.8 ETH virtual reserve, graduates at 4.2 ETH real
- Graduated pools
- Uniswap v4, ETH / token, 0 LP fee, tick spacing 200, full range
Contracts
Deployed addresses on Robinhood Chain. The contracts are immutable, with no admin functions to pause, upgrade, change fees or move locked liquidity.
0x7563086C680aAc0ED75bC5E5589eDfd35E430d110x1C1e1Fb0FdA17342dBEc35BbE27AA455458ce0cC0x06b208a736eDc9Bba4666D852e3e9E50Bae1D8890x73a91E1F0AE0886B8379A10111Df81e260934bC60xaAaC284B20B08D78C3Acce26338F955DD4cA49370xe2b6E5B9322e89FE98eaAB7Ca277Ef2F19fc36470x06fC7204563Efa1F90B3D9db8dB1B7320E45751fEach pitch's bonding curve is deployed at launch; read its address with getPitchCurve(pitchId). The fee escrow that holds claimable curve fees is created by the strategy; read it with feeEscrow().
Uniswap v4 on Robinhood Chain
0x8366a39CC670B4001A1121B8F6A443A643e409510x58daec3116aae6D93017bAAea7749052E8a04fA70xF3334192D15450CdD385c8B70e03f9A6bD9E673b0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F940x8876789976dEcBfCbBbe364623C63652db8C09040x000000000022D473030F116dDEE9F6B43aC78BA3Onchain events
Events are the authoritative source of truth. Index the strategy for the pitch lifecycle, each curve for bonding-curve trades, and the PoolManager's Swap events, filtered by pool ID, for trades after graduation.
0xed3e443fd4584167bf396a48039a8aeeff4bed641fa571678e0fcc470a2d8ef50x3f5de75f46fea09c0695945ee17c3418151c21fa30d9ebd9a0753234f0abbe030xcf7d23a3cbe4e8b36ff82fd1b05b1b17373dc7804b4ebbd6e2356716ef2023720xa761582a460180d55522f9f5fdc076390a1f48a7a62a8afbd45c1bb797948edb0xea7dc5be41326789a621aaa33d671281d0a54aa87610751def19f8544c2004c30x4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0260x12df54c7fbf3dd78b12cde440079c718822f447cb5ff50dc27e31e3a83833c6c0xec36bf571f136799e8dc0b0b8bea4b04d8bd3d43de838aab0d5fc21d4cbfc4550x8113d738abdcb6b38357e9d53a54a7157861a09031b453651f0fe7fe151f59df0x40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112fevent Pitched(uint256 indexed pitchId, address indexed pitcher, uint256 pricePerVote, uint256 votesNeeded) event Validated(uint256 indexed pitchId, address indexed validator, uint256 totalContributors) event Launched(uint256 indexed pitchId, address indexed token, uint256 totalRaised, uint256 buyAmount, uint256 tokensBought) event Graduated(uint256 indexed pitchId, address indexed token, uint256 quoteOut, uint256 tokenOut, uint256 positionId) event CurveBuy(address indexed buyer, address indexed recipient, uint256 quoteIn, uint256 tokensOut, uint256 fee, uint256 tax) event CurveSell(address indexed seller, address indexed recipient, uint256 tokensIn, uint256 quoteOut, uint256 fee, uint256 tax)
The public RPC can time out on wide eth_getLogs ranges, and Robinhood Chain produces about ten blocks a second. Backfill in bounded block chunks, or read logs from the Blockscout explorer API.
Reading pitch state
Every pitch is readable directly from the strategy. These examples use ethers v6.
import { ethers } from "ethers";
const provider = new ethers.JsonRpcProvider("https://rpc.mainnet.chain.robinhood.com", 4663);
const strategy = new ethers.Contract("0x7563086C680aAc0ED75bC5E5589eDfd35E430d11", [
"function pitchCount() view returns (uint256)",
"function getPitch(uint256) view returns (address token, string name, string symbol, uint256 pricePerVote, uint256 votesNeeded, uint256 contributorCount, uint256 tokensBought, bool launched, bool cancelled, uint256 creatorTaxBps, address creatorFeeRecipient)",
"function getPitchMeta(uint256) view returns (string description, string imageUrl, string twitter, string telegram, string website)",
"function getPitchCurve(uint256) view returns (address)",
"function getContributors(uint256) view returns (address[])",
"function pitchCreatedAt(uint256) view returns (uint256)",
], provider);
const count = await strategy.pitchCount();
const p = await strategy.getPitch(count - 1n);
// p.votesNeeded counts validators only; the pitcher is one more contributor.
// p.launched is true once the last spot filled.
Launched tokens are self-describing: each token contract exposes description(), imageUrl(), twitter(), telegram() and website().
Pricing and graduation
While a token is on its curve, read the price and progress from the curve. getReserves() already includes the 1.8 ETH virtual reserve.
const curve = new ethers.Contract(await strategy.getPitchCurve(pitchId), [ "function getReserves() view returns (uint256 quoteReserve, uint256 tokenReserve)", "function realQuoteReserve() view returns (uint256)", "function graduationThreshold() view returns (uint256)", "function graduated() view returns (bool)", ], provider); const [q, t] = await curve.getReserves(); const priceEth = Number(ethers.formatEther(q)) / Number(ethers.formatEther(t)); const marketCapEth = priceEth * 1_000_000_000; // Progress toward graduation, 0 to 1 const progress = Number(await curve.realQuoteReserve()) / Number(await curve.graduationThreshold());
After graduation, read the price from the Uniswap v4 pool. ETH is always currency0 and the token is currency1.
const HOOK = "0x1C1e1Fb0FdA17342dBEc35BbE27AA455458ce0cC";
const poolId = ethers.keccak256(ethers.AbiCoder.defaultAbiCoder().encode(
["address", "address", "uint24", "int24", "address"],
[ethers.ZeroAddress, token, 0, 200, HOOK] // currency0, currency1, fee, tickSpacing, hooks
));
const stateView = new ethers.Contract("0xF3334192D15450CdD385c8B70e03f9A6bD9E673b", [
"function getSlot0(bytes32) view returns (uint160 sqrtPriceX96, int24 tick, uint24 protocolFee, uint24 lpFee)",
], provider);
const [sqrtPriceX96] = await stateView.getSlot0(poolId);
const ratio = Number(sqrtPriceX96) / 2 ** 96;
const priceEth = 1 / (ratio * ratio); // ETH per token
const marketCapEth = priceEth * 1_000_000_000;
Convert to USD with any ETH price source. To read a graduated token's total trading fee, call totalFeeBps(token) on the fee hook: it returns the 1% trading fee plus that pitch's creator tax, in basis points.
Terms
Onchain data is public and free to read. You are responsible for how you use it. PitchPump is provided as is, without warranties of any kind, and the team is not liable for losses arising from its contracts, interfaces, integrations, RPCs or indexers.
- Do not present third-party services as operated by PitchPump.
- Do not use the PitchPump name or marks in a way that misleads users or implies an endorsement.
- Availability of the interface and public infrastructure is not guaranteed.
PitchPump