Skip to main content

Contract Architecture

Saffron Vaults consist of four contract types: factories, vaults, adapters, and bearer tokens.

VaultFactory / RestrictedVaultFactory

  • Deploys new vaults and adapters from stored bytecode implementations
  • Maintains protocol-level settings such as:
    • feeBps (protocol fee in basis points)
    • feeReceiver (address receiving protocol fees)
  • Registers and tracks all deployed instances with associated metadata
  • RestrictedVaultFactory extends VaultFactory and:
    • Restricts all vault and adapter creation to onlyOwner
    • Restricts initialization and configuration flows to onlyOwner

UniV3Vault

  • Core vault contract that coordinates fixed side and variable side deposits
  • Starts automatically when both fixed and variable sides reach capacity
  • Once started, funds are locked until maturity
  • Enables fixed side positions to convert from claimToken to fixedBearerToken via claim() after vault start
  • Settles Uniswap V3 fee earnings at maturity and:
    • Distributes variable side yield via variableBearerToken
    • Mints protocol fees in variableBearerToken (held by vault for feeReceiver to claim)
  • Allows early withdrawals only before the vault has started; no withdrawals after start until maturity

UniV3LimitedRangeAdapter

  • Connects a vault to a specific Uniswap V3 pool over a defined tick range
  • Mints, manages, and burns the Uniswap V3 position NFT on behalf of the vault
  • Provides functions to:
    • Add/remove liquidity
    • Collect and return underlying liquidity and accumulated trading fees
  • Enforces:
    • Liquidity tolerance bounds (to protect against misconfiguration)
    • Pool authenticity checks (ensuring the correct Uniswap V3 pool is used)
  • Handles early capital return for fixed side withdrawals before the vault starts

UniV3FullRangeAdapter

  • Extends UniV3LimitedRangeAdapter with full-range tick configuration
  • Automatically sets tick range to MIN_TICK and MAX_TICK during initialization
  • Provides the same functionality as UniV3LimitedRangeAdapter but covers the entire price range

VaultBearerToken

  • ERC-20 token contract used for all vault position tokens
  • Three instances created per vault:
    • claimToken — represents the initial fixed side deposit
    • fixedBearerToken — represents the fixed side position after claiming
    • variableBearerToken — represents variable side deposits and share of trading fees
  • Minting and burning restricted to the owning vault contract