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.
| Bounty | Minimum harvest | TVL 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.