Docs
How Bloom works, down to the contract.
Every address, privilege, fee and dependency Bloom has, and how to check each one yourself. Network: BNB Chain.
Overview
Bloom launches coins on BNB Chain. Each coin trades on its own curve inside the BloomMarket contract, and each has its own BloomTreasury. Every buy and every sell pays 1% of the trade, in BNB, to that coin’s treasury in the same transaction. The treasury stakes its BNB through BNB Chain’s native staking contract, StakeHub, where validator rewards are added to the stake and compound by themselves.
Nothing is held off chain. A coin’s name, logo and links are written into its launch transaction, and every figure in the app is read from the contracts or from Chainlink.
Contracts
- BloomMarket
- 0x1B5be61829DE48a81419B06D4A600C2D7b5B2E9F
One contract for every coin. Launches coins (deploying each coin and its treasury), runs each coin’s curve, quotes trades and routes fees. Holds each curve’s BNB reserve, accounted per coin.
- BloomTreasury
- One per coin, deployed by the market at launch; its address is in the coin’s Launched event and on its page in the app. Receives the coin’s trading fees and stakes them. It has no function that sends BNB out.
- BloomToken
- One per coin. A plain ERC-20, 18 decimals, whole supply minted once to the market. No owner, no mint, no burn hook, no transfer tax, no blacklist. The market may move a holder’s coins only inside that holder’s own sell, so selling needs no approval.
- StakeHub
- 0x0000000000000000000000000000000000002002
BNB Chain’s system staking contract (BEP-294), at 0x0000000000000000000000000000000000002002 on mainnet and testnet. Not Bloom’s code.
Fees
- Treasury fee: 1% of every buy and every sell (TREASURY_FEE_BPS = 100). A constant in the code: no one can change it.
- Bloom’s fee: 0% (protocolFeeBps = 0). Fixed when the market was deployed and capped at 1% by the code. It can’t be changed after deployment.
- Launch: gas only (launchFee, fixed at deployment).
- Fees are taken in BNB inside the trade itself, so there is no swap and no separate transaction.
- The creator’s own first buy at launch pays the same 1% as everyone else’s.
The market curve
Each coin trades against a constant-product curve: price = (virtual BNB + real BNB) ÷ coins in the curve. Every curve starts with a virtual reserve of 6 BNB, which is also the coin’s starting market cap, and the whole supply (1,000,000 to 1,000,000,000,000 coins, chosen at launch).
The curve is the coin’s permanent market. Coins don’t graduate to another exchange, because trades elsewhere wouldn’t pay the treasury. Anyone may still open a pool somewhere else; trades there pay Bloom’s treasury nothing.
Solvency is structural: the curve’s invariant never shrinks, so selling back every coin in circulation can never ask for more BNB than the curve holds. This is fuzz-tested.
Staking
- Treasuries delegate through StakeHub, BNB Chain’s native staking (BEP-294). Rewards are added to the validator’s stake pool, so each share is worth more BNB over time: compounding needs no claim and no transaction.
- Minimum 1 BNB. StakeHub refuses smaller delegations, so a treasury waits until it holds 1 BNB, then stakes all of it.
- stake() is open to anyone. Bloom runs a keeper that calls it on a schedule, but it holds no special rights: the function does the same thing whoever calls it.
- The validator is chosen by Bloom’s owner from active, unjailed BNB Chain validators, and applies to the next stake of every treasury.
- If staking fails (StakeHub paused, a validator jailed), the call records StakeFailed with the reason and the BNB stays in the treasury for the next attempt.
- Treasuries never unbond. StakeHub’s 7-day unbonding period never applies, because there is no undelegate call in the treasury.
- Staking carries validator risk: a misbehaving validator can be slashed, which lowers the stake’s value. The dashboard would show this as negative yield.
What the owner can and can't do
The market has one owner key. Ownership transfers in two steps (transfer, then accept).
Can
- Pause new launches and buys, in an emergency.
- Choose the validator treasuries stake with next.
- Move a treasury's existing stake to another validator (redelegate). It stays in the treasury's name.
- Transfer ownership.
Can’t
- Pause sells. Holders can always exit.
- Withdraw BNB from any treasury, or from any curve.
- Move anyone's coins.
- Change any fee, the virtual reserve or the supply rules.
- Mint coins, or upgrade the contracts (they aren't upgradeable).
Prices
Coin prices come from each curve on chain. Dollar figures use one source only: Chainlink’s BNB / USD feed on BNB Chain (0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE on mainnet). If it can’t be read, the app shows BNB only.
Free BNB Chain RPC endpoints don’t serve historical state, so charts are rebuilt from events: trades for price charts, fee deposits and stakes for treasury charts, with the live contract reading as the latest point.
Verify it yourself
Every figure in the app can be rebuilt from these events, and each line in the app links to its transaction on BscScan.
| Contract | Event | Records |
|---|---|---|
| BloomMarket | Launched(token, creator, treasury, name, symbol, supply, virtualBnb) | A coin, its treasury and its creator |
| BloomMarket | Metadata(token, description, image, website, twitter, telegram) | The coin's description, logo and links |
| BloomMarket | Trade(token, trader, isBuy, bnbAmount, tokenAmount, treasuryFee, protocolFee, bnbReserve, tokenReserve) | Every buy and sell, with its fees and the curve after it |
| BloomTreasury | FeeDeposited(amount, feesReceived) | A trading fee arriving |
| BloomTreasury | Staked(validator, amount, shares, principal) | BNB delegated to a validator |
| BloomTreasury | StakeFailed(validator, amount, reason) | StakeHub refused a stake; the BNB stayed |
| BloomTreasury | Redelegated(from, to, shares) | Stake moved between validators |
| BloomTreasury | Received(from, amount) | BNB sent directly (a gift) |
The contracts have 28 tests, including fork tests against live BNB Chain mainnet that delegate a treasury through the real StakeHub, receive a real reward distribution and redelegate. They have not been audited. See risks.