Kerne Logo

Kerne Honesty Index

Kerne skUSD

Live . base . 0x96F5102C15b839757f811A98CEc3725Ac21DfA14

What this vault advertises, against what it actually paid, measured from its own share price on chain over a 30 day window. Everything below is recomputed hourly and every figure on this page comes from the snapshot named at the bottom. Nothing here is typed by hand.

Advertised

4.97%

modeled

Realized

0.00%

30 day window

Gap

+4.97 points

0.0 percent of advertised

A positive gap means the protocol advertised more than its holders realized.

a modeled forward rate compared against a 30 day realization of what the vault actually paid.

This is Kerne's own row. We publish it first on the board, by rule, and we are the worst row on it. The reason is written up in full at what we still owe.

What Kerne published.

"expectedAPYPct":"4.97%","basis":"deployed","framing":{"kind":"modeled-deployed-basis"}

Figure we recorded

4.97%

Basis

modeled (modeled)

Label on their surface

skUSD APY

Read on

2026-08-14

Age at the end of our window

0.8 days, limit 10

Source

https://app.kerne.fi/api/apy

Open the page we read it from. It is a first-party surface by rule. An aggregator figure is never recorded in this column, whatever it says.

Recompute it yourself.

The realized figure is two calls and one exponent. Both calls are pinned to a block height, so they return the same values for you as they did for us, forever. Use any archive endpoint. We deliberately do not name one: a reproduction that runs on our RPC is not a reproduction.

The call

Chain

base

Contract

0x96F5102C15b839757f811A98CEc3725Ac21DfA14

Method

convertToAssets(uint256)

Argument

1000000000000000000000000 (one whole skUSD share, 24 decimals)

eth_call data

0x07a2d13a00000000000000000000000000000000000000000000d3c21bcecceda1000000

Returns

kUSD, 18 decimals

The argument is one whole share in the SHARE token's own decimals, which is not always eighteen. Kerne's own skUSD reports twenty four, so calling it with 1e18 returns a millionth of the right answer. Ask the vault for its decimals rather than assuming, exactly as our collector does.

At the start of the window

Block

48675637 (0x2e6bb35)

Timestamp

1784140621 (2026-07-15 18:37 UTC)

Share price returned

1.000098667771066974

At the end of the window

Block

49971637 (0x2fa81b5)

Timestamp

1786732621 (2026-08-14 18:37 UTC)

Share price returned

1.000098667771066974

Start of window, cast

RPC_URL=... cast call 0x96F5102C15b839757f811A98CEc3725Ac21DfA14 "convertToAssets(uint256)(uint256)" 1000000000000000000000000 --block 48675637 --rpc-url "$RPC_URL"

End of window, cast

RPC_URL=... cast call 0x96F5102C15b839757f811A98CEc3725Ac21DfA14 "convertToAssets(uint256)(uint256)" 1000000000000000000000000 --block 49971637 --rpc-url "$RPC_URL"

Start of window, raw JSON-RPC

