Skip to main content

Overview

Reserve Folio uses a role-based access control (RBAC) system to separate concerns and enable secure, flexible governance. Each role has specific permissions designed to balance security with operational flexibility.

Role Constants

Roles are defined as bytes32 constants:
Reserve Folio uses OpenZeppelin’s AccessControlEnumerable for role management, allowing enumeration of all role members.

Core Roles

DEFAULT_ADMIN_ROLE

The primary owner and administrator of the Folio.

DEFAULT_ADMIN_ROLE

Expected Holder: Timelock of Slow Folio GovernorPermissions:
  • Add/remove basket assets
  • Set fees (TVL, mint, folio self fee)
  • Configure fee recipients
  • Set auction parameters (max auction length)
  • Configure other roles (grant/revoke)
  • Set mandate (mission statement)
  • Set Folio name
  • Configure trusted filler registry
  • Set rebalance control parameters
  • Enable/disable permissionless bids
  • Configure trade allowlist
  • Deprecate the Folio
  • Close auctions and rebalances

Key Functions

DEFAULT_ADMIN_ROLE has extensive control. It should ALWAYS be held by a timelock with significant delay (7-14 days).

REBALANCE_MANAGER

Controls the rebalancing process and auction lifecycle.

REBALANCE_MANAGER

Expected Holder: Timelock of Fast Folio GovernorPermissions:
  • Start rebalances with target parameters
  • End rebalances early
  • Close individual auctions

Key Functions

Responsibilities

  • Define token inclusion and weights
  • Set conservative price ranges
  • Configure basket limits (BU/share targets)
  • Set auction launcher window duration
  • Set rebalance TTL
  • Monitor ongoing rebalances
  • End rebalances if market conditions change dramatically
  • Coordinate with AUCTION_LAUNCHER on execution
  • Ensure price ranges remain appropriate
REBALANCE_MANAGER typically has a shorter timelock than DEFAULT_ADMIN_ROLE (1-3 days) to enable responsive rebalancing.

AUCTION_LAUNCHER

Provides precision and responsiveness during rebalancing.

AUCTION_LAUNCHER

Expected Holder: EOA or Multisig (semi-trusted)Permissions:
  • Open auctions during restricted period
  • Select subset of tokens for each auction
  • Adjust basket weight ranges (if weightControl enabled)
  • Adjust price ranges (if priceControl != NONE)
  • Adjust basket limits (within governance range)
  • Set individual auction lengths
  • End auctions and rebalances

Key Functions

Trust Assumptions

The AUCTION_LAUNCHER is semi-trusted and can act maliciously within bounds:Should Do:
  • Open auctions promptly during restricted period
  • Progressively narrow BU limits to DCA responsibly
  • End rebalances when prices move outside ranges
  • Provide accurate price ranges within governance bounds
  • If weightControl: Maintain original rebalance intent
  • If priceControl=PARTIAL: Provide ranges including current clearing price
  • If priceControl=ATOMIC_SWAP: Fill atomically and end rebalance immediately
Should NOT Do:
  • Close auctions/rebalances dishonestly to deny rebalancing
  • Set prices to leak value (especially with ATOMIC_SWAP)
  • Deviate from governance intent
  • Go offline indefinitely (auctions can proceed permissionlessly)

Price Control Impact

No Price ControlAUCTION_LAUNCHER cannot modify prices from governance-set ranges.
  • Most restrictive
  • Auction length must be maxAuctionLength
  • Safest for untrusted AUCTION_LAUNCHER

Revocation

If AUCTION_LAUNCHER behaves maliciously:

BRAND_MANAGER

An optional, permissionless role for off-chain use.

BRAND_MANAGER

Expected Holder: Marketing/Brand team (optional)Permissions: NONE (on-chain)Purpose: Off-chain identification of brand managers for marketing, social media, and community management.
BRAND_MANAGER has no on-chain permissions. It exists purely for off-chain tooling and identification purposes.

Role Management

Roles are managed using OpenZeppelin’s AccessControl:

Granting Roles

Revoking Roles

Renouncing Roles

Querying Roles

Typical Role Configuration

A well-configured Folio typically has:
1

DEFAULT_ADMIN_ROLE

Holder: Slow Governor’s Timelock (7-14 day delay)Purpose: Critical parameter changes and emergency actions
2

REBALANCE_MANAGER

Holder: Fast Governor’s Timelock (1-3 day delay)Purpose: Start and manage rebalances
3

AUCTION_LAUNCHER

Holder: Trusted EOA or Multisig (no timelock)Purpose: Responsive auction execution
4

BRAND_MANAGER

Holder: Brand/Marketing team (optional)Purpose: Off-chain identification

Multi-Holder Roles

Roles can have multiple holders:
Multiple DEFAULT_ADMIN_ROLE holders reduce security. Only add additional admins for emergency recovery purposes.

Role Transition

Transitioning roles should be done carefully:
1

Grant New Role

2

Test New Holder

Verify the new role holder can perform their duties before removing the old one.
3

Revoke Old Role

Emergency Scenarios

Compromised AUCTION_LAUNCHER

1

Immediate Revocation

2

End Active Rebalance

3

Grant New Role

Lost AUCTION_LAUNCHER Access

If AUCTION_LAUNCHER goes offline:
No immediate action needed. After the restricted period expires, auctions can be opened permissionlessly via openAuctionUnrestricted().

Lost DEFAULT_ADMIN_ROLE Access

Critical scenario. If DEFAULT_ADMIN_ROLE access is lost and no backup exists:
  • Cannot change fees
  • Cannot add/remove assets
  • Cannot configure other roles
  • Cannot upgrade (if upgradeable)
Prevention:
  • Always use a timelock controlled by governance
  • Consider a backup timelock with longer delays
  • Document recovery procedures

Best Practices

DEFAULT_ADMIN_ROLE:
  • MUST be a timelock (7-14 days)
  • Controlled by slow, careful governance
  • Multiple signers if using multisig governance
REBALANCE_MANAGER:
  • SHOULD be a timelock (1-3 days)
  • Controlled by faster governance
  • Same voting token as DEFAULT_ADMIN_ROLE
AUCTION_LAUNCHER:
  • CAN be EOA or multisig
  • Should be trusted but replace if malicious
  • Consider multisig with 2-of-3 or 3-of-5
  • Longer delays for higher privilege roles
  • Balance security with responsiveness
  • Document timelock parameters
  • Test timelock execution before mainnet
  • Monitor all role-gated function calls
  • Set up alerts for privilege escalation
  • Review role membership periodically
  • Have revocation procedures ready
  • Document emergency response plans
  • Document role holders publicly
  • Explain role responsibilities
  • Maintain contact information
  • Update documentation when roles change
  • Be transparent about role holder identities

Role Verification

Verify role configuration before mainnet deployment: