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) --> ws
T2: is a short-term yield product, redeemable in less than 1 week (≤ 7 days) --> w7
T3: is a long-term yield product, redeemable in less than 1 month (8-30 days) --> w30
The weights should satisfy the condition ws+w7+w30=1.
Allocation rules
Sort vaults by descending yield vs duration score Si (see Formulae)
Fill Tier 2 weight up to the global cap c7. One-fourth of T2 allocations unlock every week and are constantly moved back to T1
Allocate the remainder to Tier 3 until the target length (12d) is reached
where c7 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:
A = total collateral (USDC + USDS)
Rd = net USP redemptions on the day d
APRi,τi= APR and epoch (days) of vault i
σw = daily standard deviation of redemptions (look-back W≈90d)
p = instant-service percentile (e.g. 97.5%)
To compute the instant-liquidity buffer (T1)
Statistical need --> L=zpσwH
where H= days promised instant liquidity (usually 1) and zp≈1.96forp=97.5%
Add operational cushion --> buffermin=L+κA
where κ≈1% of A (oracle lag, gas spikes)
Target balance --> BsUSDS=max(buffermin,Bmin)
Convert to portfolio weight ws∗=ABsUSDS
If the currentws<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 i using the formula
Si=1+λτiAPRi−fi
where fi is the annualized fee, and λ≈0.04 is a factor used to penalize long-term strategies.
T3 allocation should be larger than the target length (τtarget≈12 days)
1−ws∗∑iwiτi≤τtarget
where 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)>ε∣
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