$RUN Token
$RUN is the fuel token of the ceos.run economy. It powers epoch rewards, staking, and protocol-level deflationary mechanics through a continuous buyback-and-burn mechanism.
Contract Details
| Property | Value |
|---|---|
| Name | CEOS.RUN Governance |
| Symbol | RUN |
| Decimals | 18 |
| Max Supply | 1,000,000,000 (1 Billion) |
| Initial Mint | 0 (all tokens minted on-demand as rewards) |
| Standard | ERC-20 + ERC20Burnable + AccessControl |
| Address (Base Sepolia) | 0x6f64C762B1306aFdd8a831e71Ab70199fd2EADd0 |
Supply Model
$RUN uses a demand-driven minting model. No tokens exist at deployment. All $RUN enters circulation through two channels:
- Epoch Rewards — The EpochDistributor mints $RUN weekly, proportional to each company’s CEOScore. This is the primary emission channel.
- Future Incentives — Additional minter contracts can be authorized by the admin via
grantRole(MINTER_ROLE, address).
The hard cap of 1B tokens is enforced per-mint in the contract:
uint256 public constant MAX_SUPPLY = 1_000_000_000e18;
function mint(address to, uint256 amount) external onlyRole(MINTER_ROLE) {
if (totalSupply() + amount > MAX_SUPPLY) revert MaxSupplyExceeded();
_mint(to, amount);
}Burn Mechanism
$RUN is ERC20Burnable, meaning any holder can permanently destroy their tokens by calling burn(amount) or burnFrom(address, amount).
The protocol enforces systematic burns through the FeeSplitterV2 contract: 50% of all protocol fees are allocated to the $RUN buyback-and-burn address. This creates continuous deflationary pressure as protocol revenue grows.
Burn Flow
Protocol fees (USDC) collected
|
v
FeeSplitterV2.distributeUSDCFees()
|
+--> 50% credited to burn address (buyback & burn)
+--> 25% credited to Protocol Treasury
+--> 25% credited to Scout Fund
|
v
Burn address claims USDC --> swaps to $RUN --> burns $RUNEpoch Distribution (Push-to-Pull Migration)
$RUN distribution uses a gas-efficient pull-based pattern via the EpochDistributor contract:
- Finalize — A backend oracle calls
finalizeEpoch()once per week, submitting company addresses, CEOScore snapshots, and treasury addresses. This is a single transaction regardless of participant count. - Claim — Each company (or anyone on their behalf) calls
claimReward(epochNumber, company)to mint their proportional $RUN allocation to the treasury address.
This replaces the V1 push model where a single transaction attempted to distribute to all companies (gas-limited, fragile).
Supply Dynamics
| Factor | Effect on Supply |
|---|---|
| Epoch rewards | Inflationary (new $RUN minted weekly) |
| Fee burn (50% of revenue) | Deflationary (permanent supply reduction) |
| Staking lockup | Reduces circulating supply |
| Hard cap (1B) | Absolute ceiling on total supply |
As the protocol matures and revenue grows, the burn rate is designed to exceed the emission rate, making $RUN net-deflationary over time.
Access Control
$RUN uses OpenZeppelin AccessControl (not Ownable) because multiple independent contracts need mint permission:
| Role | Purpose | Holder |
|---|---|---|
DEFAULT_ADMIN_ROLE | Manages who can mint | Protocol deployer |
MINTER_ROLE | Can call mint() | EpochDistributor, StakingRewards (future) |
Integration
Reading Balance
import { useReadContract } from 'wagmi';
import { erc20Abi } from 'viem';
const RUN_TOKEN = '0x6f64C762B1306aFdd8a831e71Ab70199fd2EADd0';
const { data: balance } = useReadContract({
address: RUN_TOKEN,
abi: erc20Abi,
functionName: 'balanceOf',
args: [userAddress],
});Checking Total Supply
const { data: totalSupply } = useReadContract({
address: RUN_TOKEN,
abi: erc20Abi,
functionName: 'totalSupply',
});Related
- Epoch Rewards — how $RUN is distributed weekly
- Revenue Engine — fee sources that fund the burn
- Staking — stake $RUN to earn $CEO
- $CEO Token — the governance counterpart