{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x96F5102C15b839757f811A98CEc3725Ac21DfA14","data":"0x07a2d13a00000000000000000000000000000000000000000000d3c21bcecceda1000000"},"0x2e6bb35"]}

End of window, raw JSON-RPC

{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x96F5102C15b839757f811A98CEc3725Ac21DfA14","data":"0x07a2d13a00000000000000000000000000000000000000000000d3c21bcecceda1000000"},"0x2fa81b5"]}

Both calls return an integer in the smallest unit of kUSD. Divide by 10 ** 18 to get the share price printed above. Set RPC_URL to any archive endpoint you trust.

The arithmetic

growth = 1.000098667771066974 / 1.000098667771066974

elapsed = 1786732621 - 1784140621 = 2592000 seconds

annualized = (growth ^ (31536000 / 2592000) - 1) * 100

= 0% (0% over the window)

Simple compounding at the observed rate, on a 365 day year. No fee assumption, no reinvestment assumption, no smoothing. If your arithmetic lands somewhere else, that disagreement is the finding and we want it: liam@kerne.fi.

Context for this row.

Live, and the only row on this page that realizes exactly 0.00 percent while still advertising a rate. The other rows that realize zero publish no figure at all; this one does. skUSD v2 was deployed 2026-07-03 with its share price reset to exactly 1.000000. Its window was shorter than the 30 days used for every other row while the vault was younger than that; it is now a full 30 days and clamped reads false. Read the realized figure with care, including against us: it derives from a single 0.10 kUSD distribution on 2026-07-09 UTC, which the deployment registry records as a plumbing smoke test proving the strategist topology works, not strategy carry. That is not one distribution among several. It is the ONLY one the live vault has ever received. Annualizing one test transfer is annualizing a test transfer, and absent further distributions the figure decays to zero. As of 2026-08-08 it has arrived there: that transfer has passed out of the trailing 30 day window, and the share price at both ends of the window is now the same number, 1.000098667771066974, so the growth this row measures is exactly zero. Kerne has not yet paid meaningful realized yield, and our published APY is a model, not a record. Between 2026-07-30 and 2026-08-01 the advertised figure on this row was 10.5 percent, a TOTAL made of organic carry plus a funded Genesis incentive. It has been WITHDRAWN back to organic carry alone, and the reason is the one this page exists to catch. The escrow is real money, USDC on chain at the address app.kerne.fi/api/apy names, but nothing has ever converted it into a distribution: it sits in a 2-of-3 Safe and holders are paid in kUSD out of the strategist buffer. On 2026-08-03 a manual script was written that joins the two. It has never been run, it needs 2 of 3 signatures so it can never become a scheduled job, and it refuses outright while the vault has no external holder. The vault still has none, so nothing has been paid. So for two days our advertised number carried a component that had never been paid and at that time had no path to being paid, while the share price sat unchanged at 1.000098667771066974. Anyone could have refuted it in one RPC call, which is exactly the check we tell everyone else to run on the rows below. Withdrawing it NARROWS this row, and we would rather say so than be flattered by it, because the only gap worth closing is one that closes because yield landed. None has. The escrow stays published, excluded from the rate, at app.kerne.fi/api/apy.

This page measures one axis and one only: advertised yield against realized yield. It is not a rating, not an audit, and it says nothing about whether Kerne is safe or whether its reserves are what it says they are. A protocol in an announced wind down paying nothing is behaving correctly. The reserve axis is a different page, at the reserve transparency scorecard.

Take this row with you.

This page

https://kerne.fi/honesty-index/kerne-skusd

Citation

Kerne Honesty Index, 2026-08-14: Kerne (skUSD) advertised 4.97%, realized 0.00% from on-chain share-price growth, gap +4.97 points (a modeled forward rate compared against a 30 day realization of what the vault actually paid). Source: https://kerne.fi/honesty-index#row-kerne-skusd

Badge, markdown

[![Kerne Honesty Index](https://kerne.fi/honesty-badge.svg?row=kerne-skusd)](https://kerne.fi/honesty-index#row-kerne-skusd)

Badge, HTML

<a href="https://kerne.fi/honesty-index#row-kerne-skusd"><img src="https://kerne.fi/honesty-badge.svg?row=kerne-skusd" width="360" height="112" loading="lazy" alt="Kerne Honesty Index: advertised versus realized yield"></a>

Row in the API

https://kerne.fi/api/honesty-index/row/kerne-skusd
Kerne Honesty Index badge for Kerne

Where these numbers came from.

Snapshot generated

2026-08-14 18:37 UTC

Snapshot source

live store

Signature

verified, signer 0x84949170e0ad0f9bd8686a4aa4922c10f5fdc4ea

Row key

kerne-skusd

The signature is checked on every render rather than assumed from the presence of a field. A snapshot that does not verify is served with that said plainly instead of borrowing the word.

Board last read 2026-08-14. Every figure on this page is regenerated from https://kerne.fi/honesty-index and none of them is stored in this file.