Yield Methodology
Every published Kerne APY traces to a single live computation. This chapter walks through every input, every multiplier, every deduction, and shows you how to reproduce the headline number from public endpoints in under a minute. There is one canonical APY formula. If you find a different number quoted in any other Kerne document or third party page, this chapter is the source of truth and the other figure is either historical or stale.
The Canonical Formula
userAPY equals leverage times the sum of staking APR plus funding APR, then deducted by strategy costs, insurance allocation, and protocol fee in sequence.
userAPY = LEVERAGE x (stakingAPR + fundingAPR)
x (1 - strategyCostFraction)
x (1 - insuranceAllocation)
x (1 - protocolFee)Each multiplicand has a single canonical source. The formula and all constants are defined in the live computation at app.kerne.fi/api/apy, which both the kerne.fi marketing hero and the app.kerne.fi terminal stat card consume.
1. Live Staking APR
We pull stakingAPR from the Lido protocol's 7 day simple moving average of stETH yield. Public endpoint: https://eth-api.lido.fi/v1/protocol/steth/apr/sma. The 7 day window is short enough that material changes in Ethereum issuance reflect within a week.
If the Lido endpoint fails, we fall back to a hardcoded 2.4% (recent wstETH baseline) and mark the response field stakingSource as fallback-wsteth-recent-range so consumers know the number is not live. The isLive field flips to false whenever any input is in fallback.
2. Live Funding APR
We pull fundingAPR from Hyperliquid as the 180 day trailing mean of the ETH perpetual hourly funding rate. Public endpoint: POST https://api.hyperliquid.xyz/info with body { "type": "fundingHistory", "coin": "ETH" }. Hyperliquid settles funding hourly. We paginate roughly 4,320 hourly entries (180 days), compute the simple mean, and annualize as mean x 24 x 365.
Why 180 days. A shorter window (7 or 30 days) makes the headline APY whip around with daily funding noise. A longer window (365 days) still averages in last year's bull funding regime and overstates what users earn today. 180 days is the middle ground that matches how the bot's dynamic insurance allocator models regime, and it is symmetric with how the published funding chart on app.kerne.fi/dashboard renders.
Asymmetry note. The Lido SMA is 7 days while the HL window is 180 days. We chose this asymmetry deliberately: staking APR moves slowly with validator entry queues and rarely moves more than a few basis points week over week, so a short window is fine. Perpetual funding can swing materially day to day, so the longer window is needed to give a stable user-facing number. The trade off is that during a sharp funding inversion the published funding APR lags reality by several months. We disclose this asymmetry rather than hide it: the published number is structurally stickier on the downside than spot funding would suggest, and the bot adjusts its hedge in real time even when the headline number has not yet caught up.
Fallback chain: 180 day window first, then 90 day, then 60 day, then a hardcoded 5.5% empirical fallback. The response field fundingSource (e.g. hyperliquid-180d-trailing) tells you which window produced today's number.
3. Leverage
We use a fixed 3x leverage to combine the staking yield (long LST exposure) and the funding yield (short ETH perpetual). At 3x, every dollar of vault collateral simultaneously earns staking on 3 dollars of LST and pays or receives funding on a 3 dollar short. The two legs net to zero ETH exposure (delta neutral) and the user keeps both yield streams.
Why 3x. Higher leverage produces more gross yield but tighter liquidation distance and larger margin opportunity costs. The 24 month LONGBACKTEST sweep across 1x, 2x, 3x, 5x, and 8x found that 3x was the sweet spot of net APY versus realized drawdown. Full sweep results are at LONGBACKTEST/results/leverage_sweep.json.
4. Strategy Cost Fraction
Running the strategy is not free. We pay trading fees on rebalances, slippage on perp executions, gas on Base transactions, and margin opportunity cost on the hedge collateral that is not earning Kerne yield. The total comes to 22.32% of gross yield, broken down as:
| Cost component | Share of gross | Source |
|---|---|---|
| Trading fees | 6.08% | Hyperliquid taker + maker schedule |
| Slippage | 6.84% | Almgren-Chriss model with HL 1h volume proxy |
| Gas | 2.28% | Base mainnet rebalance gas |
| Margin opportunity cost | 7.12% | Idle USDC margin not earning Kerne yield |
| Total | 22.32% | LONGBACKTEST/results/cost_attribution.json |
Today this fraction is hardcoded into the live API. As we observe real production costs we will replace it with a trailing actual-cost ratio so users see live operational truth instead of a backtest derived constant. That migration is tracked in our roadmap.
5. Dynamic Insurance Allocation
After strategy costs, the protocol allocates a slice of remaining revenue to the Insurance Fund (contract 0xE879...0403, redeployed 2026-05-16 with Safe Multisig as sole admin). The default allocation is 10% of revenue. The bot's InsuranceAllocator can adjust this dynamically across a 5% to 25% range based on funding regime, fund adequacy ratio, volatility percentile, TVL scale, and Neural Engine risk score. Full spec at docs/DYNAMIC_INSURANCE_FUND_SPEC.md.
Today the live formula uses the 10% default. Wiring the live allocator value into the published APY (so users see the elevated rate during stressed regimes) is queued as a roadmap item; until then the disclosed APY assumes 10% and the allocator state is exposed separately for users who want to verify.
6. Protocol Fee
The Kerne performance fee is phased by TVL. During Genesis (TVL below $100,000) the fee is 0%. During Growth ($100k to $1M) it is 5%. During Maturity ($1M and above) it is 10%. The schedule is enforced in src/KerneVault.sol constants GENESIS_TVL_THRESHOLD, GROWTH_TVL_THRESHOLD, GROWTH_PHASE_FEE_BPS, MATURITY_PHASE_FEE_BPS.
Today the protocol is in Genesis (TVL below $1k as of this writing) so the live formula uses 0%. When TVL crosses $100,000 the fee steps to 5% and the published APY drops by approximately 2 percentage points; we will surface this transition in the live response field feePhase so consumers can detect the cliff in advance.
Reproduce the Number in 60 Seconds
Anyone can reproduce today's published APY from public endpoints. The recipe:
# 1. Get live staking APR (Lido 7d SMA)
curl -s https://eth-api.lido.fi/v1/protocol/steth/apr/sma | jq '.data.smaApr'
# returns e.g. 2.62 (interpret as percent: 0.0262)
# 2. Get live funding APR (HL 180d trailing) by reading our cached endpoint
curl -s https://app.kerne.fi/api/apy | jq '.sources.fundingRate'
# returns e.g. 0.0497
# 3. Compute the formula
# leverage 3 x (0.0262 + 0.0497) = 0.2277 grossAPY
# x (1 - 0.2232) = 0.1769 strategyNetAPY
# x (1 - 0.10) = 0.1592 afterInsurance
# x (1 - 0.00) = 0.1592 userAPY = 15.92%
# 4. Cross check against the live API
curl -s https://app.kerne.fi/api/apy | jq '.expectedAPYPct'
# should match within roundingEvery input is independently verifiable. The Lido endpoint is theirs, the Hyperliquid endpoint is theirs, and our methodology is fully disclosed above. If our published APY ever diverges from what the formula would produce, that divergence is a bug we want you to report to security@kerne.fi.
Why a Methodology Chapter Matters
Most yield protocols publish a single APY number with no derivation. When the number drops, holders feel ambushed. We chose to publish the entire computation chain so that when funding compresses or insurance allocation rises, you see why before your APY moves and can decide whether to stay or rotate.
Past performance does not predict future results. The current 12% to 18% target band reflects current funding regimes and current cost assumptions. A sustained funding inversion would compress the live number into the high single digits; a return to bull-cycle funding would push it past 20%. We surface the live drivers so that future readings, in any direction, are predictable from public data rather than feeling like protocol caprice.