The Perpetual Negative Rate Hedge
Users of this product are running borrow loop spreads outside of Cardinal. They have taken on leveraged exposure to the carry rate and want the right to yield when it turns negative.
The Perpetual Negative Rate Hedge is a perpetual right to yield below a strike of 0% carry rate.
The buyer has a right to yield earned by LPs from the same borrow loop, where LP yield is market dependent. Delivered coverage is limited by that yield, the position buffer, and available pool NAV. It is funded by a streaming premium the buyer preloads into a gas tank.
Position Inputs
The buyer specifies:
- notional size matching the size of their external borrow loop spread
- coverage leverage
L, from1xto10x - initial gas tank
Coverage leverage controls how aggressively the position pays out during negative carry periods. A higher L means larger payouts but also a faster-draining buffer during stress.
Fees
The Perpetual Negative Rate Hedge uses a streaming premium.
The buyer preloads a gas tank. The gas tank is not LP pool capital. It only becomes pool value as premium is debited.
Each hour, the premium is the actuarially-fair cost of the coverage held:
gross_premium = expected negative-carry claims × (1 + premium_load) / 0.90
The premium scales with the coverage leverage L (more protection → more access to
the leveraged loop yield → proportionally more premium) and is charged continuously
while the policy is open, so premium income covers expected claims with a margin
(after 90/10 routing, the LP still has positive expected underwriting margin).
premium_load is defined LP-net: at 0.5, the LP retains 50% above expected
claims after the treasury split. breach_base × L × (1 + premium_load) / 0.90
is a calm-window floor reference that keeps the reserve funded through long positive-carry stretches. The buyer keeps
paying to keep coverage open; as the funded reserve grows, a buffer shortfall
becomes progressively less likely.
The premium is debited from the gas tank each tick. When the gas tank cannot cover the premium, the position lapses. The buyer can top up at any time.
Debited premium routes 90/10 to LP NAV and treasury.
Launch values:
premium_load = 0.5
sUSDe breach_base = 0.249%
wstETH breach_base = 0.218%
Payout
The payout side works through a buffer that builds gradually.
Each hour that carry is positive, the position accrues a share of that yield into a buffer. When carry goes negative, the position pays out of that buffer up to a cap.
A 30-day ramp limits payouts in the first month as an anti-gaming measure.
The buffer is also capped by the pool's available NAV. In extreme stress scenarios where the pool itself is under pressure, delivered coverage compresses.
Target payout:
target_payout = abs(gross_carry_t) * notional * L * min(1, hoursOpen / 720) / 8760
Position Struct
struct NRHPolicy {
uint id;
uint notional;
uint L; // x100 for integer math
uint bufferBalance;
uint premiumBalance; // gas tank
uint hoursOpen; // for ramp factor
uint lastSettlement; // timestamp of last hourly settle
PolicyStatus status; // open, closed, lapsed
}
Capacity is tracked with:
uint public totalEntitlementConsumed; // sum entitlement_share(L_j) * N_j across open positions
uint lastNRHSettlement;
Methods
openPolicy(notional, L, initial_gas_tank)
Checks that the fraction of LP borrow-loop yield already claimed by existing positions, plus this new one, does not exceed 100%.
Initializes the position with buffer = 0 and premium_balance = initial_gas_tank.
closePolicy(policyId)
Returns unspent gas tank to user. Reverts buffer to LP NAV.
topUp(policyId, amount)
Adds to gas tank. No other state change.
Gas tank value is not included in LP pool capital. It is tracked in its own variable and only shifted to the LP pool balance as blocks elapse and premiums are debited.
adjustCoverage(policyId, new_L)
Decrease applies immediately and frees yield capacity.
Increase checks available yield capacity and applies immediately if available.
settleNRH(gross_carry_t, timestamp, policyIds[]) adminOnly
Called hourly.
For every position:
- debit the cost-covering premium from the gas tank
- route premium 90/10 to LP NAV and treasury
- declare the position lapsed if gas tank cannot cover the calculated premium
- if carry is positive, credit the position's entitled share of that yield into its buffer
- calculate deliverable buffer by clipping the buffer to the position's pro-rata share of available pool NAV
- if carry is negative, move
min(target_payout, deliverable_buffer)toclaimable_tokens - exclude
claimable_tokensfrom NAV - drain position buffer accordingly
- move Cardinal fees to
treasuryAccrued
claim(amount)
User-facing method to claim tokens from The Perpetual Negative Rate Hedge settlement.