Varve Open the app

The measurement

Logs forever, state for ten minutes

No key, no proxy, no vendor. Every figure here comes from eth_getLogs, eth_call and eth_getBalance against rpc.mainnet.chain.robinhood.com, read by tools/scan.mjs and written to data/chain.json.

6,057blocks of state behind head, bisected rather than remembered
10.2 minwhat that is in time, at a measured 0.10s per block
57,916,747blocks of logs, answering from block 1
68 daysof chain history the logs cover and the state does not

The denominator is safe

ERC-20 requires a Transfer on every mint and burn, so totalSupply at any past block is a sum over events the node still holds. tools/verify-supply.mjs reconstructs a real vault's supply from block 1 and checks it against the chain, with a control that drops one mint and requires the reconstruction to break.

The numerator is not

totalAssets() at a block behind the horizon answers metadata is not found. The same call at head answers immediately. Both are checked in the same run, because "it failed" is only evidence if the control succeeded.

How the horizon is found

By bisection, on a precompile — an account that exists at every block, so a failure is the node refusing rather than the account not being there. Above the horizon eth_getBalance answers normally; below it, every state read returns metadata is not found with the block number it gave up at.

It moves, so it is measured more than once per run and both readings are published: 6,203 and 5,910 blocks in the run that produced this page. A single reading would have been quoted as though it were a constant.

The census

52 addresses emitted an ERC-4626 Deposit across 60 windows of 20,000 blocks spread over the chain's life. A topic match is a candidate, not an identity — the same event signature is emitted by things that are not vaults — so each one is asked for asset(), totalAssets(), decimals(), totalSupply() and convertToAssets(). 49 answered all of it. 3 did not and are not counted.

A revert and a transport failure are not the same answer, and the scanner separates them. A candidate that reverts on asset() is not a vault; a candidate the node could not be asked about is unknown, and counting that as "not a vault" shrinks the census silently and in the direction that flatters the finding.

Per vault

Every one of them, and its holes

