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.

Key facts
  • 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.

  1. 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.

  2. 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.

  3. 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.

Why charts may show seat holders as "dev"

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.

FieldRule
PicturePNG, JPG or WebP. Shown as a square, like on pons; other shapes are cropped to a square from the center.
NameUp to 60 characters.
TickerCapital letters and numbers, up to 16.
DescriptionUp to 256 characters.
XHandle only, up to 15 characters.
TelegramPublic username, up to 32 characters.
WebsiteOptional. Shows on Orbit.
Seat priceAt least 0.0005 ETH.
Supporters1 to 500, not counting the pitcher.
Creator tax0 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).

Good to know

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.

Developers

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.

Orbit launch contractPitchLaunchStrategyPons
0x969d0e028F9d3a2C43147F0430C9e05c065A323E
Orbit refund escrowholds refunds a wallet couldn't receive
0x8c494fdc3C60dEEEa1E73e577bAcCA91635189d7
pons v2 launch factoryused for every launch
0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e

Onchain events

Index these events from the Orbit launch contract to follow every pitch.

EventWhen
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
imageUrl is an ipfs:// link, the same as the coin's logo on pons.
After launch
token is the coin's address. Its pons page is ponsfamily.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.