Normal view

There are new articles available, click to refresh the page.
Before yesterdayMain stream

StonkFun API: Track Stock-Paired Solana Launches in Real Time

7 September 2026 at 09:32

How StonkFun works on Raydium LaunchLab, what its first day of data shows, and how to stream it with the Bitquery API.

StonkFun is a Solana launchpad where a new coin is paired with a tokenized stock, a pre-IPO token, a crypto asset or SOL instead of the usual SOL or USDC pair. Over the weekend of 5 and 6 September 2026 it moved new launches onto Raydium LaunchLab, and by Sunday its bonding curves were clearing more than half a million trades a day. The numbers below were pulled on Monday 7 September, and every query is one you can run yourself.

What is StonkFun?

StonkFun (stonkfun.xyz) lets anyone launch a coin and choose what it trades against. The menu includes xStocks, the tokenized stocks issued by Backed Finance such as SPYx (S&P 500), NVDAx and QQQx; PreStocks, which are pre-IPO exposure tokens such as OPENAI and ANTHROPIC; crypto assets such as ZEC, WBTC, HYPE, TAO and even xSOL, which I compared with looping jitoSOL in May; and plain SOL.

A coin called “SPDR” paired with SPYx is priced in units of an S&P 500 token, so its chart moves with both the meme and the index. Tokenized stocks are no longer a launchpad curiosity either. In July I reviewed Arcus, the dYdX team’s 24/7 stock-token exchange.

The platform token is STONK. StonkFun sends trading fees into a program it calls Burn & Earn, which buys STONK and the platform’s largest coins and burns them. STONK’s own pool is a Raydium CLMM pool against SPYx, but most of its volume this week went through SOL pools on Orca and Meteora.

For anyone who works with on-chain data, StonkFun is awkward in two ways. The quote assets are unusual, so trackers built around SOL and USDC pairs tend to skip them. And since this weekend there are two launch paths running side by side, which means watching three Raydium programs to see everything.

How a StonkFun launch works on-chain

The bonding-curve path (Raydium LaunchLab)

Every new StonkFun launch is one initialize_with_token_2022 instruction on the Raydium LaunchLab program LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj. StonkFun registered two platform configs with LaunchLab, and both carry the name "StonkFun" in their on-chain data. Reward launches go through 6BwHHDg3u1854jC8PDLXvR4spTcLNaoBxLJNGC4nTESt and mint the coin as a Token-2022 token with a 1% or 3% transfer fee on every transfer, which feeds StonkFun's reward payouts. Standard launches go through 4E876qZTE9FJMrBzgVtBrSrzz2TLivB5Y5QXPjB4gZL7 with no transfer fee. Everything else is the same on both.

Each launch mints 1,000,000,000 tokens with 6 decimals and sells 793,100,000 of them (79.31%) on a constant-product curve. Every curve trade pays a 1% fee in the quote asset. Raydium’s 0.25% protocol share for RAY buybacks comes out of that 1% rather than on top of it, and the rest goes to StonkFun’s fee wallet 5CEbueQnq1Ym2uSSx2xXds3jQAqT1BDnkA59RZobSPAG. Creators get nothing from curve trades.

The graduation target lives in the launch arguments as total_quote_fund_raising. StonkFun sets it in the quote asset at launch time from a fixed dollar figure, so a SOL launch targets 85 SOL, a WBTC launch about 0.112 WBTC and a SPYx launch about 11.5 SPYx. Each of those was worth roughly $8,500 to $10,000 on 7 September. Because the conversion happens per launch, two SPYx coins launched an hour apart will show slightly different targets. Do not hard-code the number.

When the curve fills, LaunchLab runs migrate_to_cpswap. The remaining 206,900,000 tokens and the raised quote asset seed a Raydium CPMM pool on the 0.25% fee tier, and the entire LP position is locked to the platform. Raydium's docs describe a burn or a creator share as options. StonkFun chose neither, which is how it keeps earning fees from graduated pools and, according to the platform, feeds them back into buybacks. StonkFun also says deployment now costs 0.03 SOL, down from 0.29 SOL on the old path, and that the bonding curve reduces sniper risk. What sniping is and how launchpads fight it is covered in my earlier piece on token sniping.

The direct-pool path (Raydium CLMM)

Before September, every StonkFun launch minted the token and opened a one-sided Raydium CLMM pool in a single transaction signed by the launcher wallet, with no curve and no migration. That path has not gone away. In the first twelve hours of 7 September the launcher wallet opened ten CLMM pools while LaunchLab handled 1,113 launches. The signal for it is a create_customizable_pool instruction on the CLMM program CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK, signed by the launcher wallet.

So a complete StonkFun tracker follows three programs: LaunchLab for curves, CPMM for graduated coins and CLMM for direct launches and for STONK itself. If you have read my guides to the pump.fun API, the Pons launchpad on Robinhood Chain or Four.meme on BNB Chain, the shape will look familiar. One instruction stream for launches, one for graduations, and the Trading API for prices.

StonkFun by the numbers (7 September 2026)

All figures below come from Bitquery queries run on 7 September 2026 around 12:30 UTC, so treat them as a snapshot of the first full day after the LaunchLab move.

Between 00:25 and 12:12 UTC, the two StonkFun platform configs produced 1,113 LaunchLab launches, about 94 an hour. Roughly 70% were reward launches with a transfer fee and 30% were standard launches.

Creators used 98 different quote mints in those twelve hours. xStocks took 42% of launches, crypto assets and other tokens 41%, SOL 10.5% and PreStocks 6.6%. The single most popular non-SOL quote was ZEC with 98 launches, followed by SPYx (70), NVDAx (41), SPCXx (40), MCDx (40), QQQx (36), WBTC (32) and OPENAI (30).

StonkFun launches by quote asset in the first twelve hours of 7 September 2026. Source: Bitquery Solana Instructions API.

What surprised me was how few curves graduate, and how fast the ones that do get there. In the same twelve hours only 29 curves graduated, about 2.6% of launches. For the 21 graduations whose launch fell inside the sample, the median time from launch to graduation was 19.5 minutes. The fastest took 24 seconds. The slowest took 3.2 hours.

In the 24 hours to 12:25 UTC, pools quoted in xStocks on the three Raydium programs turned over $29 million: $11.6 million on 479 CLMM pools, $8.8 million on 1,984 LaunchLab curves and $8.6 million on 54 graduated CPMM pools. Across LaunchLab and CPMM, the quote assets with the most volume were TAO ($10.2 million), ZEC ($9.4 million), wXRP ($8.4 million), OPENAI ($5.0 million) and STONK itself ($3.8 million).

24-hour volume in xStocks-quoted Raydium pools by protocol. Source: Bitquery Trading API.

LaunchLab curves quoted in anything other than SOL, USDC or RAY handled 43,000 trades on 5 September, then 576,000 trades and $17.2 million on 6 September, then 222,000 trades and $6.2 million in the first half of 7 September. Almost all of that is StonkFun, since before 5 September LaunchLab curves quoted in other assets did fewer than 5,000 trades a day.

STONK closed the 7-day window at $0.097, up from $0.021 a week earlier, with a 24-hour range of $0.095 to $0.214 and $98 million of 24-hour volume across all its pools. Supply stands at 874.4 million after burns, down from the original 1 billion. Burn & Earn burned STONK 145 times in the last 24 hours, 1.36 million tokens in total, plus one-off burns of 24 other tokens.

STONK hourly close, all pools combined. Source: Bitquery Trading.Tokens.

How to get StonkFun data with the Bitquery API

Bitquery indexes Solana instructions, pool states and trades, and exposes them over GraphQL and WebSocket. The same query runs as a one-off query or as a subscription that pushes every new row. For StonkFun you need four streams: launches, curve progress, graduations and trades. Below are the versions I ran on 7 September. The full set, including candles, holders, liquidity, buyback tracking and historical queries, is on the StonkFun API docs page.

You can paste any of these into the Bitquery IDE without a key. Outside the IDE you need an OAuth token in the Authorization header.

1. Stream new StonkFun launches

Filter LaunchLab initialize instructions by the two platform configs. AccountNames labels every account, so you do not have to remember positions, and Arguments gives you the decoded mint name, symbol, curve target and transfer fee setting.

subscription StonkFunLaunchLabLaunches {
Solana {
Instructions(
where: {
Instruction: {
Program: {
Address: { is: "LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj" }
Method: { in: ["initialize_v2", "initialize_with_token_2022"] }
}
Accounts: {
includes: {
Address: {
in: [
"6BwHHDg3u1854jC8PDLXvR4spTcLNaoBxLJNGC4nTESt"
"4E876qZTE9FJMrBzgVtBrSrzz2TLivB5Y5QXPjB4gZL7"
]
}
}
}
}
Transaction: { Result: { Success: true } }
}
) {
Block { Time }
Transaction { Signature Signer }
Instruction {
Program {
Method
AccountNames
Arguments {
Name
Value {
... on Solana_ABI_Json_Value_Arg { json }
... on Solana_ABI_String_Value_Arg { string }
... on Solana_ABI_Integer_Value_Arg { integer }
}
}
}
Accounts { Address Token { Mint ProgramId } }
}
}
}
}

In each message, account index 5 is the bonding-curve pool, index 6 is the new token and index 7 is the quote asset. The curve_param argument holds total_quote_fund_raising, the graduation target for that launch. During my 45-second test this stream delivered four launches.

2. Stream trades with USD prices across all three programs

The Trading API returns one clean row per swap with the USD price, market cap and trader on it, and it attributes Jupiter router hops to the pool they hit. Filter by the three Raydium programs and by quote token. Market.Protocol tells you the stage of the coin: raydium_launchpad on the curve, raydium_cp_swap after graduation, amm_v3 for a direct-pool launch.

subscription StonkFunTradesSPYx {
Trading {
Trades(
where: {
Pair: {
Market: {
Network: { is: "Solana" }
Program: {
in: [
"LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"
"CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"
"CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"
]
}
}
QuoteToken: { Address: { is: "XsoCS1TfEyfFhfvj8EtZ528L3CaKBDBRqRapnBbDF2W" } }
}
}
) {
Block { Time }
Side
PriceInUsd
AmountsInUsd { Base Quote }
Supply { MarketCap }
Trader { Address }
Pair {
Token { Symbol Address }
QuoteToken { Symbol }
Market { Address Protocol }
}
}
}
}

Swap the quote address for NVDAx, OPENAI, ZEC or STONK to follow another segment, or drop the quote filter and keep the program filter to watch everything. In a 30-second test this stream delivered 13 SPYx-quoted trades.

3. Stream graduations

A graduation is a migrate_to_cpswap instruction that references a StonkFun platform config. Account index 5 is the new CPMM pool and index 17 is the curve that just closed, so one message gives you the mapping from the old market to the new one.

subscription StonkFunGraduations {
Solana {
Instructions(
where: {
Instruction: {
Program: {
Address: { is: "LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj" }
Method: { is: "migrate_to_cpswap" }
}
Accounts: {
includes: {
Address: {
in: [
"6BwHHDg3u1854jC8PDLXvR4spTcLNaoBxLJNGC4nTESt"
"4E876qZTE9FJMrBzgVtBrSrzz2TLivB5Y5QXPjB4gZL7"
]
}
}
}
}
Transaction: { Result: { Success: true } }
}
) {
Block { Time }
Transaction { Signature }
Instruction {
Program { AccountNames }
Accounts { Address Token { Mint } }
}
}
}
}