VaultAddressPinsBlocks pinned Share of windowMedian gapWorst gapOwn events
steakUSDG
USDG
0xbeef…09dd 15,389 14,351 0.3588% 0.3 minutes 16.2 minutes 4
spUSDG
USDG
0xde77…4087 347 346 0.0086% 5.3 minutes 5.3 hours 2
rUSD
USDG
0xcfa0…6370 13 10 0.0003% 24.9 minutes 2.4 days —
FUSDG
USDG
0x7082…6149 8 8 0.0002% 88.8 minutes 3.3 days —
MLP
USDe
0x24b8…bf9d 45 45 0.0011% 75.3 minutes 9.2 hours 2
sGREEN
GREEN
0x290a…df73 27 27 0.0007% 84.3 minutes 21.6 hours —
STATE
DEEP
0xbfb7…73d5 15 15 0.0004% 6.0 hours 22.3 hours 5
sBTC3x
USDG
0xadcc…7083 1 1 0.0000% 4.4 days 4.4 days —
cIN
IN
0x4ef5…adc1 1 1 0.0000% 3.4 days 3.4 days —
mTBILL
USDG
0x84a1…367d 0 0 0.0000% 4.7 days 4.7 days —
mCREDIT
USDG
0xd102…ef70 0 0 0.0000% 4.7 days 4.7 days —
pBTC3x
USDG
0x4472…0e3e 3 3 0.0001% 40.2 hours 44.7 hours —
p2hUSDG
USDG
0x42e0…be14 0 0 0.0000% 4.7 days 4.7 days —
rUSD
USDG
0x8d3d…488f 0 0 0.0000% 4.7 days 4.7 days —
sROAR
ROAR
0x9560…9c10 0 0 0.0000% 4.7 days 4.7 days —
pHOOD3x
USDG
0xe24c…5c36 19 19 0.0005% 1.9 hours 43.6 hours 9
pBTC
USDG
0x925f…0ea0 3 3 0.0001% 21.7 hours 3.2 days —
sBTC
USDG
0xc25c…b91d 1 1 0.0000% 4.4 days 4.4 days —
xSR
SR
0x0e4b…7912 1 1 0.0000% 4.4 days 4.4 days —
bbqUSDGturbo
USDG
0xbeef…a4fd 2 2 0.0000% 2.1 days 2.5 days —
h33
xHOOD
0xa703…af38 7 7 0.0002% 25.3 hours 29.7 hours —
stAGORA
AGORA
0x92de…d463 0 0 0.0000% 4.7 days 4.7 days —
0xafb0…4c54
USDG
0xafb0…4c54 0 0 0.0000% 4.7 days 4.7 days —
evAI
vAI
0x3e62…2576 3 2 0.0000% 14.5 hours 3.9 days —
evPONS
vPONS
0x2396…bd0c 1 1 0.0000% 4.1 days 4.1 days —
evSPY
vSPY
0x2251…9d09 6 5 0.0001% 9.4 hours 3.7 days —
evBONER
vBONER
0x651b…564a 5 4 0.0001% 14.4 hours 2.7 days —
tLOTTERY
$LOTTERY
0xf289…5e91 10 10 0.0003% 54.7 minutes 4.0 days 1
aRHUSDG
USDG
0xf4d0…459e 72 73 0.0018% 37.0 minutes 15.1 hours UpdateLastTotalAssets(uint256)
wCASHCAT
CASHCAT
0x5418…c7a5 0 0 0.0000% 4.7 days 4.7 days —
pSPY
USDG
0xb1a2…526c 0 0 0.0000% 4.7 days 4.7 days —
pCHIP
USDG
0x1049…8e30 0 0 0.0000% 4.7 days 4.7 days —
vCSA
USDG
0x97fa…c2ff 0 0 0.0000% 4.7 days 4.7 days —
vATL
USDG
0x0ff9…5580 0 0 0.0000% 4.7 days 4.7 days —
vPAT
USDG
0x6470…a290 0 0 0.0000% 4.7 days 4.7 days —
RHtest_sub
USDG
0xef46…2dae 0 0 0.0000% 4.7 days 4.7 days —
yvWETH
WETH
0x92c7…510d 0 0 0.0000% 4.7 days 4.7 days —
yvVIRTUAL
VIRTUAL
0x5cb5…a694 0 0 0.0000% 4.7 days 4.7 days —
PurintaUSDG
USDG
0x3778…d0a8 2 2 0.0000% 19.4 hours 3.3 days —
bLendLP
WETH
0xd3ac…b9bc 0 0 0.0000% 4.7 days 4.7 days —
p3USDG
USDG
0x05ae…4d00 0 0 0.0000% 4.7 days 4.7 days —
p3NVDA
NVDA
0xa386…928c 0 0 0.0000% 4.7 days 4.7 days —
GM_sub
USDG
0x8252…49d3 0 0 0.0000% 4.7 days 4.7 days —
0x026d…5ca1
USDG
0x026d…5ca1 23 23 0.0006% 4.0 hours 14.6 hours 2
evNVDA
vNVDA
0x75fa…50f7 11 10 0.0003% 9.4 hours 30.0 hours —
vSPY
SPY
0xbc95…7a9d 4 4 0.0001% 9.4 hours 3.7 days —
vBONER
BONER
0x2e3f…e435 5 5 0.0001% 14.4 hours 2.7 days 2
drLS
USDG
0x94c2…97e6 4 4 0.0001% 11.5 hours 3.5 days —
stUSDG
USDG
0x839a…3713 8 8 0.0002% 3.1 hours 3.4 days 3

A pin is a Deposit or Withdraw carrying a non-zero assets and a non-zero shares, which fixes the conversion rate at that block. Own events names a mark-carrying event where the vault emits one, and otherwise counts how many topics it emits outside the ERC-20 and ERC-4626 set. Where a vault does emit a mark, those blocks are counted as recoverable in every column: a vault that does the right thing is credited for it.

The worst gap is censored for the 20 vaults that pin no price at all — their true gap is longer than the window, and is reported as the window.

The control

The same chain, done right

Uniswap V3's Swap carries sqrtPriceX96. 598,889 of them over 150,000 blocks, in 2,659 pools. A pool's price history survives the state horizon and a vault's does not, on the same node, in the same blocks.

5.12%of blocks carry a recoverable price for the median pool
0.0000%for the median vault, same window
408,689×between them — quote this, not either share on its own

Each share depends on the window it was measured over. The ratio is the part that does not, which is why it is the figure the front page leads with.