Overview
ballpit.io is a place to launch and trade tokens on Stable Mainnet. You can browse launches, inspect any token's details, and trade straight from your wallet.
ballpit.io is non-custodial and never holds your funds. Every launch and trade is a transaction your wallet asks you to approve.
How launches work
Creating a launch deploys the token and its trading pool in a single transaction. The pool's liquidity is locked automatically.
Every token trades directly against USDT0 in one pool. There is no bonding curve and no later migration. Buys and sells happen in that same pool from the moment the token launches.
- 01
Create
One billion tokens are minted and the USDT0 pool goes live in the same transaction.
- 02
Trade
Buys and sells run against USDT0 in the locked pool and move the price.
- 03
Graduate
The launch graduates once 4.2 USDT0 of paired principal is reached, and trading continues in the same pool.
Each launch uses a fixed supply of one billion tokens, a 1% pool fee, and a 0.0005 USDT0 launch fee.
Trading and pricing
Every token trades against USDT0 in its own liquidity pool. The price shown is the live pool price, and it moves with every trade. The amount you receive can differ from the quote; slippage sets how much movement your transaction accepts.
- Price
- The current pool price for one token.
- Market cap
- Price multiplied by circulating supply.
- FDV
- Price multiplied by the full token supply.
- Price impact
- The pool movement caused by the size of your trade.
- Slippage
- The maximum execution movement your transaction accepts.
- Liquidity
- Assets available in the pool around the current price.
Graduation
A launch graduates once the paired principal in its locked pool reaches 4.2 USDT0.
Graduation only confirms that the threshold was reached. It is not a quality signal and does not guarantee future liquidity, price, or an exit.
Trading continues in the same pool after graduation. Nothing moves or migrates.
Fees and burns
Trading generates liquidity fees in both the token and USDT0. The creator receives 70% and the protocol receives 30%. This split is snapshotted when the token launches and cannot change afterward.
- Current launches
- Creator 70% · protocol 30%
- Immutable per launch
- Split is snapshotted at creation
Creator fees accrue in the token's locked position and can be claimed through the ballpit.io interface.
The protocol uses its fee share to buy the platform token TETHER, then sends that TETHER to an explicit burn/sink contract. USDT0 itself is not burned.
price × (total supply − burned supply)Protocol revenue
An automated TWAP uses 80% of protocol fees for TETHER buybacks. The remaining 20% supports protocol operations.
- Buyback
- 80% of protocol fees, executed as an automated TWAP
- Operations
- 20% of protocol fees for infrastructure and operations
Community takeovers
When a token's original creator steps away, its community can request a community takeover, or CTO. A CTO is an administrative transfer of the token's social presence and, where the contracts allow it, the creator fee payout.
The token, its pool, and its locked liquidity are unaffected. A CTO is not an endorsement or a statement about a token's safety, quality, or value.
Risk disclosures
Tokens launched through ballpit.io are user-created and experimental. Review the token address, creator, liquidity, holder concentration, and transaction preview before signing.
- Prices can move quickly and liquidity can be thin.
- Similar names and images can represent unrelated tokens.
- Smart contracts, wallets, RPCs, and indexers can fail.
- Displayed values are estimates, not execution guarantees.
ballpit.io is an interface, not investment advice or a representation of token quality.
Integration
A minimal, verifiable integration surface.
Read from contracts and index factory and pool events for a trust-minimized source of truth. The live addresses and start block are published below.Network
This build targets Stable Mainnet. Tokens pair directly with the six-decimal USDT0 token, while transaction gas is paid with the network's native USDT0 balance. No WETH-style wrapping step is required.
- Network
- Stable Mainnet
- Chain ID
- 988
- Native gas asset
- USDT0 (18 decimals)
- Public RPC
https://rpc.stable.xyz- Explorer
- stablescan.xyz
- Block time
- ~0.7 seconds
- Pool fee
- 10000 (1%)
- Launch fee
- 0.0005 USDT0
- Supply
- 1,000,000,000 (1e9)
- USDT0 quote token
0x779Ded0c9e1022225f8E0630b35a9b54bE713736
The 0.0005 launch fee and 4.2 graduation threshold are literal numeric ports from WETH to USDT0 and have not received an independent economics review. Stable-specific balance and allowance semantics also require care, and USDT0 should not be sent to the zero address.
Contracts
These immutable contracts are deployed on Stable Mainnet and passed the fork and live integration suites. They have not received an independent security audit. Factory start block: 32968091.
Onchain events
Index the launcher's TokenLaunchedevent, register each emitted pool, then index the pool's Swap events. There is no migration event because launches continue trading in the same pool.
import { createPublicClient, http, parseAbiItem } from "viem";
const client = createPublicClient({
chain: {
id: 988,
name: "Stable Mainnet",
nativeCurrency: { name: "USDT0", symbol: "USDT0", decimals: 18 },
rpcUrls: { default: { http: ["https://rpc.stable.xyz"] } },
},
transport: http(),
});
const factory = "0x590fbfED60F046519Db053e6B3AFd59e195fE403";
const launches = await client.getLogs({
address: factory,
event: parseAbiItem(
"event TokenLaunched(address indexed token, address indexed deployer, address indexed dexFactory, address pairToken, address pool, uint256 dexId, uint256 launchConfigId, uint256 positionId, uint256 restrictionsEndBlock, uint256 initialBuyAmount)"
),
fromBlock: 32968091n,
toBlock: "latest",
});Use token ordering and signed pool amounts to derive buy and sell direction. Backfill logs in bounded block ranges from the launcher's published start block.
Reading token state
Each launch token is self-describing. Read metadata and the canonical pool from the token, then read immutable launch parameters from the factory that created it.
import { parseAbi } from "viem";
const tokenAbi = parseAbi([
"function name() view returns (string)",
"function symbol() view returns (string)",
"function decimals() view returns (uint8)",
"function totalSupply() view returns (uint256)",
"function logo() view returns (string)",
"function description() view returns (string)",
"function liquidityPool() view returns (address)",
"function socials() view returns (string twitter, string telegram, string discord, string website, string farcaster)",
]);
const [name, symbol, decimals, pool] = await Promise.all([
client.readContract({ address: token, abi: tokenAbi, functionName: "name" }),
client.readContract({ address: token, abi: tokenAbi, functionName: "symbol" }),
client.readContract({ address: token, abi: tokenAbi, functionName: "decimals" }),
client.readContract({ address: token, abi: tokenAbi, functionName: "liquidityPool" }),
]);Pricing and graduation
Derive price from the pool's slot0. Because USDT0 is the quote asset, the pool ratio is already dollar-denominated. Graduation is the paired principal divided by the 4.2 USDT0 threshold.
const [sqrtPriceX96] = await client.readContract({
address: pool,
abi: poolAbi,
functionName: "slot0",
});
const ratio = Number(sqrtPriceX96) / 2 ** 96;
const token1PerToken0 = ratio * ratio;
const priceInUsdt0 = isToken0 ? token1PerToken0 : 1 / token1PerToken0;
const supplyTokens = Number(supply) / 1e18;
const marketCapUsd = priceInUsdt0 * supplyTokens;
// USDT0 is the quote asset, so no ETH/USD oracle conversion is required.
const [pairedPrincipal, threshold, graduated] = await client.readContract({
address: factory,
abi: factoryAbi,
functionName: "graduationStatus",
args: [token],
});
const progress = Number(pairedPrincipal) / Number(threshold);Reference deployment
Token: 0xD20d33fD1D1c08Ac0F66f4957910FEcb889E732c. Pool: 0x13C0Ca7056e89aADb5888463e3cB18E6d462c32C. Position 2817 is held by the permanent locker.
Support
This is a public, unaudited beta. Integration support, production contacts, verified source artifacts, and monitoring have not been configured.
Treat deployed contracts as immutable. Future versions should ship as new factory and locker addresses with explicit start blocks.
Terms and attribution
Onchain data is public and free to read. This beta is provided as is, without warranties, and does not imply affiliation with Pons, Stable, Tether, or any deployed protocol.
- Do not present this beta as audited.
- Do not imply a partnership, endorsement, or official status.
- Interfaces, RPCs, indexers, and deployed contracts may fail.