Ripeness

How long your fees sit there

Three measured numbers and no assumptions: what a glean costs in gas, what gas costs in ETH, and what ETH costs in USDG. The rest is division.

Recomputed in your browser

Reading Robinhood Chain…

One glean costs
Smallest harvest worth collecting
Time between harvests
Bounty paid, per year, as a share of yield

Gas price and the ETH mark are read live from Robinhood Chain when this page loads; edit the gas figure to ask a different question. The gas a glean burns (184,789) was measured by executing the contract, and is fixed here.

Where 184,789 comes from

It was executed. tools/measure-gas.mjs builds the vault's runtime code on chain by running its creation code through an eth_call with no to — whose return value is exactly that code, immutables baked in — installs it at a scratch address by state override, writes a realistic pool and a realistic pending balance into its storage, and asks the node itself to price the transaction. That figure includes the intrinsic 21,000, the calldata, and every cold account and cold storage access.

The first version of this tool was wrong, and its error flattered the site. It measured gasleft() either side of a glean inside a probe contract that had just performed a deposit, and reported 102,573 gas. Everything in that probe was created and written inside one transaction, so every account was warm and every slot already dirty — a store to a slot modified earlier in the same transaction costs 100 gas rather than 5,000. The same probe priced a deposit at 13,406 gas, which is not a number a deposit can be, and that implausibility is the only reason it was caught. Reported cheap, gleaning looks more affordable, the break-even TVL looks smaller, and this site's own thesis looks stronger. That is the direction to distrust.

Two USDG prices are read rather than one: the deepest WETH/USDG pool sets the mark and 3 others check it. They currently disagree by 0.037%. Nothing on this chain says which Uniswap V3 factory is canonical — there are four — so all of them are read rather than one being assumed.

The table

The smallest harvest worth collecting, and the vault size that produces it in a day, at each bounty rate the contract allows.

BountyMinimum harvestTVL for a daily glean at 10%at 50%
50 bps $28.4171$103,722$20,744
100 bps $14.2086$51,861$10,372
200 bps (default) $7.1043$25,931$5,186
500 bps $2.8417$10,372$2,074

What this does not say

It does not say a vault below that size loses its fees. The fees are still there, in the contract, visible through pendingFees(), and they are booked whenever somebody does call. What it says is that nobody has a reason to, so the share price of a small vault is stale by an amount that grows, and a depositor who redeems during that stretch leaves their share of it behind.

It also assumes a gleaner who wants to break even on that single transaction. A real one might glean at a loss to keep a position's accounting current, or batch several vaults, or run at a gas price they are already paying for something else. The number here is the point at which it stops needing a reason.