Skip to main content

Overview

Folios use a semi-permissioned rebalancing mechanism to change their basket composition. The process is designed to work effectively even under timelock delays, with multiple roles coordinating to achieve optimal execution.

Rebalance Lifecycle

Every rebalance follows a structured lifecycle:

1. Start Rebalance

The REBALANCE_MANAGER initiates a rebalance with target parameters:

2. Auction Launcher Window (Restricted Period)

After starting, there’s a restricted period where only the AUCTION_LAUNCHER can open auctions. This ensures they have first opportunity to provide pricing precision.
The restricted period automatically extends if the AUCTION_LAUNCHER is actively using it, with a minimum 120s buffer before unrestricted access.

3. Unrestricted Period

After the restricted period expires, anyone can open auctions using spot values and initial prices. This prevents single-point-of-failure on the AUCTION_LAUNCHER.

4. Time-to-Live (TTL)

Rebalances have a TTL (max 4 weeks) that controls how long they can run. Multiple auctions can occur during this time.
An auction can start at ttl - 1 and run beyond the rebalance’s TTL.

Rebalance Targets

The REBALANCE_MANAGER configures target ranges that define the rebalancing path.

Rebalance Limits

Define how many Basket Units the Folio should target:
  • low - Target for buying (minimum BU per share)
  • spot - Point estimate used by unrestricted callers
  • high - Target for selling (maximum BU per share)

Basket Weights

For each token, weights define the target composition:
If RebalanceControl.weightControl is enabled, the AUCTION_LAUNCHER can progressively narrow weight ranges to maintain target allocations.

Price Ranges

For each token, governance provides conservative price estimates:
Prices should be set so the asset’s price on secondary markets will likely remain within range even after timelock delays. Maximum allowable range is 100x.

Weight Control

When RebalanceControl.weightControl is enabled, the AUCTION_LAUNCHER can adjust basket weights within the governance-approved range.

Use Cases

Weight Control Enabled:
  • Folios targeting specific % breakdown at all times
  • Dynamic allocation adjustments during rebalancing
  • Responsive to market conditions
Weight Control Disabled:
  • Folios with single monthly/quarterly targets
  • Pure rebalance limit-based strategies
  • More governance control

Progressive Narrowing

The AUCTION_LAUNCHER can progressively narrow ranges but cannot backtrack:

Rebalance Completion

A rebalance is considered “completed” when all range deltas reach zero:
The AUCTION_LAUNCHER should end the rebalance when completion is achieved or when continuing would leak value.

Starting a Rebalance

Querying Active Rebalance

Check if a rebalance is ongoing and view its parameters:

Ending a Rebalance

The REBALANCE_MANAGER, AUCTION_LAUNCHER, or DEFAULT_ADMIN_ROLE can end a rebalance early:
End the rebalance if prices move outside approved ranges to prevent value leakage.

Best Practices

Set price ranges wide enough to account for:
  • Timelock delay execution
  • Expected volatility
  • Block-to-block price movement
  • Slippage on secondary markets
Avoid ranges that are too wide (approaching 100x) as this increases MEV risk.
Choose TTL based on:
  • Expected number of auctions needed
  • Individual auction lengths
  • Buffer for unexpected delays
  • Governance response time
Typical range: 1-4 weeks
Set the window to:
  • Give sufficient time for AUCTION_LAUNCHER to act
  • Account for network conditions
  • Balance between control and permissionlessness
Typical range: 1-24 hours