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)
| Function | Meaning |
|---|---|
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.