Everything about Orbit, in one place.
How fair launches on pons work, what each fee is, and how to read Orbit straight from the chain.
Overview
Orbit is a place to launch coins on pons fairly. Someone pitches a coin, supporters take equal seats at the same price, and when the last seat fills the coin launches on pons. The pooled ETH buys the coin and it's split equally, so the pitcher gets exactly what every supporter gets.
Seat money is held by the Orbit contract until the pitch launches or you get a refund. No person, including the Orbit team, can take it out. Every seat, refund and launch is a transaction your wallet asks you to approve.
- No one gets a bigger slice: no team allocation and no early buyers.
- Seats are refundable until the last one fills.
- Names, tickers and pictures can be copied. Always check the coin's contract address.
- Coins can be volatile, illiquid, or lose all value.
Words we use
- Pitcher
- The person who creates the pitch. They hold the first seat and pay the same as everyone.
- Supporter
- Anyone who takes a seat in someone else’s pitch.
- Seat
- One equal spot in a pitch. Everyone pays the same price, and everyone gets the same amount of the coin.
- Seat holders
- The pitcher and all supporters together.
- Creator tax
- A small fee on trades of the coin, up to 3%, set by the pitcher. It goes to the pitcher.
- Launch
- When the last seat fills: the coin is created on pons and shared equally between all seat holders.
How it works
Every Orbit launch follows the same three steps.
- 01
Pitch
The pitcher sets the name, ticker, picture, description, links, one seat price for everyone and how many supporters are needed. Creating the pitch pays for the pitcher's own seat.
- 02
Back
Supporters take seats at the same price, one per wallet. Anyone can leave and get their ETH back until the last seat fills.
- 03
Launch
The last seat launches the coin on pons in the same transaction. The pooled ETH buys the coin and every seat gets an equal share.
After launch, the coin trades on its pons bonding curve. Once enough ETH has flowed in, it graduates to a Uniswap v4 pool with its liquidity locked permanently, following pons' own rules.
Seats and refunds
- One seat per wallet
- Every seat costs the same. The pitcher holds the first seat.
- Leave a seat
- Supporters can leave any time before the pitch fills and get their seat price back. The pitcher can't leave; they cancel instead.
- Cancel
- The pitcher can cancel before it fills. Up to 50 seats are refunded automatically.
- Big pitches
- In a cancelled pitch with more than 50 seats, each supporter collects their own refund with one click on the pitch page or their profile.
- No deadline
- Pitches stay open until they fill or are cancelled.
- Network fees
- Every transaction, including leaving a seat, costs a small Robinhood Chain network fee.
The launch
Taking the last seat does everything in one transaction: the coin is created on pons, the pooled ETH (minus launch fees) buys it, and the coins are shared equally between the pitcher and every supporter. Because it all happens at once, nobody can buy ahead of the seat holders.
- Up to 50 seats
- Coins are sent to every seat holder automatically at launch.
- More than 50 seats
- Each seat holder claims their share with one click on the pitch page or their profile.
- Pot size limit
- A new pons curve can only take so much ETH. Orbit keeps every pot safely below that limit, read live from pons, and tells pitchers how to adjust if a pot is too big.
- Before the last seat
- Orbit checks that pons will accept the launch and that the pot covers the fees. If not, nothing is sent and the pitch stays refundable.
After launch, seats can no longer be refunded. The coin trades on pons and anyone can buy or sell it.
The Orbit contract launches the coin and shares the launch buy equally in the same transaction. Some charts treat whoever launched a coin as the "dev", and the wallets that received coins at launch as dev wallets too. So when seat holders buy or sell, the chart may show "dev bought" or "dev sold". These are supporters who paid the same seat price as everyone, not a team allocation. Orbit has no team allocation.
Creating a pitch
Orbit follows the same rules as creating a coin on pons, so every pitch can launch there without problems.
| Field | Rule |
|---|---|
| Picture | PNG, JPG or WebP. Shown as a square, like on pons; other shapes are cropped to a square from the center. |
| Name | Up to 60 characters. |
| Ticker | Capital letters and numbers, up to 16. |
| Description | Up to 256 characters. |
| X | Handle only, up to 15 characters. |
| Telegram | Public username, up to 32 characters. |
| Website | Optional. Shows on Orbit. |
| Seat price | At least 0.0005 ETH. |
| Supporters | 1 to 500, not counting the pitcher. |
| Creator tax | 0 to 3%. |
The pooled amount must be more than the launch fees and below the pot size limit. The Create pitch page checks all of this and shows a live preview of the coin before anything is sent.
Fees
- Orbit fee
- A flat 0.0005 ETH per launch, taken from the pooled ETH when the coin launches.
- pons launch fee
- pons' own launch fee, read live and shown before anyone pays.
- Creator tax
- Optional, up to 3%, on trades of the coin. Goes to the creator wallet.
- pons trading fee
- pons' normal trading fee on the curve and the pool, set by pons.
Everything left after the launch fees buys the coin. Both launch fees are shown on every pitch page and on the Create pitch form.
Creator tax
The pitcher can set a creator tax of up to 3% when creating a pitch. It's fixed forever once the coin launches, and it's paid on trades to the creator wallet (the pitcher's own wallet unless they choose another).
pons also charges the creator tax on the launch buy itself, so a small part of the pooled ETH (at most 3%) goes to the creator wallet at launch. The Create pitch page shows the exact amount. A future version of the Orbit contract will remove this, so the launch buy is fully equal.
Wallets and profile
Orbit works with MetaMask, Rabby, Coinbase Wallet, phone wallets and many more through WalletConnect. Your wallet needs to be on Robinhood Chain; Orbit offers to switch it for you.
Your profile shows the pitches you created, the seats you hold, the coins you launched together with others, and any refunds or coins waiting to be collected. Anyone's profile can be opened from their address.
Risk disclosures
Coins launched through Orbit are user-created and experimental. Check the pitch, the pitcher and the coin's contract address before taking a seat.
- Prices can move quickly and liquidity can be thin.
- Similar names and pictures can belong to unrelated coins.
- Smart contracts, wallets, RPCs and explorers can fail. The Orbit contract has not been independently audited.
- Orbit depends on pons and Robinhood Chain, which Orbit doesn't control.
Read the full risk notice and terms of use. Nothing here is financial advice.
Read Orbit straight from the chain.
Everything on the site comes from the contract. Index its events or call its view functions directly.
Network
- Network
- Robinhood Chain
- Chain ID
- 4663
- Native asset
- ETH
- Public RPC
https://rpc.mainnet.chain.robinhood.com- Explorer
- robinhoodchain.blockscout.com
- Launches on
- pons v2 (bonding curve, then Uniswap v4)
Contracts
Deployed addresses on Robinhood Chain. Orbit's contracts are immutable; new versions ship at new addresses and will be listed here.
0x969d0e028F9d3a2C43147F0430C9e05c065A323E0x8c494fdc3C60dEEEa1E73e577bAcCA91635189d70x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7eOnchain events
Index these events from the Orbit launch contract to follow every pitch.
| Event | When |
|---|---|
Pitched(uint256 indexed pitchId, address indexed pitcher, uint256 pricePerVote, uint256 votesNeeded) | A pitch is created |
Validated(uint256 indexed pitchId, address indexed validator, uint256 totalContributors) | Someone takes a seat |
Withdrawn(uint256 indexed pitchId, address indexed contributor, uint256 amount) | Someone leaves a seat or collects a refund |
Cancelled(uint256 indexed pitchId, uint256 refundedCount) | The pitcher cancels |
Launched(uint256 indexed pitchId, address indexed token, address indexed curve, uint256 totalRaised, uint256 buyAmount, uint256 tokensBought) | The last seat launches the coin |
Claimed(uint256 indexed pitchId, address indexed contributor, uint256 tokenAmount) | Coins are sent or claimed |
RefundCredited(uint256 indexed pitchId, address indexed contributor, uint256 amount) | A refund couldn't be sent directly and waits in the escrow |
Topic hashes (topic0)
Pitched 0xed3e443fd4584167bf396a48039a8aeeff4bed641fa571678e0fcc470a2d8ef5
Validated 0x3f5de75f46fea09c0695945ee17c3418151c21fa30d9ebd9a0753234f0abbe03
Withdrawn 0xcf7d23a3cbe4e8b36ff82fd1b05b1b17373dc7804b4ebbd6e2356716ef202372
Cancelled 0xa761582a460180d55522f9f5fdc076390a1f48a7a62a8afbd45c1bb797948edb
Launched 0xcb4e4ddff7fd792ecca275f4deba871a6477ac278910f9b967a62cc1910f7034
Claimed 0x4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed026
RefundCredited 0xe1872a97721553a4eba79b8a15644854ed8617ac50609d0893e90f8197a7213d
The public RPC times out on wide eth_getLogs ranges, and Robinhood Chain makes about 10 blocks a second. Backfill in bounded chunks, or use the Blockscout API's getLogs for history.
Reading pitch state
Every pitch can be read directly from the launch contract.
Read a pitch with ethers v6
import { JsonRpcProvider, Contract, formatEther } from "ethers";
const provider = new JsonRpcProvider("https://rpc.mainnet.chain.robinhood.com", 4663);
const orbit = new Contract("0x969d0e028F9d3a2C43147F0430C9e05c065A323E", [
"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 getContributors(uint256) view returns (address[])",
"function getPitchCurve(uint256) view returns (address)"
], provider);
const id = 0;
const p = await orbit.getPitch(id);
const seats = Number(p.votesNeeded) + 1; // the pitcher holds one seat
console.log(p.name, p.symbol, formatEther(p.pricePerVote), "ETH per seat");
console.log(Number(p.contributorCount), "of", seats, "seats taken");
if (p.launched) console.log("Coin:", p.token, "Curve:", await orbit.getPitchCurve(id));
- Seats in a pitch
votesNeeded + 1, because the pitcher holds the first seat.- Pictures
imageUrlis anipfs://link, the same as the coin's logo on pons.- After launch
tokenis the coin's address. Its pons page isponsfamily.com/launchpad/<token>.
Support
Questions, ideas or something not working? Reach Orbit on X at @OrbitpadRH. Orbit will never ask for your private key or recovery phrase, or ask you to send funds to fix a problem.
Terms and attribution
Orbit is an independent project built for pons. It is not operated by, affiliated with, or endorsed by pons. Coins launched through Orbit are created on pons and follow pons' own rules, fees and contracts.
Onchain data is public and free to read. Orbit is provided as is, without warranties. See the terms of use and risk notice.