BBS-Coin

1. Overview

What is BBS-Coin?

BBS-Coin is an ERC-20 token system designed to incentivize participation in Bulletin Board Systems (BBSes). It is explicitly not marketed as a financial instrument or investment. Tokens represent points, reputation, participation, or governance weight depending on how a community chooses to use them.

Key properties:

ELI5

Think of BBS-Coin like arcade tickets:

Architecture

BbsToken (ERC-20)


     ↑ mint (mintToTreasury)

BbsTreasury (Safe-owned)


     ↓ fund (fundDistributor)

BbsMerkleDistributor (per BBS)


     ↓ claim (claim / claimFor)

Users

Core Contracts

Contract Purpose

BbsToken ERC-20 token

BbsTreasury Minting + distributor funding

DistributorRegistry Discovery + metadata

BbsMerkleDistributor Per-BBS reward distribution

2. Sysop Guide (How to Integrate a BBS)

What a Sysop Controls

A sysop:

A sysop does not:

Distributor Lifecycle (with code references)


    1.    Distributor is deployed by the Foundation

→ BbsTreasury.deployDistributor(sysopOwner, bbsId, metadataURI)


    2.    Distributor is registered for discovery

→ DistributorRegistry.register(...) (called internally by Treasury)


    3.    Distributor is funded with tokens

→ BbsTreasury.fundDistributor(distributor, amount)


    4.    Sysop publishes an epoch

→ BbsMerkleDistributor.publishEpoch(bytes32 root, string uri)


    5.    Users claim tokens

→ BbsMerkleDistributor.claim(epoch, amount, proof)

→ or gas-sponsored: claimFor(account, epoch, amount, proof)

Epoch Model

Merkle Leaf Definition (authoritative)

keccak256(abi.encodePacked(account, amount))

Ethers v6 equivalent:

keccak256(solidityPacked(["address","uint256"],[account, amountWei]))

Required Epoch Artifacts (must be preserved)

For each epoch, sysop tooling must persist:

If these artifacts are lost, users may be unable to claim even though the root exists on-chain.

3. Foundation / Treasury Operations

What the Foundation Controls

The Foundation (via Safe) is the only authority that:

→ BbsTreasury.mintToTreasury(amount)

→ BbsTreasury.fundDistributor(distributor, amount)

→ DistributorRegistry.register(...)

→ BbsTreasury.setDistributorEnabled(distributor, enabled)

→ BbsTreasury.revokeFromDistributor(...)

Token Setup

BbsTreasury.setToken(tokenAddress)

Safe Ownership

Recommended:

4. Long-Term Vision

Design Principles

Possible Future Extensions

Guiding Rule

BBS-Coin exists to make BBSes more fun — not to turn them into casinos.

Further Reading


← Back to Index