Kerne Logo

Snapshot 2026-08-09. 7 products. 30 day window.

Solana yield: what it says, and what it paid.

Advertised yield next to realized yield for Solana stablecoin lending products, measured from a share price rather than from a claim. The collector is MIT licensed, has zero runtime dependencies and needs no API key. The interesting result is not a scalp. It is that the number on the page is an instantaneous rate, and most gaps computed from one reading of it are measuring the clock.

The finding, which is not the one we went looking for

This board first ran on August 4, 2026. Its widest row that day was Kamino's PYUSD reserve, advertising 6.92 percent against 4.60 percent realized, a 2.32 point shortfall. That was very nearly published as a finding about Kamino.

Three days later the same code on the same reserve read 3.25 advertised against 4.76 realized. The gap had not narrowed. It had changed sign. On August 8 a single read caught the USDC reserve advertising 18.19 percent, and a read a few minutes later returned 3.91.

Nothing was broken and nobody was lying. A lending reserve's supply APY is an instantaneous rate set by utilisation, and Kamino's rate curve kinks hard above 95 percent utilisation, where the borrow rate runs from about 4.61 to about 30.4 percent. A reserve oscillating in the high eighties therefore prints an advertised number whose 30 day range spans a factor of 18.4, while the realized figure over the same period moves by hundredths of a point.

So a spot reading minus a 30 day realized figure does not measure the product. It measures when the collector ran. Every advertised-versus-realized board that samples a spot rate once has this problem, including ours, and it is invisible unless you look at the distribution the reading came from.

The board

Read as of 2026-08-09T02:00:00.910Z. The last column is the one to quote: the same subtraction done against the median of the advertised figure's own published history rather than against one reading of it.

ProductAdvertised, at readRealized, 30dAdvertised range, 30dGap vs median
Kamino Lend USDC (Main market)3.964.113.21 to 24.35 (7.6x)-0.25
Kamino Lend USDG (Main market)2.482.911.90 to 11.74 (6.2x)-0.43
Kamino Lend PYUSD (Main market)4.714.711.32 to 24.34 (18.4x)-0.70
Kamino Lend USDT (Main market)2.683.652.21 to 4.27 (1.9x)0.12
Kamino Lend USDS (Main market)3.944.303.34 to 4.79 (1.4x)-0.02
Save USDC (Main pool)2.532.36not publishedn/a
Save USDT (Main pool)1.421.39not publishedn/a

Measured that way, Kamino delivers what it advertises on all 5 reserves, the largest miss in either direction being 0.70 points on Kamino Lend PYUSD (Main market). That is a duller headline than the first draft and it is the correct one.

2 of the rows in this snapshot were captured outside the middle half of their own recent range (kamino-lend-usdt, kamino-lend-usds). The dataset flags those rows itself rather than leaving a reader to notice.

Save publishes a current rate but no history of that rate, so the two Save rows carry the absence rather than a substitute borrowed from a third party.

Why the realized column is empty everywhere else

ERC-4626 gives every EVM vault the same call, so a share price is one line of code and advertised-versus-realized boards exist for EVM stablecoins. Solana has no equivalent standard, and the obvious escape hatch is closed: none of USDY, PYUSD, BUIDL, syrupUSDC, sUSDe, USDC or USDG carries the Token-2022 interest bearing or scaled amount extension, so there is no protocol agnostic on chain rate to read either. Realized yield on Solana has to be assembled per protocol from raw account data, which is why nobody publishes the column.

For Save, the collector decodes the 619 byte reserve account itself over a public RPC and agrees with Save's own published exchange rate to fifteen decimal places. No SDK, no key, no trust. Run node bin/solhonesty.mjs verify --key save-usdc from a clean clone and you get that comparison printed.

Take the data, not our word for it

This page is a dated snapshot. The two live artifacts are:

  • The open dataset, CC BY 4.0, rebuilt and republished every day by the collector itself. Browsable in place, or one CSV download.
  • The collector, MIT, zero runtime dependencies, no API key, no wallet. It builds from a clean clone in one command and its test suite runs offline.

If the dataset and this page ever disagree, the dataset is newer and the dataset wins.

The part where this applies to us

We run the same measurement against EVM synthetic dollars at the Honesty Index, which measures more than a dozen synthetic dollars including this one. Our own row is the worst on that board, by our own engine's own rules, and the board says so on the row itself rather than in a footnote. We are not in a position to be smug about anyone's advertised rate, which is precisely why this page leads with the conclusion that Kamino comes out fine.

The methodological error described at the top of this page was ours, was found by using our own tool, and is now a regression test in it. Things we measured and then got wrong go in the refusal log.