4. Bonding-curve progress without knowing the quote asset

Every StonkFun curve sells 793,100,000 of 1,000,000,000 tokens, so progress can be read from the base reserve alone. Subscribe to DEXPools for the curve pool and apply:

progress % = 100 - ((Base.PostAmount - 206,900,000) * 100 / 793,100,000)

A SPYx-quoted curve I checked at 12:06 UTC held 913.8 million tokens, which puts it at 10.9% of the way to graduation. If you prefer the quote side, divide Quote.PostAmount by the launch's total_quote_fund_raising after adjusting for decimals.

5. Historical data

The Trading API keeps about 30 days of history with candles at intervals from one second to one hour, which covers the whole LaunchLab era so far. For anything older, the DEXTradeByTokens cube on the combined dataset gives daily volume and hourly OHLC per pool. Always filter by pool address there; a token-level sum double counts aggregator hops and pools where the coin is the quote side.

What you can build with it

The obvious one is a launch feed. Stream 1 plus a filter on curve_param gives you every new coin by quote asset, with the transfer fee setting attached, so you can skip or flag reward tokens before anyone trades them.

Join stream 1 and stream 3 on the pool address and you have a graduation tracker that measures time to graduate per quote asset. That is where the 19.5-minute median above came from. Group stream 2 by QuoteToken instead and you get a stock pair dashboard showing which stocks and pre-IPO tokens attract volume hour by hour.

Buybacks are one more subscription. TokenSupplyUpdates filtered on the launcher wallet as signer shows every Burn & Earn burn as it happens, across all the coins the program buys.

If you run trading bots, the interesting part is what is visible before the first trade. The transfer fee flag, the curve target and the locked LP graduation are all in the launch instruction, and that is the moment a bot should decide whether to touch a coin. They are the same kind of checks I wired into a 24/7 Solana memecoin sniper built with Claude Code.

Caveats

Most StonkFun coins are meme tokens with a few thousand dollars of liquidity, and 97% of the curves in my sample had not graduated. Reward tokens carry a 1% or 3% transfer fee on every move, which changes what “price” means for a holder. xStocks and PreStocks give exposure to a stock or a private company without shareholder rights, and their on-chain liquidity is thinner than the underlying market. Nothing here is investment advice, and I do not hold STONK or any StonkFun coin.

The data side has its own limits. Bitquery’s Solana Instructions cube is real-time only with a short history window, so launch counts for past weeks have to be reconstructed from the first trade of each pool. The Trading API's total supply for STONK lagged the on-chain figure on the day I checked, so I took supply from the token mint directly.

Disclosure: I work at Bitquery, which provides the API used in this post. The queries are free to run in the IDE, and the docs page linked above has the full set.

Sources: The Block, “STONK surges 250% as stock-paired Solana launchpad StonkFun pulls volume to Raydium and Jupiter” (6 September 2026); crypto.news, “Raydium LaunchLab adds support for any token pair on Solana” (7 September 2026); Raydium LaunchLab documentation; on-chain platform config and pool accounts read through a public Solana RPC; Bitquery API queries listed above.


StonkFun API: Track Stock-Paired Solana Launches in Real Time was originally published in Coinmonks on Medium, where people are continuing the conversation by highlighting and responding to this story.

Building an AI Crypto Trading Bot on Hyperliquid

5 September 2026 at 11:35

Claude decides, the Hyperliquid SDK executes, an indexed feed supplies the market. Plus the three ways the data will quietly lie to your agent, all of which I hit.

An agent that trades your own account is easy. Fifty lines, one SDK, done.

An agent that trades your account based on what the rest of the market is doing is a different build, and on most exchanges it is impossible, because the exchange never tells you what the rest of the market is doing at the grain you would need.

Hyperliquid is the exception, and it is the reason to build this here rather than on Binance or on any of the perp venues competing with it. The order book runs on its own L1. Every placement, cancel, modify and fill is a signed action sitting in a block, with the wallet attached. Your agent can see who is quoting, who just got liquidated, and how much of the book is real, because all of it is on chain.

Getting at it takes more work than a websocket subscribe message. Here is the whole build.

Upfront: I work on developer content at Bitquery, and Bitquery sells the indexed Hyperliquid feed used for the read path below. The write path is Hyperliquid’s own free SDK, and I will be specific about where the free native API is the better choice.

The architecture: three paths, three tools

The instinct is to use one API for everything. That is the first mistake, because reading the market and writing to your account are different problems with different best answers.

PathWhat it doesWhat serves it bestWritePlace, cancel and modify your own ordersHyperliquid’s native SDK. Closest to the matching engine, free, canonical.Read (own account)Your positions, fills, marginHyperliquid’s native Info API. Same reason.Read (the market)Who else is positioned, quoting, blowing upAn indexed feed. The native API cannot serve this.DecideTurn the above into an order or a decision to sit stillClaude, with the other three wired in as tools

That third row is the one people get wrong, so it is worth being precise about why.

Hyperliquid’s public websocket gives you l2Book, which is size totalled per price level, up to 20 levels a side. Forty BTC rests at $95,000 and the feed cannot tell you whether that is one order or twenty, whose it is, or whether it got pulled rather than filled. Order-level detail does exist in the native API through orderUpdates and userFills, but only for your own account. Liquidations are the same story: userEvents reports them for one address you already know about, and there is no exchange-wide liquidation feed at all.

So if your agent’s job is “react to what other people are doing”, the native API cannot feed it. You need someone to have indexed the chain. That is the read path below.

The write path

Start here. It is the part that can lose money, and the part to get familiar with first.

The write path is the hyperliquid-python-sdk, Hyperliquid’s own client.

pip install hyperliquid-python-sdk anthropic eth-account requests
import os, time
from eth_account import Account
from hyperliquid.exchange import Exchange
from hyperliquid.info import Info
from hyperliquid.utils import constants
from hyperliquid.utils.types import Cloid
BASE_URL = constants.TESTNET_API_URL   # change this last, and deliberately
wallet = Account.from_key(os.environ["HL_SECRET_KEY"])
address = os.environ["HL_ACCOUNT_ADDRESS"]
exchange = Exchange(wallet, BASE_URL, account_address=address)
info = Info(BASE_URL, skip_ws=True)

The order call is positional and easy to get backwards, so here it is spelled out:

# exchange.order(name, is_buy, sz, limit_px, order_type, reduce_only=False, cloid=None)
result = exchange.order(
"ETH", True, 0.2, 1100.0,
{"limit": {"tif": "Alo"}},
cloid=Cloid.from_int(1734029481),
)

Three things in that call matter more than they look.

{"limit": {"tif": "Alo"}} is post-only. The order is rejected outright if it would cross the spread and take liquidity. For an agent this is the safest default you have, because the worst case of a mispriced quote becomes a rejection instead of a fill at a price you did not intend. Use Gtc when you actually want to rest and cross, Ioc when you want fill-or-kill behaviour.

cloid is your idempotency key, and it is what stops a retry after a network timeout from double-submitting. Derive it from the decision itself:

import hashlib
from hyperliquid.utils.types import Cloid
def decision_cloid(*parts) -> Cloid:
"""Stable 16-byte client order id derived from the decision."""
key = "|".join(str(p) for p in parts).encode()
return Cloid.from_str("0x" + hashlib.sha256(key).hexdigest()[:32])

Do not reach for Python’s built-in hash() for this, which is the mistake I made first. It is salted per process, so the same decision hashes to a different id after every restart, which is the one property an idempotency key cannot have. An agent loop without a stable cloid will place the same order twice sooner or later, and you will find out during a fast market.

And reduce_only=True is worth wiring into any tool whose job is to close rather than open. It is a cheap way to stop "flatten the position" from opening a new one the other way.

Cancels come in both flavours, which is why the cloid pays off:

exchange.cancel("ETH", oid)                 # by exchange order id
exchange.cancel_by_cloid("ETH", cloid) # by your own id

The read path

The read tools hit an indexed copy of the chain over GraphQL. The technique is the same one I used to track bonding curves and graduations on Pump.fun, just pointed at a different chain. The useful property is that the same document works as a query and as a live stream: change query to subscription, drop limit and orderBy, point it at the websocket endpoint, and it pushes.

Here is the whole exchange’s fill flow (Trades cube reference), which is the feed you would run in a separate process to keep a market picture warm:

subscription {
Hyperliquid {
Trades {
Block { Time }
Trade {
Market { Symbol CoinRaw Kind }
Execution { Price Size Side Direction IsAggressor Oid }
Fees { Fee FeeToken }
Position { Leverage IsCross SizeBefore }
Trader { Address }
}
}
}
}

No coin filter, so one subscription carries every market. A message looks like this:

{
"Block": { "Time": "2026-09-04T11:19:51.137023Z" },
"Trade": {
"Market": { "Symbol": "ASTER", "CoinRaw": "ASTER", "Kind": "perp" },
"Execution": {
"Price": "0.75677", "Size": "175.0", "Side": "Sell",
"Direction": "Open Short", "IsAggressor": true, "Oid": "535941127746"
},
"Fees": { "Fee": "0.01907", "FeeToken": "USDC" },
"Position": { "Leverage": 5, "IsCross": true, "SizeBefore": "-175858.0" },
"Trader": { "Address": "0xa33a4a057334c7811ad5f45f3c4f0dfa3d081ff8" }
}
}

Two fields there are worth handing to a model. Direction arrives resolved to Open Short, so the agent is not inferring intent from side plus position state. SizeBefore says the wallet was already short 175,858 ASTER before this fill, which is the difference between "someone sold" and "a large short added". A negative Fees.Fee is a maker rebate, which is a cheap way to separate passive flow from aggressive.

For book data the cube to know about is BookUpdates, which is market-by-order rather than aggregated. One message is one order, carrying its Oid and the Trader.Address that placed it. Oid joins across the schema: the same id appears on Orders as the lifecycle and on Trade.Execution.Oid when it fills, so a single order can be followed end to end. Filter it to one address and you are watching a specific market maker quote and pull in real time (worked examples), which is not something a centralised venue will sell you at any price.

Wiring the tools

Claude gets read tools that hit the feed and exactly one write tool that touches the exchange.

import requests
from anthropic import Anthropic, beta_tool
client = Anthropic()
BQ_URL = "https://streaming.bitquery.io/graphql"
BQ_AUTH = {"Authorization": f"Bearer {os.environ['BITQUERY_TOKEN']}"}
ALLOWED_MARKETS = {"BTC", "ETH"}
def bq(query: str, variables: dict) -> dict:
r = requests.post(BQ_URL, headers=BQ_AUTH,
json={"query": query, "variables": variables}, timeout=30)
r.raise_for_status()
payload = r.json()
if "errors" in payload:
raise RuntimeError(payload["errors"][0]["message"])
return payload["data"]["Hyperliquid"]

The liquidation read tool:

