This document explains how a BBS sysop joins BBS-Coin, prepares reward data,
and publishes epochs.
It is intentionally practical and minimal.
If you run a BBS and want to distribute BBS-Coin to your users, this is the only
document you need.
Everything else is off-chain bookkeeping.
futureland.today)Deploys your distributor
BbsTreasury.deployDistributor(sysopOwner, bbsId, metadataURI)
Registers it
DistributorRegistry.register(...)
Funds it
BbsTreasury.fundDistributor(distributor, amount)
You receive a distributor address that is ready to use once funded.
At distribution time, produce:
[
{ "address": "0xUser1", "amount": "50000000000000000000" }
]
Rules:
- amount is base units (wei) BBS Token uses 18 decimals, so:
50 tokens = 50 × 10¹⁸ = 50000000000000000000
- One entry per address per epoch
- Amount is the total entitlement for that epoch
Solidity:
keccak256(abi.encodePacked(account, amount))
Ethers v6:
ethers.keccak256(
ethers.solidityPacked(["address","uint256"], [account, amount])
)
Any deviation breaks claims permanently.
You must persist:
epoch.jsonroot.jsonproofs.jsonLoss of these may prevent claims.
publishEpoch(root, uri)
Epochs are:
- Sequential
- Immutable
- Permanent
Users claim per epoch:
claim(epoch, amount, proof)
Unclaimed epochs do not expire.
Publish only what you are willing to make permanent.