Skip to main content

Overview

Price control determines how much authority the AUCTION_LAUNCHER has over auction pricing within the bounds set by the REBALANCE_MANAGER. The three modes provide different tradeoffs between decentralization, execution quality, and MEV risk.

Price Control Modes

NONE: Governance-Only Pricing

Behavior

  • AUCTION_LAUNCHER cannot modify price ranges
  • All auctions use the initial price ranges set by REBALANCE_MANAGER
  • Auction length is fixed to maxAuctionLength
  • Most decentralized but least flexible

Configuration

Use Case

Ideal for Folios that:
  • Prioritize maximum decentralization
  • Can tolerate wider price ranges set via governance
  • Have long timelock delays where precision matters less
  • Rebalance infrequently (e.g., quarterly)

Example: Opening Auction with NONE

With PriceControl.NONE, the AUCTION_LAUNCHER cannot adapt to market movements. If prices move outside the governance-approved range, value leakage to MEV searchers is possible. The AUCTION_LAUNCHER should monitor markets and end the rebalance if necessary.

PARTIAL: Subset Price Control

Behavior

  • AUCTION_LAUNCHER can narrow price ranges within initial bounds
  • Cannot expand ranges beyond what governance approved
  • Can set auction length between MIN_AUCTION_LENGTH and maxAuctionLength
  • Enables better execution but introduces MEV risk

Configuration

Use Case

Ideal for Folios that:
  • Want to balance decentralization and execution quality
  • Have a semi-trusted AUCTION_LAUNCHER (multisig)
  • Need to adapt to market conditions within approved bounds
  • Prioritize better pricing over absolute trustlessness

Example: Narrowing Price Ranges

Calculating Start and End Prices

For a token pair, auction prices are calculated from individual token ranges:

MEV Risk

With PARTIAL control, a dishonest AUCTION_LAUNCHER can:
  • Set auction start prices that leak value to MEV searchers
  • Cause immediate value extraction when auctions begin
  • Cannot guarantee they receive the leaked value (goes to MEV bots)
The AUCTION_LAUNCHER should act in good faith and price auctions to clear near the efficient market price.

ATOMIC_SWAP: Full Price Control

Behavior

  • All capabilities of PARTIAL mode
  • Additionally can set startPrice == endPrice (flat price)
  • Enables atomic swaps without the 30-second warmup period
  • Allows AUCTION_LAUNCHER to internalize MEV

Configuration

Use Case

Ideal for Folios that:
  • Fully trust the AUCTION_LAUNCHER to execute at fair prices
  • Want to eliminate MEV leakage entirely
  • Can verify fair execution through other means (e.g., bundle inspection)
  • Prioritize execution quality above all else

Example: Atomic Swap Execution

Best Practices for ATOMIC_SWAP

When using ATOMIC_SWAP, the AUCTION_LAUNCHER MUST:
  1. Fill the auction atomically in the same transaction as opening it
  2. End the rebalance immediately after all fills complete
  3. Execute as a bundle to prevent frontrunning
Failure to follow this pattern allows the AUCTION_LAUNCHER to extract value AND benefit from it directly.

Choosing a Price Control Mode

*Risk is high if misused, but can be mitigated with proper execution

Validation Rules

NONE Mode

PARTIAL Mode

ATOMIC_SWAP Mode

RebalanceControl Structure

The weightControl flag is independent and can be combined with any price control mode. See Basket Weights for details.

Governance Considerations

  • Price control mode cannot be changed during an active rebalance
  • Set via setRebalanceControl() which requires DEFAULT_ADMIN_ROLE
  • Should align with the trust level of your AUCTION_LAUNCHER
  • Can be different for different Folios in the same ecosystem