@beta_tool
def recent_liquidations(symbol: str, minutes: int = 60) -> str:
"""Count Hyperliquid liquidations on one market over a recent window.
    Returns distinct liquidation events, the wallets hit, and the raw fill
count. Prefer the liquidation count over the fill count.
    Args:
symbol: Market symbol. Must be BTC or ETH.
minutes: Lookback in minutes, 1 to 60.
"""
if symbol not in ALLOWED_MARKETS:
return f"refused: {symbol} is not in the allowlist"
minutes = max(1, min(int(minutes), 60))
    query = """
query ($sym: String!, $mins: Int!) {
Hyperliquid {
PerpLiquidations(where: {
Liquidation: {Market: {Symbol: {is: $sym}}}
Block: {Time: {since_relative: {minutes_ago: $mins}}}
}) {
fills: count
liquidations: count(distinct: Liquidation_Execution_Hash)
wallets: count(distinct: Liquidation_LiquidatedUser)
}
}
}
"""
rows = bq(query, {"sym": symbol, "mins": minutes})["PerpLiquidations"]
if not rows:
return f"{symbol}: 0 liquidations in the last {minutes}m"
r = rows[0]
return (f"{symbol}: {r['liquidations']} liquidations hitting "
f"{r['wallets']} wallets in the last {minutes}m "
f"({r['fills']} individual fills)")

Note the return value is a sentence, not a JSON dump. Tool results are input tokens on every subsequent turn of the loop, and a compact string the model reads correctly beats a nested object it has to parse and might misread.

The write tool is where the care goes:

