Trailing rates, 7 and 30 day
The realized rate for every source we track, taken from the protocols' own signed on-chain indices. Each figure is reported against the span it actually covers, not the span you asked for.
What these numbers are
Each figure is the growth of a protocol's own index between two signed endpoints, annualised. The endpoints are signed and independently verifiable; the rate itself is derived, not signed, so we publish the arithmetic: take the two endpoints, divide, repeat it yourself.
A requested window is not a covered window. A series reaches back only as far as it reaches. Where the covered span falls short, the cell names the span it actually covers, because a 17-day figure printed as a 30-day rate is the overclaim this product exists to avoid.
Not every index here is a return. Aave and Compound sign a lending income index and the vaults sign a share price, both of which are what a holder earned. Uniswap v2 signs fee accrual per LP share, net of the protocol's cut, so its cell is labelled accordingly rather than as an LP return.
Loading…
What holders earned
Lending income and vault share prices: what a holder of the asset received.
| Series | 7 days | 30 days | Series state |
|---|---|---|---|
| Reading the catalogue and deriving each window… | |||
What borrowers paid
The cost of borrowing the same assets. These are a cost, not a return, and the two tables are never added together.
| Series | 7 days | 30 days | Series state |
|---|---|---|---|
| Reading the catalogue and deriving each window… | |||
The series epoch, and the gap in it
These series start 2026-08-03. Between 2026-06-27 and 2026-08-03 this canister produced no snapshots for 36.9 days, and that gap is permanent: each snapshot is signed the moment it is measured, so a missing day cannot be reconstructed by us or by anyone. Everything earlier is published as history, and we show the gap rather than starting the table after it.
A gap costs detail, not accuracy. Every index here is cumulative, so two signed readings either side of a gap still capture everything that accrued between them. What is lost is the shape of the yield across those days, which is why coverage is reported beside the rate rather than folded into it.
Verify any of it in your browser
Pick a series and check its signatures here, with no server of ours involved in the answer. Each snapshot is verified against the pinned DeltaRates key, and a snapshot signed as part of a batched round has its inclusion path re-walked to the round root in this page.
Expected key fingerprint (SHA-256 of the compressed public key):
—
The two buttons prove different things. Verifying the signatures proves the numbers were not altered after we signed them. To check they were right when we read them, download the bundle and run the replay.py inside it against your own archive node: it re-reads the same index from the chain at the same block. Signature covers tampering, replay covers fabrication.
Check any of it yourself
Nothing on this page needs to be taken on trust. Every series is published as a signed feed with no account and no API key, and every row in it carries the exact bytes that were signed:
https://idm75-kaaaa-aaaac-a67ja-cai.raw.icp0.io/feed/v1/index.json
The catalogue is read from that same route, so this table cannot show a series the canister does not measure. To re-derive a figure, take the window's two signed endpoints and repeat the division; to check an endpoint, verify its signature and re-read the index on chain at its block.
One thing this page does not prove: that the series is complete. Every row proves itself, but the list of rows is not signed, so row counts and gap figures are our own unsigned claims and are marked as such.