Skip to main content

Overview

All protocol and app fees flow through the same contracts but are routed differently based on their FeeKind.

FeeKind Routing

Every fee is tagged with a FeeKind that determines where it goes:
FeeKindRouting
LAUNCH_FEE100% treasury
TRADING_FEE80% contributors / 20% treasury
TRANSFER_TAX80% contributors / 20% treasury
CONTENT_SALE80% contributors / 20% treasury
TOURNAMENT_FEE80% contributors / 20% treasury
OTHER80% contributors / 20% treasury
Default treasury take: 20% (2000 bps), configurable per-app by governance.

FeeCollector

The accounting layer. It tracks pending fee balances indexed by (appId, FeeKind, asset).
  • Receives ELTA deposits via depositElta(appId, kind, amount)
  • Receives app token deposits for transfer tax
  • Sweeps accumulated balances to FeeSwapper via sweep(appId, kind, asset)
  • Sweeping is permissionless (anyone can trigger it)

FeeSwapper

The routing layer (implements IFeeRouterV2):
  1. If the app is paused in AppRegistry, 100% goes to treasury
  2. If the fee kind is LAUNCH_FEE, 100% goes to treasury
  3. Otherwise: treasury gets its take, the rest goes to ContributorSplit
Contributors receive their share through pull-based claims, not automatic distribution. They must actively claim their payouts from the ContributorSplit contract.

ContributorSplit

Each app has a ContributorSplit contract deployed at registration:
  • Shares-based: each contributor has a share weight; payouts are proportional
  • Max 200 contributors (factory default, governance-configurable)
  • Pull claims: contributors call release(asset, account) to withdraw
  • Owner Safe controlled: only the app’s Safe can modify contributors

Next

Bonding Curve Basics

Price discovery mechanics

Community Systems

Governance and contributor splits

App Tokens

Token design and distribution