LogoLogo
Launch App ->
  • Overview
  • Product
    • Credit Vaults
      • Tranching
      • Live vaults
    • USP
      • Allocation
      • Risks
      • FAQs
    • Users
      • Lenders
        • Verification
        • Guides
          • Onboarding
          • Deposit
          • Redeem
      • Curators
      • Borrowers
  • Developers
    • Addresses
      • Product
        • Credit Vaults
        • USP
      • Governance
    • Integrators
    • API
      • Campaigns
      • Chains
      • Operators
      • Token blocks
      • Tokens
      • Transactions
      • Vaults
      • Vault blocks
      • Vault categories
      • Vault epochs
      • Vault performances
      • Vault types
    • Security
      • Audits
  • Resources
    • Media kit
Powered by GitBook
On this page
  • Allocation rules
  • Initial parameters
Export as PDF
  1. Product
  2. USP

Allocation

This section describes how the USP board allocates collateral between the whitelisted yield sources. These are classified according to some liquidity tiers

  • T1: is a cash equivalent product, instantly redeemable (0-2 days) --> wsw_sws​

  • T2: is a short-term yield product, redeemable in less than 1 week (≤\leq≤ 7 days) --> w7w_7w7​

  • T3: is a long-term yield product, redeemable in less than 1 month (8-30 days) --> w30w_{30}w30​

The weights should satisfy the condition ws+w7+w30  =  1.w_s + w_{7} + w_{30} \;=\; 1.ws​+w7​+w30​=1.

Allocation rules

  1. Sort vaults by descending yield vs duration score SiS_iSi​ (see Formulae)

  2. Fill Tier 2 weight up to the global cap c7c_7c7​. One-fourth of T2 allocations unlock every week and are constantly moved back to T1

  3. Allocate the remainder to Tier 3 until the target length (12d) is reached

where c7c_7c7​ limits the exposure to T2 products: too small allocation decreases the yield, but too large one risks draining liquidity if many users redeem within one week.

Formulae

Given some key parameters:

  • AAA = total collateral (USDC + USDS)

  • RdR_dRd​ = net USP redemptions on the day ddd

  • APRi,τiAPR_{i, \tau_i}APRi,τi​​= APR and epoch (days) of vault iii

  • σw\sigma_wσw​ = daily standard deviation of redemptions (look-back W≈90dW \approx 90dW≈90d)

  • ppp = instant-service percentile (e.g. 97.5%)


To compute the instant-liquidity buffer (T1)

  1. Statistical need --> L=zp σw HL = z_p\,\sigma_w\,\sqrt{H}L=zp​σw​H​

    where H=H = H= days promised instant liquidity (usually 1) and zp≈1.96  for p=97.5%z_p \approx 1.96 \; \text{for} \: p = 97.5\%zp​≈1.96forp=97.5%

  2. Add operational cushion --> buffermin⁡=L+κA\text{buffer}_{\min}=L+\kappa_Abuffermin​=L+κA​ where κ≈1%\kappa \approx 1\%κ≈1% of AAA (oracle lag, gas spikes)

  3. Target balance --> BsUSDS=max⁡(buffermin⁡, Bmin⁡)B_{\text{sUSDS}}=\max \left(\text{buffer}_{\min},\,B_{\min}\right)BsUSDS​=max(buffermin​,Bmin​)

  4. Convert to portfolio weight ws∗=BsUSDSAw_s^{*}=\dfrac{B_{\text{sUSDS}}}{A}ws∗​=ABsUSDS​​

If the current ws<ws∗w_s < w_s^*ws​<ws∗​ then move funds into T1, otherwise sweep the surplus out of the best-scoring vault.

To allocate the surplus, we compute a yield vs duration scoring for every vault iii using the formula

Si=APRi−fi1+λτiS_i = \dfrac{\text{APR}_i - f_i}{1 + \lambda \tau_i}Si​=1+λτi​APRi​−fi​​

where fif_i fi​ is the annualized fee, and λ≈0.04\lambda \approx 0.04λ≈0.04 is a factor used to penalize long-term strategies.

T3 allocation should be larger than the target length (τtarget≈12\tau_{\text{target}} \approx 12τtarget​≈12 days)

∑iwiτi1−ws∗  ≤  τtarget\dfrac{\sum_i w_i \tau_i}{1 - w_s^{*}} \;\le\; \tau_{\text{target}}1−ws∗​∑i​wi​τi​​≤τtarget​

where wi,max⁡w_{i, \max}wi,max​ is an optional exposure limit to any single vault or protocol. It should be used only when two or more independent vaults exist.

A keeper routine should be set to rebalance funds either weekly or whenever ∣(ws−wstarget)>ε∣| (w_s - w_{s_\text{target}}) > \varepsilon |∣(ws​−wstarget​​)>ε∣

def rebalance():
    A = current_AUM()
    sigma_w = stdev(redemptions, window=W)
    L = z_p * sigma_w * sqrt(H)
    B_s = max(L + kappa * A, B_min)
    w_s_target = B_s / A

    scores = [
        (i, (apr[i] - fee[i]) / (1 + lambda_ * tau[i]))
        for i in vaults
    ]
    scores.sort(key=lambda x: x[1], reverse=True)

    alloc = {"sUSDS": w_s_target}
    remaining = 1 - w_s_target
    w7 = 0

    for i, _ in scores:
        if tau[i] <= 7 and w7 < c7:                 # fill T2
            x = min(c7 - w7, remaining)
            alloc[i] = x
            w7 += x
            remaining -= x
        elif remaining > 0:                         # fill T3
            alloc[i] = remaining
            remaining = 0
        if remaining <= 0:
            break

    execute_onchain_swaps(alloc)

Initial parameters

The USP board can modify the allocation parameters. The default values are:

Variable
Description
Default value

Instant-redeem service level

97–99%

Operational cushion

1–2 % A

Converts “epoch-day” into APR penalty

0.03–0.05

Max weighted epoch

10–14 days

Upper bound on the total weight of the 7-day vault sleeve

20–30 % A

off / 30 % A

PreviousUSPNextRisks

Last updated 11 days ago

Optional per-vault cap. Use once the number of vaults is

ppp
κ\kappaκ
λ\lambdaλ
τtarget\tau_{\text{target}}τtarget​
c7c_7c7​
wi,max⁡w_{i, \max}wi,max​
≥3\geq 3≥3