# BSCT Token

`BiscottiToken` is the protocol's reward token. All farm emissions originate
here, and it is the default reward asset for coffee pools and trading battles.

| Property | Value |
| --- | --- |
| Name / Symbol | Biscotti / **BSCT** |
| Standard | ERC-20 + ERC-20 Permit (EIP-2612) |
| Max supply | 1,000,000,000 BSCT (hard cap) |
| Access model | OpenZeppelin `AccessControl` |
| Address (ARC Testnet) | `0x6AD77e153f6D4Dd7c0F2e194A385e625274dE794` |
| Source | `src/token/BiscottiToken.sol` |

## Minting model

BSCT has no fixed distribution schedule baked into the token itself. Instead,
minting is gated behind `MINTER_ROLE`, which is granted only to the two
emission contracts:

* [`MasterChefERC20`](/farms/classic-farms) mints per-block rewards for ERC-20
  LP staking.
* [`MasterChefV3`](/farms/v3-farms) mints in bulk via `upkeep()` to fund
  fixed-duration reward periods for V3 position staking.

The hard cap is enforced at the token level — no combination of minters can
push total supply past 1B BSCT.

:::warning[Admin surface]
Any address holding `MINTER_ROLE` can mint up to the cap. The deployer's
`MINTER_ROLE` is revoked after granting it to the MasterChef contracts, and
`DEFAULT_ADMIN_ROLE` is the mechanism that controls future grants. See
[Security Notes](/developers/security).
:::

## Interface

```solidity
// Only callable by addresses holding MINTER_ROLE
function mint(address to, uint256 amount) external onlyRole(MINTER_ROLE);

// Role management (DEFAULT_ADMIN_ROLE)
function grantRole(bytes32 role, address account) external;
function revokeRole(bytes32 role, address account) external;

// EIP-2612 gasless approvals
function permit(
    address owner, address spender, uint256 value,
    uint256 deadline, uint8 v, bytes32 r, bytes32 s
) external;
```

## Granting the minter role

After deploying farm contracts, the admin grants `MINTER_ROLE` to both
MasterChefs:

```bash
cast send $BISCOTTI_TOKEN \
  "grantRole(bytes32,address)" \
  $(cast keccak "MINTER_ROLE") $MASTERCHEF_ERC20 \
  --rpc-url $RPC_URL --private-key $PRIVATE_KEY

cast send $BISCOTTI_TOKEN \
  "grantRole(bytes32,address)" \
  $(cast keccak "MINTER_ROLE") $MASTERCHEF_V3 \
  --rpc-url $RPC_URL --private-key $PRIVATE_KEY
```

## BSCT Tokenomics

Our goal at Biscotti is to build a decentralized ecosystem that prioritizes
flexibility and sustainability for the BSCT community, liquidity providers
and Biscotti supporters.

Biscotti's target is an annual deflation rate of at least **~4% per year**
and a total BSCT supply reduction of **~20% within five years of mainnet
launch**. To achieve this, Biscotti implements a **buy-back-and-burn**
strategy, ultimately leading to a deflationary BSCT token.

### What drives burns

Burns are driven by every product in the Biscotti ecosystem — specifically, a
large share of fees from:

| Product | Burn contribution |
| --- | --- |
| **Spot trading — stable pools** | Up to 50% of every stable swap fee (the protocol's admin-fee share) |
| **Spot trading — concentrated liquidity** | A protocol share of V3 trading fees (activating at mainnet) |
| **Trading Battles** | Unclaimed season rewards recovered after each claim deadline |
| **Coffee Pool campaigns** | A share of partner campaign fees |

Burns are executed on a fixed weekly cadence and published, so the burn rate
is independently auditable.

### How emissions are managed

Emissions are carefully managed to ensure liquidity is directed to the most
productive pools and products. Biscotti's focus is on scaling volume growth
by optimizing liquidity incentives and boosting revenue per BSCT spent —
every emission decision revolves around creating real revenue and long-term
success for the entire community.

Products that receive BSCT emissions:

| Destination | Mechanism |
| --- | --- |
| **V3 farms** (concentrated liquidity) | `MasterChefV3.upkeep()` reward periods |
| **Classic farms** (stable LP) | `MasterChefERC20` per-block emissions |
| **Coffee Pools** | Funded pool budgets |
| **Ecosystem growth** | Trading battles, partnerships, listings |

Live weights are always readable on-chain via allocation points — see
[Farms](/farms).

### Does BSCT have a hard cap?

Yes. BSCT has a hard cap of **1,000,000,000 (1B)**, enforced directly in the
token contract — no minter, present or future, can exceed it. Emission
contracts mint *within* the cap; the cap itself can only decrease through
burns, never increase.

### How to confirm BSCT supply for yourself

1. Open the BSCT token contract
   (`0x6AD77e153f6D4Dd7c0F2e194A385e625274dE794`) on the ARC block explorer
   and check how much BSCT is held by the burn address — that is the total
   amount removed from circulation forever, impossible to ever retrieve.
2. Subtract the burned amount from the **Total Supply** the explorer shows.

This gives you the actual circulating BSCT supply.

### How is BSCT supply reduced?

The goal is for deflation to run **higher than emission** — more BSCT leaving
circulation than being produced — by building deflationary mechanisms into
every Biscotti product. Buy-back-and-burn activates with ARC Mainnet, with
emission reductions phased in as fee revenue grows: emissions bootstrap
liquidity early, revenue sustains rewards later. See the
[Roadmap](/roadmap).

## Utility

| Use | Where |
| --- | --- |
| Farm rewards | [Farms](/farms) — emissions for LP and V3 position staking |
| Coffee pool rewards | [Coffee Pools](/coffee-pools) — earned on staked tokens |
| Trading battle prizes | [Trading Battles](/trading-battles) — Merkle-claimed season rewards |
| Governance (planned) | Emission weights and burn parameters — see [Roadmap](/roadmap) |
