BStockFun

How it works

A launch has three states, and never goes backwards

Bonding. A new token mints one billion units to the launchpad. 800M of them sell on a constant-product curve with virtual reserves, which is what lets a launch start at a real price with zero real liquidity behind it. Anyone can buy or sell at any point.

Filled. The moment the whole 800M allocation is bought, the curve closes. The buy that crosses the line is capped exactly at the allocation and the unused portion is refunded, so a launch lands on its target instead of overshooting.

Graduated. The raised quote asset and the remaining 200M tokens seed a PancakeSwap V3 pool, and the position NFT goes into a locker with no withdraw path. Graduation is a separate permissionless transaction — anyone can trigger it.

Why graduation is its own transaction

It would be simpler to graduate inside the final buy. It would also mean that any failure in pool creation — a hostile quote token, a fee tier someone pre-seeded at an absurd price — bricks trading for everyone holding that launch. Splitting it means a failure is contained: the curve is closed, the funds are still in the contract, and graduation can be retried or routed to a different fee tier.

What "locked liquidity" means here

The locker has no withdraw function, no transfer function and no upgrade hook. Its owner can authorise a launchpad to register positions and nothing else — it cannot move funds, unlock a position, or change where harvested fees go. The only value that can leave is accrued swap fees, and their only destination is the fee router.

Where fees go

Curve trades pay 1%. Creators keep 10% of that on their own launch, accrued on-chain and claimable whenever they like. Graduation takes 3% of the raise, once. The rest splits on-chain: curve revenue is 60% buy-and-burn of $BSTOCK and 40% treasury; harvested LP fees are 60% buy-and-burn of graduated launches, 20% $BSTOCK, 20% treasury.

Keepers trigger buybacks but cannot choose what gets bought: the platform flywheel is pinned to $BSTOCK in its constructor, and the ecosystem flywheel can only burn launches the launchpad itself registered at graduation. A keeper picks timing and swap route, nothing more.

Quote assets

A launch can be paired against any ERC-20 governance has whitelisted — BNB, stablecoins, BTCB, a tokenised equity, another launch. Each quote asset carries its own starting price and graduation threshold, because one unit of USDT and one unit of BTCB are not the same amount of money. Whitelisting is deliberate: an arbitrary token with transfer hooks or a rebasing supply would corrupt curve accounting for every launch priced against it.

Running it yourself

Deploy the contracts with npm run deploy:testnet in contracts/, then point this app at the launchpad with NEXT_PUBLIC_LAUNCHPAD_ADDRESS. That is the only address the frontend needs — the fee router, locker, both flywheels, the platform token and the quote whitelist are all read back off the launchpad, so a redeploy is a one-line change and the UI can never show a mismatched set of contracts.

Risks worth stating plainly

These contracts have not been audited. Bonding-curve launches are a category with a very high base rate of loss, and pairing against a volatile quote asset adds that asset's risk on top of the launch's own. Locked liquidity stops the LP being pulled; it does not stop a price going to zero, and it does not stop a holder with a large position from selling into you.