Documentation

Everything about VARO, in one place.

varo.fun is a token launchpad on Stable Mainnet. Mint an ERC-20 in seconds and trade it on Uniswap V3 from the first block. Its liquidity is locked forever. No presale, no team allocation — every token launches the same way.

Overview

varo.fun is a place to launch and trade tokens on Stable Mainnet. Browse launches, open any token to see its market, holders, and trades, and buy or sell straight from your wallet.

varo.fun never holds your funds. Every launch and trade is a transaction your wallet asks you to approve.

Key facts
  • Names and symbols can be copied — always check the token address.
  • Prices come from each token’s Uniswap V3 pool — trading is on Uniswap from the first block.
  • Launches can be volatile, illiquid, or lose all value.

Launch lifecycle

Creating a launch deploys the token and lists it directly into Uniswap V3 in a single transaction. Every token has a fixed supply of 1,000,000,000 and lists immediately — the entire supply is the liquidity.

  1. 01

    Create

    The token is minted with a fixed supply through the VaroLaunchFactory and starts trading on Uniswap V3 in the same transaction.

  2. 02

    Trade on Uniswap V3

    Buys and sells route straight through the token’s Uniswap V3 pool. A brief anti-snipe window caps early buys per wallet; after it expires, trading is unrestricted.

  3. 03

    Graduation milestone

    Once paired reserves reach 8,400 USDT0, the token is flagged graduated — a milestone read from the factory, not a migration.

  4. 04

    Locked liquidity & creator fees

    The LP NFT is held permanently by the VaroLaunchLocker, so liquidity can’t be pulled. The creator keeps earning their share of the pool’s trading fees.

Fair launch

No presale and no team allocation. 100% of the supply seeds the Uniswap V3 pool at launch and the LP NFT is locked forever — the protocol takes only a flat launch fee and a share of the pool’s trading fees.

Token addresses

Every token launched through VARO carries a signature in its contract address: it ends in b0a7 — which reads BOAT (0 for O, 7 for T), matching the sail mark.

0x5eaf…c0deb0a7

This is a real, on-chain property, not a display trick. The factory deploys each token with CREATE2, so its address is fully determined by a salt. Before you launch, the app searches for a salt whose resulting address ends in b0a7and confirms it against the factory’s own predictTokenAddress — so the deployed address always matches what you were shown.

What it does and doesn’t change

The suffix is purely a recognizable mark that a token was launched through VARO — it has no effect on supply, trading, fees, or security. Finding it adds a brief moment before the wallet prompt; if a match can’t be found the launch still proceeds with a standard address rather than being blocked.

Trading and pricing

Price comes from the token’s Uniswap V3 pool and moves with every swap. The amount you actually receive can differ from the quote — slippage sets how much movement you accept. During the anti-snipe window, early buys are capped per wallet.

Price
The current Uniswap V3 pool price for one token.
Market cap
Price multiplied by circulating supply.
FDV
Price multiplied by the full 1B token supply.
Price impact
The pool price movement caused by your trade size.
Slippage
The maximum execution movement your transaction accepts.
Graduation
Paired reserves toward the 8,400 USDT0 threshold.

Graduation

A launch is flagged graduated once the paired USDT0reserves in its locked pool reach the threshold. The default is 8,400 USDT0, and the progress line tracks how close a launch is.

The pool exists from the first block — the entire supply is placed as one-sided liquidity and the LP NFT is locked in the locker. Graduation adds nothing onchain; it simply marks that enough paired USDT0 has accumulated. Nothing migrates.

Graduation only confirms the threshold was reached. It is not a quality signal and does not guarantee future liquidity, price, or an exit.

Fees and burns

There is no bonding-curve trade fee. Protocol revenue is the creator/protocol split of the token’s Uniswap V3 LP fees, plus a flat launch fee. The split is snapshotted per token at launch.

Creator
70% of Uniswap V3 LP fees
Protocol
30% of Uniswap V3 LP fees
Protocol → Buyback
80% of the protocol share
Protocol → Dev + Marketing
10% + 10% of the protocol share