MAX_NOTIONAL_USD = 250.0
@beta_tool
def place_post_only_order(symbol: str, is_buy: bool, size: float,
limit_price: float, reason: str) -> str:
"""Place one post-only limit order on Hyperliquid.
    Post-only means the exchange rejects the order outright if it would
cross the spread. Rejection is normal and expected, not an error.
    Args:
symbol: Market symbol. Must be BTC or ETH.
is_buy: True to bid, False to offer.
size: Contracts. Notional is capped server-side by this tool.
limit_price: Limit price in USD.
reason: One sentence on why, recorded in the audit log.
"""
if symbol not in ALLOWED_MARKETS:
return f"refused: {symbol} is not in the allowlist"
notional = size * limit_price
if notional > MAX_NOTIONAL_USD:
return (f"refused: ${notional:,.0f} notional exceeds "
f"the ${MAX_NOTIONAL_USD:,.0f} cap")
    cloid = decision_cloid(symbol, is_buy, round(limit_price, 2),
int(time.time() // 60))
audit.write(symbol, is_buy, size, limit_price, reason, str(cloid))
    result = exchange.order(symbol, is_buy, size, limit_price,
{"limit": {"tif": "Alo"}}, cloid=cloid)
if result.get("status") != "ok":
return f"exchange rejected the request: {result}"
    status = result["response"]["data"]["statuses"][0]
if "resting" in status:
return f"resting on the book, oid {status['resting']['oid']}"
if "filled" in status:
return f"filled immediately: {status['filled']}"
return f"not resting, no fill: {status}"

Two decisions in there carry the weight.

The allowlist and the notional cap are Python, not prompt text. A model asked politely to stay under a cap will stay under it nearly every time, and nearly every time is not a risk control. Anything you would be unhappy to see violated once belongs in an if that runs before the order does.

And the tool reports back which of three things happened: resting, filled, or neither. That distinction is not cosmetic, for a reason the next section gets to.

The reason argument is doing quiet work too. Requiring the model to state why, in the same call that places the order, gives you an audit log that explains itself six weeks later, and it costs one extra field.

The loop

You do not have to write the agent loop. The SDK’s tool runner drives the call, execute and continue cycle:

DESK_RULES = """You watch two Hyperliquid perp markets and quote passively.
Doing nothing is a valid and common answer, and most runs should end that way.
Never chase price. Place at most one order per run.
A post-only rejection means your price crossed the spread. Do not resubmit it
at a crossing price; either move the price passive or stand down.
Liquidation counts are events, not fills. Do not treat a fill count as activity."""
runner = client.beta.messages.tool_runner(
model="claude-opus-5",
max_tokens=16000,
thinking={"type": "adaptive"},
output_config={"effort": "high"},
system=[{
"type": "text",
"text": DESK_RULES,
"cache_control": {"type": "ephemeral"},
}],
tools=[recent_liquidations, open_position, place_post_only_order],
messages=[{"role": "user", "content":
"Check BTC. If liquidations are elevated versus a normal hour, consider "
"quoting passively on the side that just got run over. Otherwise do nothing."
}],
)
for message in runner:
log(message)

thinking={"type": "adaptive"} lets the model decide how much reasoning a given run deserves, which matters when most runs should end in "nothing to do here". The cache_control block matters because the rules and tool schemas get resent every turn, and cached reads bill at roughly a tenth of the input rate.

Rough cost. Claude Opus 5 is $5 per million input tokens and $25 per million output. A run that reads about 2,000 input tokens and writes about 1,500 comes to roughly five cents. On a five-minute cadence that is 288 runs a day and roughly thirteen dollars, before caching brings the input side down. That number is worth computing for your own cadence before you leave anything running, because the cost of an agent that thinks every minute is not obvious until the invoice arrives.

Three ways the data will lie to your agent

Every one of these cost me a wrong number before I caught it, and each one produces a plausible wrong answer rather than an error, which is the dangerous kind.

It thinks one liquidation is sixteen

Counting rows on the liquidation feed overstates activity, badly. In one recent hour:

fills:        127
liquidations: 33
wallets: 33
markets: 11

A single XPL position unwind produced 16 rows, all in one block, all sharing one execution hash:

11:27:28.537  Buy  size=  5010.0  px=0.10143
11:27:28.537 Buy size= 490.0 px=0.10142
11:27:28.537 Buy size= 11059.0 px=0.10149
11:27:28.537 Buy size= 28173.0 px=0.10160
... (12 more)

One forced unwind ate 16 resting orders at 16 prices, and the feed gives you one row per fill because that is what happened on chain. An agent told “127 liquidations” when the real number is 33 will read a calm hour as a cascade and quote into it.

Count distinct execution hashes:

fills:        count
liquidations: count(distinct: Liquidation_Execution_Hash)
wallets: count(distinct: Liquidation_LiquidatedUser)

Fix it at the tool boundary where you can see it. A model handed a number labelled count will reason confidently about the wrong quantity and will not flag that it is confused.

It thinks its quote is resting when it was rejected

Count BTC order events by status over ten minutes and the shape is startling:

badAloPxRejected           1,848,618   83.6%
open 150,206 6.8%
canceled 131,269 5.9%
perpMarginRejected 43,063 1.9%
iocCancelRejected 20,579 0.9%
tooManyOpenOrdersRejected 14,775 0.7%
filled 1,608 0.1%
TOTAL 2,210,732

Eighty-four percent of everything that happens to a BTC order is badAloPxRejected, and one tenth of one percent is a fill. Checking what those rejected orders were, every one is a post-only limit order, split near evenly between buys and sells:

Limit  Buy   Tif=Alo   478,047
Limit Sell Tif=Alo 431,349

That is the quoting race on the most liquid market on the exchange: market makers trying to post at the touch, losing, and getting bounced. Two million of those in ten minutes. ETH is the same shape, 78.6% rejected and 0.06% filled.

Your agent is posting Alo orders into exactly that. Rejection is the normal outcome, not the exception, which is why the write tool above distinguishes resting from filled from neither. An agent that assumes its quote is live when the matching engine bounced it will keep reasoning about a position it does not have, and will hedge or size against a phantom.

It also breaks any activity metric you build. If you compute a cancel-to-fill ratio from a bare event count, 84% of your denominator on BTC never reached the book.

It trades the wrong BTC

HIP-3 lets outside builders deploy their own perp markets on Hyperliquid, under a namespace prefix, trading in the same infrastructure. A lot of them are tokenized equities, which is the same land grab Arcus is running at the dYdX team. There are currently 279 live across 10 deployers, the largest being xyz with 119 markets, then para with 33 and hyna with 25.

Query mark prices filtered to the symbol BTC:

flx:BTC     91470.2
hyna:BTC 76888.0
cash:BTC 70000.0

Three builders, three markets called BTC, three prices more than twenty thousand dollars apart, each on its own oracle. If your ingestion keys on Symbol, an agent can read a price from one market and send an order to another. Key on CoinRaw, which carries the full namespace:symbol identifier.

No data provider invented this. It falls out of permissionless market listing, and it will bite anyone who assumes symbols are unique.

State between runs

An agent that only reads the market and never reads itself will drift. Two things need reconciling at the top of every run.

The real position, from the native API rather than from memory:

@beta_tool
def open_position(symbol: str) -> str:
"""Report the agent's actual open position on one market.
    Args:
symbol: Market symbol. Must be BTC or ETH.
"""
state = info.user_state(address)
for entry in state["assetPositions"]:
p = entry["position"]
if p["coin"] == symbol:
return (f"{symbol}: size {p['szi']}, entry {p.get('entryPx')}, "
f"unrealized {p['unrealizedPnl']}")
return f"{symbol}: flat"

And the resting orders, so the agent does not stack five quotes across five runs because each run forgot the last. info.open_orders(address) covers this, and a cheap policy that works well is to cancel everything the agent placed at the start of a run and requote from a clean book.

Feed both in as tools rather than as prompt text. The model then reads current state at the moment it needs it, instead of trusting a snapshot you pasted in at the top of the turn that may already be stale.

Running it without losing money

constants.TESTNET_API_URL is not decoration. Moving off it should be a separate, deliberate commit made after the thing has run for a couple of weeks and surprised you at least once.

Some specifics that are worth more than a paragraph of general caution.

Expect it to do nothing. Exchange-wide, Hyperliquid liquidates in the low tens of positions an hour, and BTC alone can go four hours without a single one. An agent gated on BTC liquidations will correctly sit still on most runs. That is the right way round to test it: watch it decline to act on a quiet market before you point it at a busy one.

Keep the kill switch outside the process. A supervisor you can kill -9, or an exchange-side cancel-all you can fire by hand, beats any instruction in a system prompt. The system prompt is guidance. The process boundary is a guarantee.

Log the tool calls, not just the outcome. An agent that placed a strange order is only debuggable if you can replay what it saw when it decided. Arguments and results, every call, including the refusals from your own guardrails, since a spike in refusals is the earliest signal that the reasoning has gone somewhere odd.

Cap what one run can do, not just one order. The notional cap above limits a single order. A run that places one order twenty times is still within that cap and nowhere near safe.

Where this approach is weaker than the alternatives, plainly. The indexed feed sits behind the matching engine by an indexing step, so anything reacting in single-digit milliseconds belongs on the native websocket instead. The GraphQL window is a rolling thirty days or so, which covers live trading and recent-history checks but not a multi-year backtest. And the highest-volume cubes, Orders and BookUpdates, run to hundreds of millions of rows a day on a busy market, so filtered scans over long windows time out; keep interactive windows to an hour and accumulate anything longer in your own store.

What this is and is not

This is plumbing. Nothing above tells you what to trade or suggests you should, and a language model wired to a market data feed is not an edge. It is a way to act on one you already have, and equally a way to act on a bad idea faster than you could by hand.

What Hyperliquid genuinely changes is the input. On a centralised venue your agent reasons about price and its own fills, because that is all the exchange will sell you. Here it can reason about who is positioned where, which quotes are real, and who just got carried out, because the book is on a public chain and the wallet is attached to every order.

The reasoning layer is the easy part now. Getting clean, correctly counted market state into it is the work, and three of the traps are above.

Docs for the read-path queries: Hyperliquid API on Bitquery. The native API and SDK: hyperliquid.gitbook.io. Every figure was pulled live on 4 September 2026 and will have moved by the time you read this.

Disclosure: I work on developer content at Bitquery, which sells the indexed feed used for the read path. The write path is Hyperliquid’s own free SDK, and the sections on latency, history depth and query limits are there because they are real constraints.


Building an AI Crypto Trading Bot on Hyperliquid was originally published in Coinmonks on Medium, where people are continuing the conversation by highlighting and responding to this story.

Best Robinhood Chain Meme Coin Trading Platforms in 2026 (GMGN vs Axiom vs FOMO vs Terminal)

4 September 2026 at 12:12

I pulled 16.8 million Robinhood Chain swaps from three days of raw chain data to find out which trading terminals people actually use, what each one really costs per trade, and where the fees quietly eat your position.

Affiliate disclosure: some links in this article are referral links. If you sign up through one, I may earn a share of the platform’s fee revenue at no extra cost to you, and in most cases you get a fee discount for using the link. The ranking below comes from on-chain measurement, not from who pays the best commission. Two of the picks pay me nothing, and one of those is my recommendation for cheapest execution.

The 30-second version

Robinhood Chain went live on 1 July 2026. It is an Arbitrum-stack Layer 2 with ETH for gas, chain ID 4663, and no token of its own. It produced 849,106 blocks on 2 September alone, an average of one every 102 milliseconds, which is the fastest thing most traders have ever placed an order into. Robinhood marketed it around tokenized stocks. The traders showed up for meme coins instead.

On 1 September 2026 the chain printed a record $1.595 billion in daily DEX volume, up 61% from the $989 million record set on 28 August. Almost none of that flow goes through a plain DEX front end. It goes through trading terminals: GMGN, Axiom, FOMO, Terminal, Maestro and a handful of others that sit between you and the pool, add charts and a sniper, and charge you between 0.5% and 1% for the privilege. Their marketing pages are useless for choosing between them, so I read the chain instead.

What I measured: every successful DEX trade on Robinhood Chain for 1–3 September 2026, three complete UTC days. That is 16,827,852 swap transactions, $5.11 billion of USDG-quoted volume, and roughly 226,000 unique wallets a day. I grouped every swap by the contract it was sent to, then matched those contracts to the terminals that own them.

What came back, ranked by USDG volume routed over those three days:

  • 0x65050a9b…c40dc — Owner GMGN · Swap txs 4,860,785 · Unique wallets 53,529 · Volume (3 days) $947.5M
  • 0x4337084d…ff108 — Owner Gasless ERC-4337 stack (the model FOMO runs on) · Swap txs 1,104,739 · Unique wallets ~132,400 smart accounts · Volume (3 days) $288.1M
  • 0x4a86009a…f6f60 — Owner Axiom · Swap txs 833,565 · Unique wallets 16,250 · Volume (3 days) $159.7M
  • 0x6e2a35a7…c6919 — Owner OKX DEX · Swap txs 494,201 · Unique wallets 30,906 · Volume (3 days) $155.5M
  • 0x88767899…c0904 — Owner Uniswap Universal Router (direct) · Swap txs 993,757 · Unique wallets 101,341 · Volume (3 days) $337.9M
  • 0x00000000…886a2 — Owner Maestro · Swap txs 105,551 · Unique wallets ~2,400/day · Volume (3 days) $35.2M

GMGN moves more money than the other four named terminals combined. The second-biggest flow comes from phone apps rather than websites, arriving as account-abstraction traffic, which on Robinhood Chain means FOMO and its imitators.

1. GMGN — best overall for Robinhood Chain meme coins

👉 Sign up for GMGN (referral link: up to 30% off the platform fee)

GMGN’s router handled 4.86 million swaps and $947.5 million in three days. That is 18.5% of everything USDG-quoted that moved on the chain, more than the other four named terminals combined, and roughly six times what Axiom did. About 33,600 distinct wallets touched it every day.

Of GMGN’s 43,270 wallets that moved USDG-quoted volume, the top ten accounted for 2.6% of the total and the top hundred for 12.8%. The median GMGN wallet traded $1,637 across the three days. Concentration that low is rare on a crypto leaderboard, and it means the number is not ten bots in a trenchcoat.

On Robinhood Chain, GMGN is where the flow is, and that matters for more than bragging rights. Terminals route your order, and the ones with the most flow tend to have the best routing tables, the fastest indexing of brand-new pools, and the shortest gap between a token launching and it showing up in the feed.

Fees. 1% per trade. A referral code cuts it by up to 30%, to 0.70%. Network gas is separate and is not discounted. One caveat worth knowing: GMGN documents that discount for Solana, Ethereum, Base and BSC. I could not find Robinhood Chain named explicitly, so confirm the rate in the app on your first trade.

What it actually costs you. The median GMGN trade in my sample was $66.18. Median network fee on a GMGN swap was 0.00038 ETH, about $0.90 at the $2,392 ETH price the chain’s own USDG/WETH pools were printing. At the full 1% rate that is $0.66 in platform fee plus $0.90 in gas on a median-size buy. Round-trip the position and you are down about $3.10 on a $66 trade before the price moves at all, call it 4.7%. With a referral code cutting the fee to 0.70%, it drops to $2.73, or 4.1%.

What’s good. Copy trading and smart-money wallet tracking are the best in this group. New-pair feed is fast. It runs in a browser, so no install and no Telegram. It covers Solana, Ethereum, Base and BSC as well, so one account follows you across chains.

What’s not. Its swaps burn 424,000 gas at the median, roughly three times what a direct Uniswap swap costs. That extra gas is the price of GMGN’s bundled approval-and-swap flow, and you pay it on every single trade.

Get it if: you want one place to find, check and buy Robinhood Chain meme coins, and you care more about not missing a launch than about saving 30 cents of gas.

2. Axiom — best for fast, active traders (and growing quickest)

👉 Sign up for Axiom (referral link: 10% off trading fees, applied automatically)

Axiom is the fastest-growing thing on this chain by a distance. Its daily swap count went from 202,371 on 1 September to 338,254 on 3 September, up 67% in two days. Daily unique wallets went 6,749 → 10,708 over the same stretch, up 59%. Nothing else in the sample grew like that, and I am deliberately measuring from 1 September rather than 31 August, because the 31 August data starts at 09:59 UTC and a partial day would flatter the growth rate.

Fees. Axiom’s own docs say 1% base and a flat 10% discount for referred users, so 0.90%. Several third-party guides quote 0.95% falling to 0.81% instead. I am going with the primary source, but the two disagree, so check the rate the app shows you before you size a trade. Volume tiers lower the net rate further and pay cashback.

What it actually costs you. Median Axiom trade: $73.09. Median network fee: 0.00027 ETH, about $0.64. So Axiom is the cheapest of the big three terminals on gas per swap despite similar contract complexity, because it does not bid up gas price the way GMGN does.

What’s good. The interface is built for people placing dozens of trades a session: hotkeys, preset buy sizes, limit orders, and a launchpad feed that updates without a refresh. The tier system genuinely rewards volume rather than just dangling it.

What’s not. Smaller user base on this chain than GMGN, which occasionally shows up as thinner routing on very new pools. The referral discount is applied at signup and cannot be attached afterwards, so use a link the first time or you are stuck at full rate.

Get it if: you trade Robinhood Chain meme coins actively rather than occasionally, and the volume tiers will actually kick in for you.

3. FOMO — best mobile app, and the best option for beginners

👉 Download FOMO (Referral Code — bogo10)

Robinhood Chain has, in the documentation’s own words, “first-class support for ERC-4337 account abstraction”. FOMO is the app that took that seriously.

In my three-day window, the chain’s ERC-4337 entry point processed 1,104,739 swap transactions worth $288.1 million. Behind those transactions sat 132,421 distinct smart accounts, of which 29,514 were active on all three days. Almost a quarter of them came back every single day.

I want to be precise about attribution here, because everyone else is sloppy about it. I can prove that this flow is gasless smart-account traffic routed through Relay’s approval proxy. I cannot prove from the chain alone that 100% of it is FOMO. That execution pattern is exactly what FOMO documents: email or Apple ID signup, one balance across Solana, Ethereum, Base, BNB Chain, Monad and Robinhood Chain, gas sponsored by a paymaster, Relay handling the cross-chain part. Treat the bucket as “FOMO and anyone copying FOMO”.

And here my numbers disagree with the published ones, so I will show my working rather than pick the flattering figure. Third-party tracking put FOMO at roughly 35.6% of Robinhood Chain terminal volume on 31 August, with FOMO and GMGN together at 79.2%. Measured across the five named terminals in this article, I get GMGN at 59.7% and the whole gasless stack at 18.2%. Those two pictures do not reconcile. Either FOMO routes a meaningful share of its flow outside the account-abstraction path I traced, or the published split counts a different set of platforms. I could not close the gap, so take the ranking below as ordinal and treat any precise market-share percentage for FOMO with suspicion, including mine.

Fees. 0.50% per trade with a $0.95 minimum. No separate gas bill, because the paymaster covers it.

What it actually costs you. Median FOMO-style trade: $39.84, the smallest of any platform here, which tells you exactly who uses it. And that is where the $0.95 minimum bites. On a $39.84 trade, 0.50% is 20 cents, so you pay the $0.95 floor instead — an effective rate of 2.4%. You need a trade above $190 before the percentage fee overtakes the minimum. Below that, FOMO is the most expensive platform in this article.

What’s good. No seed phrase, no bridging, no gas token to top up, Apple Pay funding. If you have ever lost a trade because you had the token but no ETH for gas, this fixes that permanently. The referral program is the most generous here: 25% of your invitees’ trading fees, and they get 10% off for life.

What’s not. The $0.95 floor. Charts and analytics are thinner than GMGN’s. It is a phone app, so it is not where you want to be during a fast launch.

Get it if: you are new, you trade in $200+ clips, or you want meme coin exposure without learning wallet mechanics. Skip it if your average ticket is $50.

4. Terminal (formerly Padre, now owned by pump.fun) — best multi-chain coverage and cashback

👉 Sign up for Terminal

Padre was a well-liked multi-chain terminal until pump.fun bought it in October 2025 and folded it into Terminal. The PADRE token lost its utility in that deal and holders were moved to PUMP, which went about as smoothly as you would expect. If you remember Padre fondly and have been wondering where it went, this is where.

Terminal now covers Solana, Ethereum, Base, BNB Chain and Robinhood Chain from one browser tab, and trades on Ethereum, Base, BNB Chain and Robinhood Chain accrue rewards.

Fees. Charged per trade with real-time cashback accrual. Referred users get a 35% referred rate, confirmed in the live in-app copy. Cashback needs a manual claim from the rewards panel — it does not auto-credit, and plenty of people leave it sitting there.

One honest caveat. I could not isolate Terminal’s Robinhood Chain router in the top contracts by volume. Several large unlabelled routers in my sample carry thousands of unique wallets each, and one of them may well be Terminal, but I will not guess in public. What I can say is that Terminal’s Robinhood Chain flow is smaller than GMGN’s, Axiom’s or the account-abstraction bucket’s, because those four account for the large majority of identified terminal volume.

What’s good. Genuine multi-chain in one interface, backed by the largest launchpad in the business. Multi-wallet execution and Discord-based alerts carried over from Padre.

What’s not. The referral code binds at first visit through browser storage and cannot be added later. Cashback requires manual claiming.

Get it if: you trade several chains and want one tab, or you already live inside the pump.fun ecosystem.

5. Maestro — best Telegram bot and best rug protection

👉 Start Maestro (referral link)

Maestro handled 105,551 swaps and $35.2 million across the three days, with about 2,400 wallets a day. Smaller than the big four, which is what you would expect of a Telegram bot competing with browser terminals.

Median Maestro trade: $119.24, second-highest in the sample and nearly double GMGN’s. Its users trade less often and bigger, which is what you would expect of people placing orders from a chat window rather than staring at a feed.

Fees. Flat 1%, no subscription. Referral pays 25% lifetime commission on referred users’ fees.

What it actually costs you. Median network fee 0.00027 ETH, about $0.66. On a $119 median trade, 1% is $1.19, so total round-trip cost is roughly 3.1% of position. That is the best cost ratio of any 1% platform here, purely because the trades are bigger.

What’s good. 14 chains, copy trading, DCA, limit orders, and a sniper that runs from a phone with nothing to install. Its Robinhood Chain coverage is unusually wide, reaching Flap, Pons, Noxa, DYOR Swap, printr.money, pew.fun, circus.trade, Flaunch, SushiSwap and Uniswap V2/V3/V4. The anti-rug filters are the real reason to be here though, and they trigger often enough to be worth the 1%.

What’s not. Telegram is a bad place to read a chart, and the flat fee has no volume tiers to grow into.

Get it if: you want sniping and copy trading from your phone with rug filters on by default, and your average ticket is over $100.

6. OKX DEX — best without signing up for anything

No referral link here, and none needed.

OKX’s DEX router moved $155.5 million across 494,201 swaps from 30,906 unique wallets. That is more unique wallets than Axiom, at similar volume, which means smaller and more casual trades. Median size: $90.46.

Fees. About 0.1% service fee, an order of magnitude below the terminals. OKX makes its real money on the exchange side and runs the aggregator as a funnel into it. You connect a wallet and trade. (Older guides still say OKX DEX is free. It is not, and has not been for a while.)

What it actually costs you. Median network fee 0.00047 ETH, about $1.13, the highest gas cost per swap in this entire sample. OKX’s router bids a median 0.37 gwei priority tip. Which brings me to something worth knowing.

Robinhood Chain sequences transactions first-come, first-served. There is no priority auction, so paying a tip does not move you up the queue.

I tested that rather than trusting the documentation. Across 235,120 transactions in a 30-minute window on 2 September, the ones paying zero tip landed at median position 5 in their block. The ones paying a tip landed at median position 8. Tipping bought no earlier inclusion at all, and if anything correlated with landing later. Axiom and the Uniswap Universal Router both post a median tip of exactly 0.0 gwei and are sequenced normally.

If your platform is adding a tip on this chain, that money is not buying you speed.

Get it if: you want to buy something once, without creating an account or learning a new interface.

7. Uniswap directly — cheapest execution, zero platform fee

No referral link. Nobody pays me for this one, and it is the correct answer more often than the affiliate-funded internet will tell you.

Uniswap’s Universal Router was touched by 101,341 unique wallets over three days, second only to the account-abstraction bucket, and moved $337.9 million. Median trade size $162.52 — the largest in the sample by a wide margin.

Fees. No platform fee. Pool fee only.

What it actually costs you. Median gas per swap: 0.00011 ETH, about $0.26 on the Universal Router and $0.17 on SwapRouter02. That is one-third of GMGN’s gas and one-quarter of OKX’s, because a plain swap burns about 148,000 gas against GMGN’s 424,000.

On a $500 trade, GMGN costs you $3.50 in platform fee (with a referral code) plus $0.90 gas. Uniswap costs you $0.26. You give up the new-pair feed, the safety checks, the copy trading and the one-click sniper.

Get it if: you already know exactly which token you want, you have the contract address from somewhere you trust, and your trade is large enough that 0.70% is real money.

8. The Robinhood app itself — for tokenized stocks, not for meme coins

Robinhood’s own app is the front door to the chain’s tokenized equity side, and it never touches the meme coins. If you want SPY, NVDA or DJT exposure on chain rather than a dog coin that launched 40 minutes ago, that is a different product and a different article.

Platforms to skip on Robinhood Chain

BullX. Trading was suspended on 1 June 2026 and has not resumed. The team called it a pause for upgrades and then went quiet. It still gets 2,600 searches a month in the US, which means a lot of people are looking for a platform that no longer works. It is not on Robinhood Chain and it is not coming back.

Photon, Bloom, Trojan. All three are Solana-focused. Excellent tools on Solana; not options here.

What you actually pay per trade

Advertised fees are only part of the bill. Here is the full cost of a round trip, buy and then sell, on each platform’s own median trade size, using the median network fee I measured for each router and ETH at $2,392.

  • Uniswap direct — Median trade $162.52 · Fee rate 0% · Fee (round trip) $0.00 · Gas (round trip) $0.52 · Total cost $0.52 · % of position 0.3%
  • Maestro — Median trade $119.24 · Fee rate 1.0% · Fee (round trip) $2.38 · Gas (round trip) $1.32 · Total cost $3.70 · % of position 3.1%
  • Axiom (w/ referral) — Median trade $73.09 · Fee rate 0.90% · Fee (round trip) $1.32 · Gas (round trip) $1.28 · Total cost $2.60 · % of position 3.6%
  • OKX DEX — Median trade $90.46 · Fee rate ~0.1% · Fee (round trip) $0.18 · Gas (round trip) $2.26 · Total cost $2.44 · % of position 2.7%
  • GMGN (w/ referral) — Median trade $66.18 · Fee rate 0.70% · Fee (round trip) $0.93 · Gas (round trip) $1.80 · Total cost $2.73 · % of position 4.1%
  • FOMO — Median trade $39.84 · Fee rate $0.95 min · Fee (round trip) $1.90 · Gas (round trip) $0.00 · Total cost $1.90 · % of position 4.8%

Small trades are murdered by fixed costs. At a $40 ticket, FOMO’s $0.95 minimum is a 2.4% one-way tax. At $40 through GMGN, gas alone is 2.3%. If you are trading in $25 and $50 clips, no platform on this list is cheap, and the round-trip drag runs from about 4% up to nearly 9% before the token moves.

Gas is not free on this chain. A GMGN swap burns 424,146 gas at the median against Uniswap’s 147,797, nearly three times as much. Robinhood Chain’s base fee has climbed as the chain got busy, and terminal contracts do approval, swap, fee-split and settlement in one transaction, so they pay for all of it.

Referral codes are worth using and worth nothing to argue about. The GMGN discount takes 1.00% to 0.70%. On a $66 trade that saves 20 cents. Over 200 trades a month it saves $40. Use a link, then stop thinking about it and go worry about the 4% you lose to fees and gas either way.

The safety problem: 93 different contracts called “USDG”

This is the part that should change how you trade, and it took one query to find.

Over 1–3 September, 93 distinct token contracts traded on Robinhood Chain under the ticker USDG. One of them is the real Paxos-issued Global Dollar at 0x5fc5360d0400a0fd4f2af552add042d716f1d168. The other 92 are impostors, and several were built with 18 decimals instead of the real token's 6, which makes any naive price display off by a factor of a trillion.

It gets worse with the tokenized equities:

  • USDG — Distinct contracts trading under it 93
  • QQQ — Distinct contracts trading under it 82
  • TSLA — Distinct contracts trading under it 65
  • NVDA — Distinct contracts trading under it 39
  • MSTR — Distinct contracts trading under it 38
  • SPY — Distinct contracts trading under it 35
  • AAPL — Distinct contracts trading under it 31
  • DJT — Distinct contracts trading under it 28

Robinhood Chain is permissionless. Anyone can deploy a token named anything. During my window the chain saw 53,555 new launches through the Pons launchpad alone: 15,441 on 1 September, 19,541 on 2 September and 18,573 on 3 September, plus tens of thousands of other contract deployments. Between 33,000 and 45,000 distinct tokens got bought every single day.

Nobody is checking this for you.

What to do about it:

  1. Trade by contract address, never by ticker. Every platform here lets you paste an address. Do that.
  2. Get the address from the project, not from search. Search results and chat links are how fake tokens find buyers.
  3. Turn on the platform’s safety checks. Maestro’s anti-rug filters and GMGN’s contract audit flags exist for exactly this, and they are the strongest argument for paying a terminal fee at all.
  4. Check holder concentration before you buy. If the top ten wallets hold most of the supply, the chart you are looking at is somebody’s exit plan.

How to choose in ten seconds

  • I want the deepest flow and the best copy trading → GMGN
  • I trade all day and want tiers and hotkeys → Axiom
  • I am on my phone and I hate gas and seed phrases → FOMO (keep tickets above $190)
  • I trade five chains and want one tab → Terminal
  • I want sniping and rug filters from Telegram → Maestro
  • I know the contract address and my trade is big → Uniswap directly, and keep the 0.70%

FAQ

What is the best trading bot for Robinhood Chain meme coins? By measured volume, GMGN, with 4.86 million swaps and $947.5 million routed over 1–3 September 2026, more than Axiom, OKX, Maestro and the gasless account-abstraction stack put together. Maestro is the best Telegram-native bot on the chain, and Axiom is growing fastest.

Does Axiom support Robinhood Chain? Yes. Its router is live and labelled on the chain’s block explorer, and it processed 833,565 swaps in my three-day window.

Is Padre still around? Padre was acquired by pump.fun in October 2025 and renamed Terminal. It still runs as a multi-chain terminal covering Robinhood Chain. The PADRE token was retired in the acquisition.

Can I trade Robinhood Chain meme coins in the Robinhood app? No. The Robinhood app covers the tokenized asset side. Meme coins trade through DEXs and the terminals listed above.

What are Robinhood Chain gas fees? Cheap in absolute terms, meaningful in relative terms. A plain Uniswap swap costs 141,000–148,000 gas, roughly $0.17–$0.26. A terminal swap costs about 420,000–480,000 gas, roughly $0.64–$1.13. On a $70 trade that gas is 1–2% of your position.

Does paying a higher priority fee get my trade in faster on Robinhood Chain? No. The chain sequences first-come, first-served, so there is no priority auction to win. Axiom and Uniswap both post a median tip of 0.0 gwei.

Is FOMO actually gasless? Yes, in the sense that matters. Gas is paid by a paymaster contract under ERC-4337, so you never need ETH in the account. You pay for it inside the 0.50% fee and the $0.95 minimum.

Which platform is cheapest? Uniswap directly, at about 0.3% round trip on a median-size trade, because there is no platform fee and the swap burns a third of the gas. OKX is next at about 2.7%. Every other option on this list is buying you discovery and safety checks with that difference.

Nothing here is financial advice. Meme coins go to zero routinely and most of the 53,555 tokens launched during my three-day sample will be worthless by the time you read this. Trade money you can lose.

Affiliate disclosure, repeated: several links above are referral links and I may earn commission if you sign up through them. Uniswap and OKX pay me nothing and are still in the ranking, one of them as the cheapest option available.


Best Robinhood Chain Meme Coin Trading Platforms in 2026 (GMGN vs Axiom vs FOMO vs Terminal) was originally published in Coinmonks on Medium, where people are continuing the conversation by highlighting and responding to this story.

Pump.fun API: How to Track Bonding Curves, Graduations and PumpSwap On-Chain

3 September 2026 at 12:23

The Pump.fun API end to end: detect launches, read bonding curve progress, catch graduations to PumpSwap. Measured graduation rate: 2.7%, median two minutes.

Pump.fun launched 282,428 new tokens in the seven days to 2 September 2026. That works out to one new token every two seconds for seven straight days, and it was not an unusual week.

Almost none of them matter. Of the tokens that launched on 13 August, 2.69% ever reached a PumpSwap pool. The other 97.3% died on the curve. Of the ones that did graduate, the median took two minutes, which tells you most of what you need to know about the latency budget for anything you build here.

If you are building a trading terminal, a sniper, a screener or a research dashboard on Solana, this is the feed you have to handle. In this article, we cover what Pump.fun does at the program level, then the Pump.fun API queries that turn it into structured data you can use.

Every figure below was measured on 3 September 2026 against live Solana data using Bitquery’s Pump.fun API. Where a number is a proxy rather than a direct measurement, I say so.

How the Pump.fun bonding curve works

Pump.fun is a bonding-curve launchpad, and it is the design everything else copied. Unlike its EVM imitators, it does not deploy a contract per token. One Solana program serves every token on the platform.

A token moves through four stages.

Launch. A creator calls create or create_v2 on the Pump.fun program at 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P. The program mints a fixed supply of one billion, opens a bonding curve, and writes the name, symbol, metadata URI and creator into the instruction. Bitquery decodes that program under the name pump, so you can filter on Program: { Name: { is: "pump" } } instead of memorising the address.

Curve trading. Buys and sells go against the curve rather than a pool. Price rises as the curve’s base balance falls. There is no per-token curve account to chase, because the mint address is what separates one token’s trades from another’s.

Graduation. When the curve’s base balance reaches 206900000, the token has completed the curve. That constant is the cleanest tripwire in the whole system: one equality filter on DEXPools, no event decoding, no market-cap arithmetic.

Open-market trading. A create_pool instruction on the PumpSwap AMM at pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA opens the real pool, and trading continues there.

One detail catches people on the first pass. The curve is not SOL-only. Over the measured week, 27,207,356 curve fills were quoted in SOL and 883,830 in USDC, which is 3.1% of trades and 2.4% of volume. Small enough to miss by accident, large enough to skew a USD column if you hardcode SOL as quote.

What a million Pump.fun launches looks like

Counting tokens whose first curve trade fell inside the window:

  • 5 August to 2 September 2026, 29 full days: 1,109,779 tokens
  • 27 August to 2 September, seven days: 282,428 tokens
  • Daily range across the month: 30,663 at the low, 52,438 at the high
New tokens per day on Pump.fun, 5 Aug — 2 Sep 2026. Source: Bitquery.

Over that same week the bonding curve carried 28,091,186 trades from 515,432 distinct traders across 323,089 distinct tokens, on roughly $1.14B of quote-side volume. The average fill was $40.45 and the median was $10.13. A very long tail of very small bets.

Pump.fun graduation rate: 2.7%, in a median of two minutes

The graduation rate is the number most people get wrong, so it is worth measuring properly. Take a single day’s launch cohort and follow it forward, instead of dividing today’s graduations by today’s launches. Four cohorts, each followed to 2 September:

  • Launched 6 August: 35,183 tokens, 998 reached PumpSwap, 2.84%
  • Launched 13 August: 38,835 tokens, 1,045 reached PumpSwap, 2.69%
  • Launched 20 August: 40,934 tokens, 1,066 reached PumpSwap, 2.60%
  • Launched 26 August: 49,530 tokens, 1,535 reached PumpSwap, 3.10%

Call it 2.7%, stable within half a percentage point across four independent cohorts.

Share of each day’s launch cohort that reached PumpSwap by 2 Sep 2026, against the naive same-week method. Source: Bitquery.

The naive method gives you something very different. 34,576 new PumpSwap pools appeared during the week against 282,428 launches, which reads as a 12.2% graduation rate and is wrong by more than four times.

Speed is the other half of the picture. For the 13 August cohort’s 1,045 graduates, 1,038 of which have a cleanly ordered pair of timestamps, the gap between first curve trade and first pool trade:

  • 25th percentile: under one minute
  • Median: two minutes
  • 75th percentile: 13 minutes
  • 901 of 1,038, or 86.8%, inside the first hour
  • 992 of 1,038, or 95.6%, inside the first day

Launch-to-graduation time, 13 Aug 2026 cohort, n=1,038. Source: Bitquery.

There is no slow burn. A token either clears the curve almost immediately or it never does. Anything polling on a one-minute cron has already missed the median graduation, which is why the queries later in this article are written as subscriptions rather than as scheduled requests.

47% of PumpSwap’s volume is 940 mints borrowing ten names

This is where the graduation pipeline stops explaining PumpSwap.

Of the 34,576 tokens that got their first PumpSwap trade during the week, only 8,745, or 25.3%, had ever traded on a Pump.fun bonding curve. Three quarters of PumpSwap’s new listings did not graduate onto it. Somebody opened a pool for them directly.

Widen that to all PumpSwap activity for the week and the split gets sharper. Curve-origin tokens carry 42.1% of the trades but only 7.1% of the volume.

So where is the volume? Group the week’s PumpSwap trades by token symbol. Each line below is one symbol, the number of separate mints trading under it, that symbol’s total volume, and the median fill size:

  • AAPL — 180 mints, $3.53B, median fill $982
  • Anthropic — 212 mints, $3.47B, median fill $1,459
  • NVDA — 41 mints, $2.24B, median fill $1,104
  • OPENAI — 41 mints, $1.84B, median fill $1,124
  • HOOD — 104 mints, $1.80B, median fill $961
  • GOOGL — 92 mints, $1.75B, median fill $980
  • META — 64 mints, $1.73B, median fill $960
  • MSFT — 63 mints, $1.30B, median fill $894
  • ROCKSTAR — 124 mints, $1.23B, median fill $823
  • UMIA — 19 mints, $1.16B, median fill $1,072

Ten symbols. 940 distinct mints. $20.05B of $42.44B total PumpSwap volume, or 47.2%. Essentially none of it came off a bonding curve: 37 of those 940 mints ever saw a curve trade, and they carry 0.0% of the volume once you round to a single decimal.

PumpSwap volume by token symbol, 27 Aug — 2 Sep 2026. Source: Bitquery.

To be explicit, because the tickers invite the wrong assumption: these are Solana tokens that use those names and symbols. They are not issued by, affiliated with, or endorsed by Apple, Anthropic, Nvidia, OpenAI, Robinhood, Alphabet, Meta, Microsoft or Take-Two, and they are not equity in any of them.

The pattern inside one of these pools is worth looking at directly. Taking the largest UMIA mint for the week: 223,927 buys worth $184.23M against 169,650 sells worth $183.55M, balanced to within 0.4%. 4,746 addresses bought and 1,605 sold, averaging 106 sells each. Median fill was $1,044 on the buy side and $1,141 on the sell.

Two-sided flow balanced to a fraction of a percent, fill sizes clustered in a narrow band around $1,000, and the same ten names re-minted 940 times. I am not going to characterise the intent from a query. What I will say is that the shape of it does not look like price discovery, and a screener that ranks on volume will put all of it on the front page.

One wallet made 17% of every bonding-curve trade

Back on the curve, concentration is worse than the launch counts suggest.

Over the week, the address Gygj9QQby4j2jryqyqBHvLP7ctv2SaANgh4sCb69BUpA made 4,829,570 bonding-curve trades. That is 17.19% of every fill on the entire launchpad, from one wallet, at roughly eight trades per second sustained for seven days.

Its shape is unambiguous: 2,412,205 buys and 2,417,365 sells, $26.71M bought against $26.61M sold, median fill $2.40, spread across 64,979 distinct tokens. It produces 17% of the trade count and 4.7% of the volume.

The top ten wallets together made 22.22% of all curve trades, and the top hundred made 29.19%. At the other end of the distribution, 75,236 addresses made exactly one trade all week.

Share of Pump.fun bonding-curve fills by wallet rank, 27 Aug — 2 Sep 2026. Source: Bitquery.

The consequence for anything you build: do not rank on trade count. The two highest-volume curve tokens of the week, LAKEUSA at $3.78M and BLAJUG at $999.7k, had 54 and 28 unique traders respectively. The third, fone at $420.1k, had 1,683. A trending list sorted by volume or fills will surface the first two and bury the third. Sort on unique traders, or carry both and let the gap between them be the signal.

Querying Pump.fun data with the API

Bitquery serves Solana as GraphQL at https://streaming.bitquery.io/graphql. Three cubes matter here.

Solana.Instructions and Solana.TokenSupplyUpdates give you launches, creators and metadata. Solana.DEXTrades, DEXTradeByTokens and DEXPools give you curve fills, pool state and bonding curve progress. Trading.Trades gives you normalised trades with USD price, market cap and supply on every row, with curve trades under ProtocolFamily: "Pumpfun" and graduated pools under "Pumpswap".

Grab a free key from the Bitquery IDE and send it as a bearer token.

How to detect every new Pump.fun launch

Every launch is a create or create_v2 call on the Pump.fun program:

subscription {
Solana {
TokenSupplyUpdates(
where: {
Instruction: {
Program: {
Address: { is: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P" }
Method: { in: ["create", "create_v2"] }
}
}
}
) {
Block { Time }
Transaction { Signer }
TokenSupplyUpdate {
Amount
PostBalance
Currency {
Name
Symbol
MintAddress
Decimals
Uri
UpdateAuthority
}
}
}
}
}

Transaction.Signer is the creator. Currency.Uri points at the off-chain metadata, and MintAddress is the key every other query joins on. Name, symbol and decimals arrive in the same row, so there is no separate metadata lookup in the hot path.

How to get a Pump.fun token’s creator and creation time

Working backwards from a mint, instead of forwards from the firehose:

query {
Solana(network: solana) {
Instructions(
where: {
Instruction: {
Accounts: { includes: { Address: { is: "MINT_ADDRESS" } } }
Program: {
Name: { is: "pump" }
Method: { in: ["create", "create_v2"] }
}
}
}
) {
Block { Time }
Transaction { Signer Signature }
Instruction { Accounts { Address } }
}
}
}

One row, and it is the token’s birth certificate. Swap the mint filter for a signer filter and you get every token that developer has ever launched, which given the concentration above is usually the first thing worth checking about a new launch.

How to stream Pump.fun bonding curve trades

subscription {
Trading {
Trades(
where: { Pair: { Market: { ProtocolFamily: { is: "Pumpfun" } } } }
) {
Block { Time }
Side
Price
PriceInUsd
Amounts { Base Quote }
AmountsInUsd { Base Quote }
Trader { Address }
Supply { MarketCap TotalSupply }
Pair {
Token { Address Symbol }
QuoteToken { Symbol }
Market { Address Program }
}
}
}
}

That is every bonding-curve fill on Solana, USD-priced, with market cap attached, all 28 million a week of them. Add Pair: { Token: { Address: { is: "MINT" } } } to watch a single token.

Take that mint from the token’s own create instruction rather than copying one out of an article. Most curves go quiet within hours, so a hardcoded address returns an empty result more often than not.

How to get Pump.fun bonding curve progress

To see how close a token is to graduating, read the pool state instead of summing trades:

query ($pairAddress: String) {
Solana {
DEXPools(
where: {
Pool: { Market: { MarketAddress: { is: $pairAddress } } }
Transaction: { Result: { Success: true } }
}
limit: { count: 1 }
orderBy: { descending: Block_Time }
) {
Pool {
Base { Balance: PostAmount PostAmountInUSD }
Quote { PostAmount PostAmountInUSD }
Market {
BaseCurrency { Name Symbol }
QuoteCurrency { Name Symbol }
}
}
}
}
}

Base.PostAmount counting down toward 206900000 is the progress bar. There is no percentage field to look for, and you do not need one.

How to catch a Pump.fun graduation to PumpSwap

Two signals, and you want both. The last curve trade before the flip:

{
Solana {
DEXPools(
where: {
Pool: {
Dex: { ProtocolName: { is: "pump" } }
Base: { PostAmount: { eq: "206900000" } }
}
Transaction: { Result: { Success: true } }
}
orderBy: { descending: Block_Time }
) {
Transaction { Signer Signature }
Pool {
Base { ChangeAmount PostAmount }
Quote { PostAmount PostAmountInUSD PriceInUSD }
Market { BaseCurrency { MintAddress Symbol } MarketAddress }
}
}
}
}

And the pool opening on PumpSwap, which is the confirmation:

subscription {
Solana {
Instructions(
where: {
Instruction: {
Program: {
Address: { is: "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA" }
Method: { is: "create_pool" }
}
}
}
) {
Block { Time }
Transaction { Signer Signature }
Instruction {
Accounts { Address Token { Mint Owner } }
Program { Method AccountNames Json }
}
}
}
}

Given a two-minute median, run the second one as a subscription and treat the first as reconciliation.

How to stream it live over WebSocket

Any query above becomes a subscription. Change query to subscription, drop limit and orderBy, and connect to wss://streaming.bitquery.io/graphql?token=YOUR_TOKEN. Three subscriptions, covering launches, curve trades and create_pool, give you the whole launchpad in real time. Aggregates such as sum, count and OHLC buckets are query-only, so run those on a schedule and keep the streams raw.

Pump.fun API FAQ

What is the Pump.fun program ID?

6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P on Solana mainnet. That single program handles creation and all bonding-curve trading for every Pump.fun token. The PumpSwap AMM that graduated tokens move to is a separate program at pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA.

What is the Pump.fun graduation market cap threshold?

There isn’t one, and this is the single most common wrong assumption about the launchpad. The on-chain graduation condition is a token-balance constant: the curve’s base balance reaching 206900000. It is denominated in tokens, not dollars.

That constant is easy to sanity-check from trade data, and worth doing once so you trust it. Supply is one billion, so completion means 793,100,000 tokens have been sold off the curve. Summing net base flow on the curve for tokens that graduated during the measured week gives a median of 793.10M tokens, matching the constant exactly.

The USD market cap that corresponds to floats with the SOL price and with where the token’s price sat when it completed. Measuring the last curve trade before graduation put the 10th percentile near $11k and the 90th near $101k, with a median around $38k — a range too wide to be a threshold. Any article quoting you a single fixed dollar figure is quoting a conversion that was true on one day. Filter on the balance constant instead.

Does Pump.fun still migrate to Raydium?

No. Graduated Pump.fun tokens migrate to PumpSwap, Pump.fun’s own AMM, and the migration shows up as a create_pool instruction on pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA. Plenty of guides still describe a Raydium migration, which was the older behaviour. If your indexer is watching Raydium pool creation for graduations, it has been silently missing all of them.

What is PumpSwap?

The AMM Pump.fun runs for tokens that complete the bonding curve. As the numbers above show, it is no longer only a graduation venue: three quarters of the pools opened on it during the measured week were for tokens that never traded on a Pump.fun curve at all, and those tokens carry the overwhelming majority of its volume.

What is Mayhem mode on Pump.fun?

A launch variant, and the useful part for anyone indexing is that it is detectable at creation without decoding anything exotic. A standard launch shows one transfer of 1,000,000,000,000,000 base units, which is one billion tokens at six decimals. A Mayhem-mode launch shows two. Count them and you have the flag, historically as well as live. The Pump.fun API docs have the query.

Is there a free Pump.fun API?

You can generate a free key in the Bitquery IDE and run every query in this article against it, within the free tier’s limits. The docs page has the current tiers, and if you are choosing between providers rather than getting started, I compared them in Best Pump.fun APIs in 2026.

Is Pump.fun on any other chain?

Not as Pump.fun. The program is Solana-only and every address in this article is a Solana address.

The design has been copied widely, though, and a cross-chain screener needs each one handled separately because they share no event shape. Pons on Robinhood Chain is the closest analogue, an EVM rebuild on Uniswap v4 that deploys a curve contract per token and lets the creator choose the quote asset, including tokenised equities. pools.trade on the same chain has no bonding curve at all, and its tokens open as a Uniswap v4 pool from the first block. Comparing graduation rates across the three is the most interesting thing you can do with those feeds, and reusing Pump.fun’s assumptions is the fastest way to publish a wrong number.

Where to go next

The full reference lives in the Pump.fun API documentation and the PumpSwap API documentation, which between them cover token creation, Mayhem-mode detection, OHLCV, first-100-buyers, dev holdings, top creators, market-cap filters, migration tracking and creator-fee transfers.

At 40,000 launches a day and a two-minute median to graduation, polling stops being an option early. The instructions above are the entire surface area of the launchpad.

All figures were measured on 3 September 2026 against Solana via Bitquery. The window is 27 August to 2 September 2026, seven full days, unless stated; the 29-day figure covers 5 August to 2 September.

Disclosure: this post contains no affiliate or referral links. I work on data tooling at Bitquery, whose API produced the measurements above.


Pump.fun API: How to Track Bonding Curves, Graduations and PumpSwap On-Chain was originally published in Coinmonks on Medium, where people are continuing the conversation by highlighting and responding to this story.

Pons API on Robinhood Chain: How to Track the Pons Launchpad On-Chain

31 August 2026 at 08:54

124,016 tokens launched, 1,362 graduated, and a quarter of the volume priced in tokenized stocks. How the Pons launchpad works at the contract level, and the queries that produce those numbers.

Robinhood Chain opened to the public on 1 July 2026. A month later, close to one transaction in ten on the whole chain was coming out of a single application: in the last 24 hours, 922,540 of 9,559,806 transactions carried a Pons launch or bonding-curve trade.

That application is the Pons launchpad. Anyone can deploy a fixed-supply memecoin on it in about thirty seconds, with no code, and trade it from the first block. On 30 August 2026 it minted 22,581 new tokens in a single day.

If you’re building a trading terminal, a sniper bot, a token screener or a research dashboard on Robinhood Chain, that’s the feed you have to handle. This article covers what Pons actually does at the contract level, then the GraphQL queries that turn it into structured data you can use.

Every figure below was measured against live chain data on 31 August 2026 using Bitquery.

How the Pons launch factory works

Pons is a bonding-curve launchpad. Broadly the same design as Pump.fun on Solana or Flaunch on Base, rebuilt on top of Uniswap v4.

A token goes through four stages.

Launch. A creator calls the Pons launch factory at 0x7ed598bcef8bd9edd8c97a195c6d13f40801ec7e, or its router at 0xe33e9e479df8802cb0866d5d05258bec4cf62948. The factory deploys a fresh ERC-20 with a fixed supply of one billion, deploys a bonding-curve contract dedicated to that token, and emits TokenLaunched.

Curve trading. Buyers and sellers trade against the curve rather than a pool. Every fill emits CurveBuy or CurveSell from that token's own curve contract. Early buys get hit with a decaying snipe tax, which shows up as SnipeTaxCharged.

Graduation. Once cumulative quote-token deposits cross the token’s graduationThreshold, the curve gets drained (LaunchSwept), a slice of supply is locked permanently (GraduationTokensPermanentlyLocked), and the proceeds seed a real Uniswap v4 pool (PoolGraduated).

Open-market trading. The graduated token then trades in a Uniswap v4 pool sitting behind a custom hook at 0xe5e702641ea86f4ae6cc3cdaed2b886f976be044, which registers the pool and collects protocol fees.

One detail trips almost everybody up on the first pass. The graduation threshold is denominated in whatever pair asset the creator picked, and creators pick different ones. Three consecutive launches on 31 August carried thresholds of 4200000000000000000, 8090000000 and 369000000000000000000. Those aren't comparable. The first is 4.2 ETH, because its pairToken is 0x000…000, the native asset. The second is 8,090 USDG, which is Global Dollar and has six decimals. Read pairToken first or your threshold column is meaningless.

What 124,016 launches actually look like

New tokens per day on the Pons launch factory, Robinhood Chain, 3–30 August 2026. Source: Bitquery.

Lifetime, counting from the factory’s first launch on 3 August 2026:

  • Tokens launched: 124,016
  • Tokens graduated to Uniswap v4: 1,362
  • Graduation rate: 1.10%

Over the last seven days (25 to 31 August 2026):

  • Tokens launched: 83,962
  • Graduations: 1,064, a rate of 1.27%
  • Bonding-curve trades: 3,058,412
  • Curve volume: roughly $259M
  • Distinct traders: 140,247
  • Distinct tokens traded: 65,219

Daily launches sat between 700 and 3,300 for most of the month, then went vertical in the last week: 2,758 on 24 August, then 5,495, 8,137, 12,642, 11,496, 15,957, and 22,581 on the 30th. Two thirds of every token Pons has ever launched appeared in the final seven days of August.

Pons launches vs graduations to Uniswap v4, all history to 31 August 2026. Source: Bitquery.

That graduation rate is the number most people get wrong. Roughly 99 tokens in 100 die on the curve and never reach a pool at all.

Volume is flatter than you’d guess, too. CHIT, the largest bonding-curve token of the week, did $323,744. The nine largest together did about $2.43M, under 1% of the $259M that moved through the curves. No runaway winner, just a very long tail of very small bets. Across 3,058,412 trades the average fill was $85.

A quarter of Pons volume is priced in tokenized stocks

Pons bonding-curve volume by quote asset, 25–31 August 2026. Source: Bitquery.

Group the same week of curve trades by quote asset and Pons stops looking like a normal memecoin launchpad.

  • ETH: $168.2M across 2,016,883 trades (64.8%)
  • USDG: $24.6M (9.5%)
  • NVDA: $13.9M (5.4%)
  • SPCX: $8.6M (3.3%)
  • SPY: $7.2M (2.8%)
  • GME: $4.7M (1.8%)
  • DJT: $3.5M, RDDT $3.1M, TSLA $3.1M, GLD $2.9M, then TTWO, AMZN, QQQ, AAPL, MSFT, COIN, MSTR, GOOGL, PLTR, META and more

Twenty-six of the quote assets aren’t crypto at all. They’re tokenized equities and ETFs, and together they carry $65.5M, or 25.2% of all Pons curve volume. Tokenized Nvidia alone moved more money through Pons curves than any individual memecoin on the platform did.

That is a Robinhood Chain-specific behaviour with no equivalent on Solana or Base. A trader can buy a dogcoin denominated in SPY, and about a quarter of them do. If you’re pricing Pons tokens, you cannot assume an ETH or stablecoin quote leg. You have to read pairToken per token and carry the right decimals, or every USD figure downstream is wrong.

Ten wallets minted a quarter of the tokens

Launch concentration on the Pons launch factory, 25–31 August 2026. Source: Bitquery.

Over the same seven days, 34,229 distinct wallets launched tokens through the factory. The ten busiest launched 20,122 of them, about 24% of the week’s total. The single busiest wallet, 0x5be0405dc84593fddbeccb80abb9d8cb0df75519, deployed 5,524 tokens, roughly one every 110 seconds without pause for a week.

Median activity is the opposite: most wallets launched once or twice. The launchpad is a small number of industrial minters sitting on top of a very wide amateur base, and any “new tokens per day” chart that doesn’t separate the two is measuring bot throughput, not adoption.

Querying Pons launchpad data

Bitquery indexes Robinhood Chain and serves it as GraphQL at https://streaming.bitquery.io/graphql. Two cubes matter here:

EVM(network: robinhood) gives you raw and decoded events, calls, transfers and holders. Trading gives you normalised trades, USD prices and OHLCV candles, with curve trades tagged Protocol: "pons_v2" and graduated pools tagged "uniswap_v4".

Everything below runs as written. Grab a free key from the Bitquery IDE and send it as a bearer token.

Detect every new launch

{
EVM(network: robinhood) {
Events(
limit: {count: 25}
orderBy: {descending: Block_Time}
where: {
LogHeader: {Address: {is: "0x7ed598bcef8bd9edd8c97a195c6d13f40801ec7e"}}
Log: {Signature: {Name: {is: "TokenLaunched"}}}
}
) {
Block { Time Number }
Transaction { Hash From }
Arguments {
Name
Value {
... on EVM_ABI_Address_Value_Arg { address }
... on EVM_ABI_BigInt_Value_Arg { bigInteger }
}
}
}
}
}

You get token, curve, deployer, pairToken, launchConfigId and graduationThreshold back as named fields. Hold onto curve. It's unique per token and it's what the next queries key off.

Pull the name, symbol, logo and socials

TokenLaunched hands you addresses, not metadata. The readable fields live in the calldata of the launch call, so read the call instead of the event:

{
EVM(network: robinhood) {
Calls(
limit: {count: 20}
orderBy: {descending: Block_Time}
where: {
Call: {
To: {in: [
"0x7ed598bcef8bd9edd8c97a195c6d13f40801ec7e",
"0xe33e9e479df8802cb0866d5d05258bec4cf62948"
]}
Input: {startsWith: ["0xf35abbcf", "0xa72101af", "0xf85f8e41"]}
Success: true
}
}
) {
Block { Time Number }
Transaction { Hash From }
Call { To Value Input Output }
}
}
}

Decode the input and you have name, symbol, an IPFS logo URI, a description, a socials struct covering X, Telegram, Discord, website and Farcaster, plus the creator's fee recipient and their chosen creatorTaxBps. The output carries the two addresses:

const o = call.Output.replace(/^0x/, '');
const token = '0x' + o.slice(24, 64);
const curve = '0x' + o.slice(88, 128);

That’s a complete launch card from one call, with no off-chain metadata service in the loop.

Follow the bonding curve

Every fill on every curve comes down to two event names, so the whole network fits in one query:

{
EVM(network: robinhood) {
Events(
limit: {count: 50}
orderBy: {descending: Block_Time}
where: {
Log: {Signature: {Name: {in: ["CurveBuy", "CurveSell"]}}}
}
) {
Block { Time }
Transaction { Hash From }
LogHeader { Address }
Log { Signature { Name } }
Arguments {
Name
Value {
... on EVM_ABI_Address_Value_Arg { address }
... on EVM_ABI_BigInt_Value_Arg { bigInteger }
}
}
}
}
}

Each row gives you buyer, recipient, quoteIn, tokensOut, fee and tax, and LogHeader.Address tells you which curve it came from. That's every bonding-curve trade on the network, all three million a week of them.

To watch one token instead, add its curve address as a filter:

where: {
LogHeader: {Address: {is: "0x6295b9bee3d8eafe3614a63ed96b0a5ce06dad85"}}
Log: {Signature: {Name: {in: ["CurveBuy", "CurveSell"]}}}
}

Take that address from the curve field of the token's TokenLaunched event rather than copying one from an article. Curves are deployed per token and most of them go quiet within hours, so a hardcoded address returns an empty result more often than not.

If you’d rather have USD prices and candles than raw integers, go through the Trading cube:

{
Trading {
Trades(
limit: {count: 50}
orderBy: {descending: Block_Time}
where: {
Pair: {Market: {Protocol: {is: "pons_v2"}, Network: {is: "Robinhood"}}}
}
) {
Block { Time }
Side
PriceInUsd
Amounts { Base Quote }
AmountsInUsd { Base Quote }
Trader { Address }
Pair { Token { Address Symbol } QuoteToken { Symbol } }
}
}
}

Protocol: "pons_v2" has to be exact. Pass the wrong string and you get zero rows and no error.

Check the liquidity lock

Every Pons graduation permanently locks part of the supply. The amount is emitted as an event, so you can verify it yourself rather than trusting the docs:

{
EVM(network: robinhood, dataset: combined) {
Events(
limit: {count: 25}
orderBy: {descending: Block_Time}
where: {
LogHeader: {Address: {is: "0x7ed598bcef8bd9edd8c97a195c6d13f40801ec7e"}}
Topics: {includes: [{Hash: {is: "a0a18f5bf205becee8b268d7cf69addab8548ae8ef361791464cf0e0e17c1361"}}]}
}
) {
Block { Time Number }
Transaction { Hash }
Topics { Hash }
LogHeader { Data }
}
}
}

The token address is the second topic, left-padded. The amount is the data field. Decode a recent one and you get 81,632,653.06 tokens, which is exactly 4/49 of the one-billion supply, or 8.163%. That figure was identical across the locks checked, and the locked balance sits at the launch locker, 0x267444d099b10fb5ed7c3cc7b7c767adca574952. Exclude that address from holder queries or your top-holder list will be wrong on every graduated token.

Counting the same events across all history: 1,363 sweeps, 1,363 locks and 1,362 PoolGraduated events. The off-by-one is a graduation that was mid-flight when the snapshot was taken.

Catch graduations

The cleanest graduation signal is PoolRegistered on the meme hook, which fires when the Uniswap v4 pool is created:

{
EVM(network: robinhood) {
Events(
limit: {count: 50}
orderBy: {descending: Block_Time}
where: {
LogHeader: {Address: {is: "0xe5e702641ea86f4ae6cc3cdaed2b886f976be044"}}
Topics: {includes: [{Hash: {is: "01bf263a1db1652580721573296e1a1fa70b3d4c87f61d02a69c4e1109d2d573"}}]}
}
) {
Block { Time Number }
Transaction { Hash }
LogHeader { Data }
}
}
}

The payload is three left-padded addresses:

const d = log.Data;
const memecoin = '0x' + d.slice(24, 64);
const quoteToken = '0x' + d.slice(88, 128); // 0x000…000 = native ETH
const creator = '0x' + d.slice(152, 192);

On the factory side the full sequence reads TokenLaunched, then LaunchSwept, then GraduationTokensPermanentlyLocked, then PoolGraduated.

Stream it live

Any query above becomes a WebSocket subscription: change query to subscription, drop limit and orderBy, and connect to wss://streaming.bitquery.io/graphql?token=YOUR_TOKEN. Three subscriptions covering launches, curve trades and graduations give you the whole launchpad in real time.

Three things that will cost you a day

SignatureHash filters silently force the realtime dataset. Filtering on or selecting Log { Signature { SignatureHash } } limits the query to a rolling two-to-three-day window. For anything historical, filter on Topics: {includes: [{Hash: {is: "…"}}]} instead. Same topic0, archive-safe.

Decoded event names only go back to 14 August 2026. Before that date, Log: {Signature: {Name: {is: "TokenLaunched"}}} returns nothing on the archive dataset. Use the topic hash for full history, and dataset: combined when you want archive plus the realtime tail in one response.

Validate USD figures on both legs. The Trading cube exposes AmountsInUsd { Base Quote }. Sum both and compare. If they disagree by more than a few percent, one side has bad pricing somewhere. Pons curve trades over the last seven days came out at $261.4M base-side and $259.2M quote-side, a spread of 0.9%, which is why the $259M above is safe to quote.

Is the Pons launchpad on Base?

No. Pons runs on Robinhood Chain, chain ID 4663. It isn’t deployed on Base, Solana or Ethereum mainnet, and every contract address in this article is a Robinhood Chain address. Anything advertising “Pons on Base” is a different project trading on the name.

Pons also isn’t the only launchpad on the chain. pools.trade, built by Uniswap Labs, opened publicly on 5 August 2026 on the same network. It has no bonding curve at all: tokens open as a Uniswap v4 pool from block one, with no graduation event to wait for. If you’re building a screener for Robinhood Chain you need both feeds, and they need different code.

Where to go next

The full reference sits in the Pons API documentation: every contract address, every topic0 hash, the complete event ABI list, holder queries, OHLCV candles, and the liquidity and slippage endpoints.

The same GraphQL endpoint covers the rest of the chain too, including trades, transfers, token holders and contract events.

At 22,000 tokens a day, scraping stops being an option fairly early. The events above are the whole surface area of the launchpad, so once you can read them you can build anything on top.

All figures were measured on 31 August 2026 against Robinhood Chain via Bitquery’s GraphQL API. The one-in-ten transaction share counts transactions carrying a decoded TokenLaunched, CurveBuy or CurveSell, so it is a floor rather than a ceiling. The 31 August day count is partial. None of this is financial advice, and a 1.10% graduation rate is closer to a warning than an invitation.


Pons API on Robinhood Chain: How to Track the Pons Launchpad On-Chain was originally published in Coinmonks on Medium, where people are continuing the conversation by highlighting and responding to this story.

❌
❌