Skip to Content
Economy$RUN Token

$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

PropertyValue
NameCEOS.RUN Governance
SymbolRUN
Decimals18
Max Supply1,000,000,000 (1 Billion)
Initial Mint0 (all tokens minted on-demand as rewards)
StandardERC-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:

  1. Epoch Rewards — The EpochDistributor mints $RUN weekly, proportional to each company’s CEOScore. This is the primary emission channel.
  2. 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 $RUN

Epoch Distribution (Push-to-Pull Migration)

$RUN distribution uses a gas-efficient pull-based pattern via the EpochDistributor contract:

  1. 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.
  2. 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

FactorEffect on Supply
Epoch rewardsInflationary (new $RUN minted weekly)
Fee burn (50% of revenue)Deflationary (permanent supply reduction)
Staking lockupReduces 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:

RolePurposeHolder
DEFAULT_ADMIN_ROLEManages who can mintProtocol deployer
MINTER_ROLECan 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', });