The creator earns their share of the locked pool’s Uniswap V3 trading fees, claimable any time through the locker.

Protocol revenue

The protocol’s 30% LP-fee share plus flat launch fees fund a buyback and operations, fanned out to dev, marketing, and buyback wallets by a FeeSplitter.

Buyback
80% of protocol fees, used to buy and burn
Operations
20% toward dev + marketing and infrastructure

Risk disclosures

Tokens launched through varo.fun 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.

varo.fun is an interface, not investment advice or a representation of token quality.

Integration

A minimal, verifiable surface.

varo.fun is a monorepo of independent services. The chain is the source of truth; everything else reads from it.

Frontend · Next.js
Trading UI, explore & analytics; wagmi + RainbowKit.
Contracts · Solidity
VaroLaunchFactory, per-token VaroLauncherToken, VaroLaunchLocker.
Indexer · Ponder
Turns factory & token events into a GraphQL API.
Price API · ElysiaJS
Buckets trades into candles, streams live prices over SSE.
Media · self-hosted IPFS
Token images/metadata pinned to a Kubo node, served by CID.
Market · Uniswap V3
Where every token lives as locked concentrated liquidity.

Network

varo.fun runs on Stable Mainnet. Every token trades in a Uniswap V3 pool quoted against wvUSDT from the first block.

Network
Stable Mainnet
Chain ID
988
Native asset
USDT0
Public RPC
https://rpc.stable.xyz
Pool fee
10000 (1%)
Launch supply
1,000,000,000 (1e9)
Graduation target
8,400 USDT0

Contracts

Deployed addresses on Stable Mainnet. Per-token VaroLauncherTokentokens are deployed by the factory — read a token’s address from any launch.

VaroLaunchFactory
Launchpad entry point
VaroLaunchLocker
Locked LP NFTs + fee claims
VaroTradeRouter
One-tx native buys and sells
Wrapped native · wvUSDT
Pair asset for every launch pool
Swap router (SwapRouter02)
All buys and sells

Onchain events

For a trust-minimized integration, index the factory’s TokenDeployedevent to discover tokens, then index each pool’s Swap events. Onchain events are the authoritative source of truth.

// Discover launches from the factory, then index each pool's swaps.
const logs = await client.getLogs({
  address: "0xA6c902d3370FE900e5cE0ce6c0DB7cC460975611",
  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: "earliest",
  toBlock: "latest",
});

// Authoritative onchain sources of truth:
//   Factory:  TokenDeployed · TokenLaunched
//   Token:    Transfer (holder balances)
//   Pool:     Swap (every buy/sell — price & volume)
//   Locker:   FeesClaimed (creator/protocol LP fee splits)

Reading token state

Every launch token is self-describing onchain. Read its metadata and pool directly from the token contract, with no off-chain source required.

import { createPublicClient, http } from "viem";
import VaroLauncherTokenABI from "./VaroLauncherToken.json";
import VaroLaunchFactoryABI from "./VaroLaunchFactory.json";

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(),
});

// The token is self-describing; graduation status comes from the factory.
const [info, pool, grad] = await Promise.all([
  client.readContract({ address: token, abi: VaroLauncherTokenABI, functionName: "getTokenInfo" }),
  client.readContract({ address: token, abi: VaroLauncherTokenABI, functionName: "liquidityPool" }),
  client.readContract({ address: factory, abi: VaroLaunchFactoryABI, functionName: "graduationStatus", args: [token] }),
]);
// grad: [pairedPrincipal, threshold, graduated]  — distance = threshold - pairedPrincipal
// Read live price from the pool's slot0 (sqrtPriceX96).

Social links, metadata URL, and creator are exposed as public getters on the token itself. Read live price from the Uniswap V3 pool’s slot0, and graduation from the factory’s graduationStatus.

Support

Integrating varo.fun? If you’re indexing launches, deriving prices, wiring trades, or verifying onchain state, we can help you get it right.

Versioning

Deployed contracts are immutable. New versions ship as new factory and locker addresses, listed under Contracts.

← Back to varo.fun