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_s

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

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

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

Allocation rules

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

  2. Fill Tier 2 weight up to the global cap c7c_7. 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_7 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:

  • AA = total collateral (USDC + USDS)

  • RdR_d = net USP redemptions on the day dd

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

  • σw\sigma_w = daily standard deviation of redemptions (look-back W90dW \approx 90d)

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


To compute the instant-liquidity buffer (T1)

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

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

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

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

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

If the current ws<wsw_s < w_s^* 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 ii using the formula

Si=APRifi1+λτiS_i = \dfrac{\text{APR}_i - f_i}{1 + \lambda \tau_i}

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

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

iwiτi1ws    τtarget\dfrac{\sum_i w_i \tau_i}{1 - w_s^{*}} \;\le\; \tau_{\text{target}}

where wi,maxw_{i, \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 (wswstarget)>ε| (w_s - w_{s_\text{target}}) > \varepsilon |

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

pp

Instant-redeem service level

97–99%

κ\kappa

Operational cushion

1–2 % A

λ\lambda

Converts “epoch-day” into APR penalty

0.03–0.05

τtarget\tau_{\text{target}}

Max weighted epoch

10–14 days

c7c_7

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

20–30 % A

wi,maxw_{i, \max}

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

off / 30 % A

Last updated