Docs

How Balls works.

The jokes are on the front page. This is the serious part: what real devs commit to, exactly what happens to their SOL, what the smart contract can and can't do, who can still touch what, and how you can check it all yourself.

What is Balls?

Balls is a launchpad with exactly one rule: a founder can't launch a coin without putting their own SOL on the line.

Coins are created on pump.fun: same bonding curve, same liquidity, same charts. Balls doesn't run its own curve or its own token standard. What Balls adds is a bond. When you launch, you pick a market cap target and lock SOL behind it in a smart contract.

  • Hit the target within 48 hours and you can claim your SOL back.
  • Miss it and your SOL is used to buy your own coin on pump.fun, and everything bought is burned.

Why? Because "trust me, I'm not going to rug" is free to say. A bond isn't. It turns a promise into a stake: buyers can see, on-chain, how much the founder stands to lose if the coin doesn't go where they said it would.

What a bond is not. It is not a guarantee that the price goes up, that liquidity stays, or that the founder won't sell. It is a public signal that the founder put money where their mouth is, nothing more.

A bond, start to finish

1. Launch (one transaction)You fill in the coin (name, symbol, image), a target market cap and a bond amount. You sign one transaction that (a) creates the coin on pump.fun with you as its creator, and (b) locks your bond in the Balls escrow contract, recording the target and a 48-hour deadline.
2. Trade (up to 48 hours)The coin trades on pump.fun like any other. You can buy and sell it on Balls or on pump.fun itself, it's the same curve.
3a. Target reached: you claim your SOL backThe contract checks the coin's market cap live, on-chain. If it's at or above the target, you claim the bond back to your wallet. The coin carries on as normal.
3b. Deadline passes, target missed: burnThe contract buys your coin on pump.fun using your bond, then burns every token it bought. Supply shrinks, the SOL goes into the curve, and you get nothing back.

Every one of those steps is a public Solana transaction, and the coin page shows the on-chain accounts. The Verify section shows how to check them independently.

Target market cap

"Market cap" here is the number pump.fun itself shows: the coin's current price x its total supply. Every coin on pump.fun has a fixed supply of 1,000,000,000 tokens, so market cap is just price scaled up.

The contract reads it straight from the coin's pump.fun bonding-curve account on-chain, the same numbers the curve uses to price trades:

market cap (SOL) = virtual SOL reserves x total supply / virtual token reserves
  • You enter the target in US dollars (like 25k). At launch the site converts it to SOL using the live SOL price, and that SOL amount is what the contract records and checks. Market caps on the site are shown in dollars using the current SOL price, so a target's dollar value moves with SOL's price after launch.
  • A new coin starts at roughly 28 SOL of market cap (a few thousand dollars, depending on SOL's price). Your target must be higher than the coin's market cap at launch: a target below the starting line would be reached instantly, and the contract refuses it.
  • The launch page offers quick multipliers (2x, 3x ...) of the starting market cap, so you can see what you're signing up for.
  • If the coin graduates from the pump.fun curve (the curve fills and liquidity moves to PumpSwap, at very roughly 400 SOL of market cap), it counts as having reached any target. See What counts as "hit".

The collateral

  • Minimum: 0.01 SOL. There's no maximum. The more you put up, the louder the signal (and the more it hurts to miss).
  • Mandatory. The launch form won't build the transaction without a target and a bond. There is no "skip" button.
  • It's in SOL. The contract only accepts SOL as a bond.
  • One bond per coin, fixed at launch. You can't top it up, lower it, or cancel it afterwards.
  • The bond moves into a vault owned by the contract in the same transaction that creates the coin. If any part of that transaction fails, none of it happens: you never end up with a coin without a bond, or a bond without a coin.

On top of the bond, launching costs a small amount of SOL in network fees and account rent, paid to Solana and pump.fun. Balls takes no fee.

The 48 hours

The clock starts when your launch transaction lands and runs for 48 hours. The deadline is stored in the bond account on-chain, and the contract enforces it: nobody can burn a bond before its deadline.

The coin page shows the time left as a live countdown. After the deadline:

  • if the target is met, the bond stays yours to claim, and it can never be burned;
  • if the target is not met, the burn can be triggered, and an automated keeper does it. If the keeper isn't running, the Balls admin wallet can do it by hand.
If a burn never happens. Suppose an expired, unmet bond is still unburned 7 days after its deadline (for example because pump.fun changed its program and the burn can't run). The contract then lets the founder reclaim it. That grace period is long enough to fix a problem, and short enough that skipping the burn isn't a strategy.

What counts as "hit"

A bond counts as hit if, at the moment it's checked on-chain, either of these is true:

  • the coin's current market cap is at or above the target, or
  • the coin has graduated from the pump.fun bonding curve.

The check is a live snapshot of the coin's bonding curve. The contract has no record of every price the coin ever touched. In practice:

  • You can claim any time the coin is at or above the target while the bond is still active. That includes after the deadline, as long as nobody has burned it yet. The contract checks the live market cap when you claim.
  • So if your coin touches the target, claim right away. If it falls back below the target before you claim, the claim is refused.
  • A burn can only run when the market cap is below the target at that moment, so a coin that is sitting above its target can't be burned.
  • A target above the graduation market cap can only be met by graduating.

Founders can buy their own coin to push it toward the target. Nothing stops that: it costs real money (and pump.fun's fees), and buyers can see who holds what. A bond is a signal, and like any signal it can be gamed by someone willing to pay for it.

The burn

If the deadline passes and the target is not met, the contract does this in one transaction:

  1. Buys the coin on pump.fun with the bond (pump.fun's fees come out of it, like for any buyer). It protects itself with a minimum-tokens check so the bond isn't sold cheaply into a sudden price move.
  2. Burns every token it received, permanently destroying them, so the coin's total supply shrinks.
  3. Returns any small leftover (a few thousandths of a SOL held back for pump.fun's costs) to the founder.

Effect on the coin: the SOL of the bond ends up in the bonding curve, and the tokens it bought no longer exist. Everyone else's holdings are a slightly bigger slice of a smaller supply, on a curve with more SOL in it. The founder gets nothing back beyond that leftover.

Only two wallets can trigger the burn (the keeper and the Balls admin wallet). They can't choose where the money goes: the contract only ever spends the bond on that coin's pump.fun buy, and burns the result.

Trading & fees

  • The trade panel on each coin page sends a plain pump.fun buy or sell from your wallet, with a slippage guard (transactions fail rather than fill more than 5% worse than the estimate, plus pump.fun's fees). Balls adds nothing to the transaction.
  • You can equally trade the same coin directly on pump.fun.
  • Balls charges no fee on launches, trades or bonds.
  • pump.fun's own fees apply to trades, per pump.fun's rules. As the coin's creator, the founder also earns whatever creator fee pump.fun pays to creators. Balls does not touch it.
  • After a coin graduates from the curve, trading moves to PumpSwap. The Balls trade panel then points you to pump.fun.

Who can do what

Your bond is held by a smart contract (the Balls escrow program), in a vault that only that program can move. No person holds it. This is exactly what each party can and can't do:

WhoCanCan't
The founderClaim the bond back when the coin is at/above the target. Reclaim it if it sits unburned for 7 days after the deadline.Withdraw it any other way, cancel it, or change the target or deadline.
Keeper + Balls admin walletTrigger the burn of an expired bond whose target wasn't met.Withdraw the bond, send it anywhere, burn a bond before its deadline, or burn one whose target was met.
Anyone elseRead everything, trade the coin.Touch the bond.
Balls, as owner of the program's upgrade keyUpgrade the contract's code.(An upgrade could in principle change these rules. See below.)
The honest caveat: upgrades. Solana programs can be upgraded by a designated "upgrade authority". For now, that's the Balls admin wallet. That means Balls could, in principle, deploy a new version of the contract that behaves differently. Until that key is renounced or moved to a multisig (see What's next), you are trusting Balls not to do that. The program's source is in our repository, and the address of the deployed binary can be compared against it (see Verify).

Two other things to know: the contract has not been independently audited, and it depends on pump.fun's program, which Balls doesn't control.

Verify anything yourself

You don't have to take the site's word for anything. Everything is on-chain, and each coin page lists the accounts involved.

1. The bond

Every bond is an account owned by the Balls program, at a predictable address:

bond account    = PDA(["bond", coin mint], Balls program)
collateral vault = PDA(["vault", bond account], Balls program)   (a system account holding the SOL)

Open the bond account and the collateral vault on Solscan (both are linked on the coin page under "Receipts"). The vault's SOL balance is the collateral. The bond account records the founder, the coin, the target, the collateral amount, the deadline and the status (active, claimed, burned, refunded).

2. The outcome

A claim moves the vault's SOL to the founder in a transaction from the founder's wallet. A burn is a transaction from the keeper or admin wallet in which the vault buys the coin on pump.fun and the tokens are burned. The bond's status flips accordingly, and the site reads exactly that.

3. The contract itself

The escrow program's address is shown on every coin page and at the bottom of this section. Its source code is public in the project repository. To check that the deployed program matches the source, build it from source and compare its SHA-256 hash with the deployed binary's (solana program dump <program id> file.so, then hash the file).

The site only lists a coin if pump.fun's own bonding-curve account for it names the bond's founder as its creator, so a bond can only ever be posted by the wallet that actually launched the coin.

Risks & limits

  • New, unaudited contract. The Balls escrow program hasn't been independently audited. It has been tested on Solana's test network against the real pump.fun program, but bugs are possible and could lose or lock bonds.
  • Upgradeable for now. Balls holds the upgrade key, so the rules could be changed by a new version. This is a trust assumption until the key is renounced or moved to a multisig.
  • pump.fun dependency. The burn is a buy on pump.fun's program. If pump.fun changes that program, burns may fail until Balls updates. Founders can reclaim an expired, unburned bond after the 7-day grace period.
  • Live-snapshot targets. "Hit" is judged from the coin's market cap at the moment of the claim or burn. Claim as soon as you hit it.
  • A bond isn't a guarantee. It doesn't stop a founder from selling, and a founder can buy their own coin to reach the target.
  • Memecoin risk. Prices can go to zero. You can lose everything you put in, including the bond.
  • Not advice, not affiliated. Nothing here is financial advice. Balls is independent of pump.fun.

Full terms are on the Legal page.

What's next

  • Independent audit of the escrow contract.
  • Removing the upgrade risk: moving the upgrade key to a multisig, and later renouncing it once the program is proven, so the rules become permanent.
  • More checks on the burn path as pump.fun evolves.

Changes will be announced on the site before they take effect. Bonds already posted stay governed by the contract they were posted to.

FAQ

Can I launch without a bond?

No. That's the whole product. Every coin listed here has a founder with SOL behind it.

Do I need a pump.fun account?

No. Your Solana wallet signs the launch. The coin is created on pump.fun's program with your wallet as its creator.

Which wallets work?

Any Solana wallet that supports the Wallet Standard: Phantom, Solflare, Backpack and most others.

Will my coin show up on pump.fun?

It's a real pump.fun coin on-chain, and you can always open it by its mint address. Whether pump.fun's own front page lists it is up to pump.fun.

What if I hit the target but it dips before I claim?

The contract checks the live market cap at the moment you claim. If it has dipped below the target, the claim is refused. Claim as soon as you see "Target hit".

I hit the target after the 48 hours. Can I still claim?

Yes, as long as nobody has burned the bond yet. A burn only runs while the market cap is below the target, and the keeper checks regularly, so a bond that's below target at the deadline is normally burned soon after.

Can I add to, cancel or change my bond?

No. Target, bond and deadline are fixed when you launch.

What happens to my coin after a burn?

It keeps trading on pump.fun as normal. The burn just removes the tokens the contract bought from supply.

Can I put a bond on a coin I already launched on pump.fun?

Not right now. Bonds are created together with the launch.

Does Balls take a fee?

No. You pay Solana network fees and account rent, plus pump.fun's own trading fees.

What if Balls disappears?

The bond stays in the contract. If nobody burns an expired, unmet bond, you can reclaim it yourself 7 days after the deadline. You don't need Balls for that.

Can Balls take my bond?

Not through the contract as it is written: there is no instruction that lets Balls withdraw a bond. The remaining risk is a malicious upgrade to the contract, which is why the upgrade key is a trust assumption for now. See "Who can do what".

Is this financial advice?

No. It's a memecoin launchpad. You can lose everything.

For developers

Addresses

WhatAddress
Balls escrow program3VQsTJGWQ1L4t312R527475JKUuSjsbSjbQoKbFqKoQS
Balls admin (resolver) walletHE8Khn19yPTzFZTLcoZLZqRV1AWypnUJ4L4NoYLS66uw
pump.fun program6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P

Launch transaction

A single transaction, signed by the founder and the fresh coin mint:

1. pump.fun create_v2   (creator = founder, Token-2022 mint)
2. Balls create_bond    (target market cap in lamports, collateral in lamports)

create_bond checks that the founder is the creator recorded in pump.fun's bonding-curve account, that the coin hasn't graduated, that the target is above the current market cap, and that the collateral is at least 0.01 SOL. It then moves the collateral into the vault PDA.

Instructions

InstructionWhoWhat
create_bondfounderLocks the collateral against a target for 48 hours.
claim_bondfounderReturns the collateral when the curve's market cap is at/above the target (or the coin graduated).
resolve_bondkeeper / adminAfter the deadline, if the target is unmet: buys the coin on pump.fun (buy_exact_sol_in) with the vault's SOL and burns everything bought.
refund_stuckfounderReturns an unresolved expired bond 7 days after its deadline.
init_config, set_resolver, set_keeperupgrade authority / adminOne-time setup, and rotating the two wallets allowed to trigger burns.

Reading state

  1. Fetch all accounts of the Balls program with the Bond discriminator (Anchor: program.account.bond.all()).
  2. Read each coin's bonding curve (PDA ["bonding-curve", mint] under the pump.fun program): virtual_token_reserves @8, virtual_sol_reserves @16, token_total_supply @40, complete @48, creator @49. Market cap = vSol x supply / vToken.

The whole client is a static site: no backend, no database. The bond ledger is the blockchain.

Glossary

TermMeaning
BondThe SOL a founder locks behind their target. Also the on-chain record of it.
TargetThe market cap the founder commits to reaching within 48 hours.
Market capPrice x supply, read from pump.fun's bonding curve.
Bonding curvepump.fun's automatic pricing mechanism: price rises as people buy, falls as they sell.
GraduationWhen the curve fills and pump.fun moves the coin's liquidity to PumpSwap.
BurnPermanently destroying tokens so they leave the supply.
Escrow vaultThe account, owned by the Balls program, that holds a bond's SOL.
KeeperAn automated wallet that triggers due burns. It can't move funds anywhere else.
Upgrade authorityThe key allowed to replace a Solana program's code. Currently held by Balls.
Lamport1 / 1,000,000,000 of a SOL.