Documentation
How Penny Stonks works
Coins launched here are real tokens on Robinhood Chain, created through the pons launchpad and signed by your own wallet. This page describes exactly what happens when you launch, how the pool's trading fee is split, and — just as importantly — the things this site cannot do.
Every figure below is read from the code that enforces it. Where something is measured, unbuilt, or impossible, it says so.
What this is
A pair is a coin plus the cheap ticker it is named after. The coin has its own fixed supply and its own trading pool. The ticker is a reference printed next to it — a thesis that stays legible instead of being buried in a group chat.
The pairing does one concrete thing: it names the coin. It does not give holders any ownership of, claim on, or exposure to the underlying company, and it does not tie the coin's price to the stock's.
A coin is not a share
Holding a coin named after a ticker gives you nothing from that company. The companies are unaffiliated and have not endorsed anything here. The coins are memecoins and should be treated as such.
Custody and signing
Your funds are never signable by this server. Every transaction that spends your wallet — creating a coin, buying, selling — is built unsigned and returned to your browser. Your wallet signs it and submits it. Nothing here can move your balance, and no page will ever ask you for a seed phrase or private key. — app/api/launch/prepare
This site holds no key that can spend your tokens
There is no server-side signer in this app. Trading a launched coin happens entirely in your own wallet against the token's pool — the site links you to it, it does not route the swap for you. The 30% protocol share of the pool fee is collected by the pons launchpad's own contracts on chain, not by anything this deployment signs.
Launch inputs are re-checked on the server
The launch form caps what you can enter, but a request can be sent directly, so the prepare endpoint re-validates every field and enforces its own ceiling of 1 ETH on the launch-block buy. Client-side validation is a convenience for you, not a trust boundary for us.
Launching a coin
A launch is a single transaction to the pons factory. The fee split is fixed by the factory at creation time, so there is no separate “route the fees” step to decline — a launched coin is always on the 70/30 split.
Metadata is uploaded and an unsigned launch transaction is built
Your name, ticker, description and image go to IPFS, and a pending row is recorded. Every field is re-validated here regardless of what the form allowed. The transaction carries the fixed 0.0005 ETH factory fee plus any launch-block buy. — app/api/launch/prepare
Your wallet signs and submits it
Signed and submitted by your wallet alone. Broadcast is not confirmation, so the app polls until the chain confirms it — a coin is not treated as live on the strength of a submitted transaction, and its contract address is read from the confirmed receipt.
Confirmation is read from the chain, not assumed
If the transaction is declined or dropped before it lands, no coin is created and the pending row is never promoted to a real launch. A coin only appears on the board once its creation is confirmed on chain, so the board never lists a launch that did not actually happen.
Fee routing
Every swap on a launched coin's pool pays a 1% trading fee. On the pons active factory that fee is split 70/30 — 70% to the launch's designated fee wallet and 30% to the pons protocol. The split is fixed by the factory at launch and is not something this site can change afterwards. — lib/evm/pons.ts
Each coin's trading pool is a real on-chain contract you can read yourself. It is derived from the token, not from anything we host, so the address the token page shows can be checked against the token's own getter.
// A plain JSON-RPC call — no library, no key.
const RPC = "https://rpc.mainnet.chain.robinhood.com"
const token = "0x39dBED3a2bd333467115dE45665cC57F813C4571"
// liquidityPool() selector 0x cc.. — read the token's own pool address.
const res = await fetch(RPC, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0", id: 1, method: "eth_call",
params: [{ to: token, data: "0x9d63848a" /* liquidityPool() */ }, "latest"],
}),
})
const { result } = await res.json()
console.log("0x" + result.slice(26)) // last 20 bytes = the address
// => 0x10cc6bd38112cac182db90b6a71d8bb5939526ba
// Matches the pool the token page links to. Nothing we host is involved.The fee wallet defaults to the launcher
Unless a launch explicitly redirects it, the 70% creator share accrues to the wallet that created the coin. This site does not take a cut of that share for itself — the only protocol cut is the 30% collected by pons' own contracts.
Trading
Buys and sells execute against the coin's pool on Robinhood Chain and spend real ETH. Trading happens in your own wallet — the site links you to the token on the chain explorer and on DexScreener rather than routing the swap itself, so your wallet shows the exact cost before you approve anything.
A coin whose pool is not yet indexed shows an explicit “no pool indexed yet” state rather than a chart that looks ready. Balances are never guessed: a price is shown only where DexScreener reports one, and left blank otherwise.
Prices and charts
Prices come from DexScreener where a pool exists for the coin, and are left blank where none does. A blank price is deliberate — an invented one is worse than none.
DexScreener's API publishes no candle or time-series data of any kind, so the candlestick chart on a coin's page is DexScreener's own embedded widget rather than something drawn from their API. If that widget fails to load in your browser, the link beside it opens the same pair directly; the link is always present, never a fallback.
curl -s "https://api.dexscreener.com/latest/dex/tokens/0x39dBED3a2bd333467115dE45665cC57F813C4571" \
| node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{
const p = JSON.parse(s).pairs?.[0]
if (!p) return console.log("no pair indexed yet")
console.log("candles:", Object.keys(p).filter(k => /ohlc|candle|series|bars/i.test(k)))
})'
# => candles: []
#
# Spot price and percentage buckets only. There is no time series to plot, which
# is why the chart is DexScreener's own widget rather than one we draw.This is also why you will not find a hand-drawn price line here that claims to be live. A curve smoothed over two data points would look far more convincing than the data behind it, which is the reason it is not drawn.
Where several pools exist for the same token, the printed price comes from the deepest one rather than whichever the API happens to return first. No pool-depth figure is shown alongside it, so treat every price here as a spot reading from the named pair rather than a quote you could fill at size.
What is stored
One row per launch: the token's contract address, the creating wallet, the name, ticker, description and metadata URI, the paired ticker, any project links you supplied, the launch transaction hash, and timestamps. No accounts, no passwords, no email.
The paired ticker is snapshotted at launch, so a later change to our catalogue can never silently re-point an existing coin at a different security.
A launch row is provenance, not authority. The token's pool and its trading activity are read from the chain on every page load, because our columns can only answer “did we record this launch” — not “is the pool live now”.
Coin artwork is proxied
Images are served through this site rather than linked from an IPFS gateway directly, so your browser never contacts a gateway chosen by the coin's launcher.
Verify it yourself
Everything above is a claim made by the people who built the thing. The parts that matter are independently checkable, so here is how to check them — the answers come from Robinhood Chain and from DexScreener, not from us.
You need no account, no API key and no wallet. The examples use the chain's public RPC and a real launched token (0x39dB…), and every // => comment is output that was actually returned.
curl -s -X POST "https://rpc.mainnet.chain.robinhood.com" \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
# => {"jsonrpc":"2.0","id":1,"result":"0x1237"}
# 0x1237 = 4663. Robinhood Chain. Gas is paid in ETH.- Which network is this, really?
- Jump to the snippet in verify it yourself
- Is a coin's pool really derived from the token on chain?
- Jump to the snippet in fee routing
- Is launching really refused by the server, not just the button?
- Jump to the snippet in launching a coin
- Is there really no candle data?
- Jump to the snippet in prices and charts
The one check worth doing before you spend anything
Confirm the contract address on the coin's page matches the coin you meant to trade. Ticker symbols are not unique and cost nothing to reuse; the contract address is the only identifier that is.
If any snippet here disagrees with what this page says, the snippet is right. — lib/docs.ts DOC_SNIPPETS
Risks
A ticker symbol is not a unique identifier
Anyone can launch a coin using any symbol, and several coins here already share one. The contract address is the only identifier that means anything. Check it against the coin you intended to trade before spending.
- Memecoins are extremely high risk. Most go to zero. Only spend what you are prepared to lose entirely.
- A coin gives you no ownership of, or claim on, the security it is named after, and its price is not tied to the stock's.
- The 1% pool fee and its 70/30 split are fixed by the launchpad, not by this site, and apply to every swap.
- Trading happens in your own wallet against a third-party pool. This site does not execute, guarantee, or reverse any trade.
- Nothing on this site is financial advice.
Penny Stonks has exactly one official token, $PSTONKP, at FqcbxumtSdMBCkQJ5mT3fLmpFsGkXeDYwvWyAVNqpump. Any other coin claiming to be ours is not — check the address, not the name or the symbol.
Still have a question about a specific coin? Its own page shows the live on-chain routing status, the real contract address, and what the treasury can do for that pairing.
