zkBNB
Launch token

Roots and harvest.

Each coin's roots hold BNB, filled by 0.50% of every trade on that coin and capped at 50 BNB by default. Anything above the cap goes to that coin's holder-reward pot, so nothing is lost. Harvest value:

bnb = roots[coin] × tokensBurned ÷ totalSupply()

totalSupply() already excludes burned tokens and includes tokens still on the curve or in the PancakeSwap pool, so your share is measured against every unburned token. A harvest shrinks the roots and the supply by the same proportion: the BNB behind each token never goes down from a harvest. A harvest that would pay 0 wei reverts.

How this drives the rest of zkBNB is on The flywheel.

Two ways to harvest

  • Public harvest: harvest(coin, tokens, minBnb) burns from your wallet and pays you. The receipt shows on Rings.
  • Shielded harvest: harvestShielded(coin, tokens, minBnb, pubKey, blinding) burns the same way and pays into the shielded pool as a note owned by pubKey. This transaction still shows your wallet, the amount and the pubKey. What becomes private is where that BNB goes afterwards. The note can be recovered from the DepositFor event, and the app also keeps the blinding in your browser.

Harvesting needs an approval first: Roots burns your coins with burnFrom, which needs an allowance. Roots is exempt from the pair-tax, so the full amount is burned.

What the admin can and cannot do

The admin can pause a coin's roots. While paused, that coin's new roots share goes to a fixed recovery address. The admin cannot withdraw roots BNB, and neither can the deployer. The only way BNB leaves the roots is a holder burning coins.