Portfolio Constraints

Overview

Building on the validation and risk management principles outlined earlier, this section details additional mechanisms employed by Term Strategy Vaults to enforce key portfolio constraints. These mechanisms ensure compliance with the protocol’s risk framework, focusing on:

  1. Position Concentration Limits

  2. Liquid Reserve Requirements

  3. Weighted Average Duration Caps

  4. RepoToken Collateral Requirements

Repo Token Validation

The validateRepoToken function operates within the validation framework previously described by performing checks specific to repoTokens before they are accepted into the portfolio.

function validateRepoToken(
    RepoTokenListData storage listData,
    ITermRepoToken repoToken,
    address asset
) internal view returns (bool, uint256)
  • Verifies contract against TermController

  • Validates purchaseToken against baseAsset

  • Ensures repoToken not already matured

  • Checks collateral backing against collateralParams

Concentration Limits

The _validateRepoTokenConcentration function operates to enforce position concentration limits, ensuring no single repoToken or group of positions disproportionately dominates the portfolio.

function _validateRepoTokenConcentration(
    address repoToken,
    uint256 repoTokenAmountInBaseAssetPrecision,
    uint256 assetValue,
    uint256 liquidBalanceToRemove
) private view
  • Maximum exposure per repo token

  • Portfolio-wide concentration checks

Reserve Requirements

The _liquidReserveRatio function operates to ensure the portfolio maintains adequate reserves for user withdrawals and ongoing operations.

function _liquidReserveRatio(uint256 liquidBalance) internal view returns (uint256)
  • Minimum liquidity maintenance

  • Reserve ratio calculations

  • Withdrawal availability checks

Maturity Management

The _calculateWeightedMaturity function ensures that the portfolio’s weighted average duration complies with the protocol’s duration caps.

function _calculateWeightedMaturity(
    address repoToken,
    uint256 repoTokenAmount,
    uint256 liquidBalance
) private view returns (uint256)
  • Weighted average maturity tracking

  • Maturity threshold enforcement

  • Portfolio duration management

Collateral Validation

Collateral requirements, previously introduced, are enforced through the collateralTokenParams field in the RepoTokenListData struct:

struct RepoTokenListData {
    mapping(address => uint256) collateralTokenParams;
}
  • Collateral type restrictions

  • Minimum collateral ratios

  • Collateral quality checks

Last updated