Skip to main content

Tranching markets do not use a fixed yield split. The market calculates utilization, then applies a return curve to determine how much Senior-side residual yield is paid to Junior for providing first-loss protection. juniorReturnShare=f(U)\text{juniorReturnShare} = f(U) The Senior share is the remainder: seniorReturnShare=1juniorReturnShare\text{seniorReturnShare} = 1 - \text{juniorReturnShare} All examples below use NAV units and ignore protocol fees for clarity.

Point Curve

The point curve is stored onchain as a PiecewiseLinearCurve. It defines explicit utilization points and Junior return shares. Between initialized points, the program linearly interpolates. If utilization U is between two initialized points (U_0, J_0) and (U_1, J_1), then: J(U)=J0+(J1J0)×UU0U1U0J(U) = J_0 + (J_1 - J_0) \times \frac{U - U_0}{U_1 - U_0} Where: Example point set: At 70% utilization: J(70%)=20%+(45%20%)×70%50%90%50%=32.5%J(70\%) = 20\% + (45\% - 20\%) \times \frac{70\% - 50\%}{90\% - 50\%} = 32.5\% If residual Senior-side gain is 100, Junior receives 32.5 and Senior receives 67.5.

Utilization-Guided Curve

The utilization-guided curve starts from a target Junior share at 90% utilization and lets that target shift over time while the market is in the Normal State. The target utilization is fixed at: U=90%U^* = 90\% The curve first measures signed distance from target: d(U)=UUU,UUd(U)=UU1U,U>U\begin{aligned} d(U) &= \frac{U - U^*}{U^*}, && U \le U^* \\ d(U) &= \frac{U - U^*}{1 - U^*}, && U > U^* \end{aligned} d(U) is negative below target and positive above target. While the market is in the Normal State, the target Junior share shifts with time: S=s×d(U)S = s \times d(U) Tnext=clamp(Tcurrent×eS×Δt,Tmin,1)T_{\text{next}} = \text{clamp}(T_{\text{current}} \times e^{S \times \Delta t}, T_{\text{min}}, 1) The contract also computes the midpoint target: Tmid=clamp(Tcurrent×eS×Δt/2,Tmin,1)T_{\text{mid}} = \text{clamp}(T_{\text{current}} \times e^{S \times \Delta t / 2}, T_{\text{min}}, 1) Then it uses Simpson averaging for the target used in the current return calculation: Tavg=Tcurrent+4×Tmid+Tnext6T_{\text{avg}} = \frac{T_{\text{current}} + 4 \times T_{\text{mid}} + T_{\text{next}}}{6} Where: The final Junior share applies either the low-utilization discount or full-utilization premium: J(U)=clamp(Tavg+d(U)×A,0,1)J(U) = \text{clamp}(T_{\text{avg}} + d(U) \times A, 0, 1) Where A is zeroUtilizationJuniorShareDiscount when d(U) < 0, and fullUtilizationJuniorSharePremium when d(U) >= 0. If the market is in the Recovery Period, the target does not shift. In that case, T_avg and T_next both equal T_current.
Onchain sync mutates junior_share_at_target_utilization and last_target_shift_ts. SDK read previews use the loaded target value without advancing this time-shift state.

Waterfall Examples

Loss transfer

Assume Senior has 800 raw NAV and Junior has 200 effective NAV protecting Senior. As long as the loss fits inside available Junior protection, Senior remains whole. After Junior protection is exhausted, residual loss reduces Senior effective NAV.

Gain distribution

Assume Senior has 20 of unrecovered impermanent loss, Junior has 30 of unrecovered impermanent loss, Senior-side gain is 100, and the curve returns a 40% Junior share. Gains repair outstanding loss balances before they become distributable yield. Only the residual amount is split by the return curve.