Skip to main content

FeeRegistry & Treasury

FeeRegistry

contracts/src/core/FeeRegistry.sol — the single governance surface. Every other contract reads its configuration from here; nothing else has an owner with meaningful power.

Views (read by tokens/processor/factory)

FunctionMeaning
reserveAsset()USDG — the fee-conversion and RFV denomination
router()The v2-style swap router used by the FeeProcessor
protocolTreasury()Recipient of the fixed 10% cut, launch fees, and 1% launch supply
protocolToken()$IPAD — unset (0x0) until the token launches
maxFeeBps()Global fee cap (1000)
launchFeeWei()Optional native fee per launch
isAssetAllowed(address)Stock allow-list membership
isPaused()Guardian pause state

Governance setters (owner, Ownable2Step)

setAsset / setAssets (allow-list), setRouter, setProtocolTreasury, setProtocolToken, setLaunchFeeWei, setMaxFeeBps, setGuardian.

Pause semantics

setPaused(bool) — callable by owner or guardian. Pausing blocks new launches and fee conversions only. It can never block a holder's claim() or an RFV redeem() — exit paths are unpausable by construction.

Treasury (interim protocol fee sink)

contracts/src/core/Treasury.sol — a plain Ownable2Step vault that currently receives:

  • the fixed 10% USDG cut of every conversion,
  • the 1% of supply minted at each launch,
  • native launch fees.

It exposes withdraw(token, to, amount), withdrawNative(to, amount), and migrate(successor, tokens[]).

The $IPAD migration path

The protocol token ($IPAD) is not deployed yet — it will be distributed to participants later. The redeemable versions (ProtocolToken.sol, ProtocolTreasury.sol) are kept in-repo, tested, and un-deployed. Because the fee recipient is a mutable registry address, migration needs no core redeploy:

1. Deploy ProtocolToken ($IPAD) + ProtocolTreasury (redeemable)
2. registry.setProtocolTreasury(newTreasury)
3. registry.setProtocolToken(ipad)
4. oldTreasury.migrate(newTreasury, [usdg, ...indexTokens])

From then on, fee flow accrues to the $IPAD-redeemable treasury with no interruption to any live index token.