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.