Harvesting
What happens each epoch, who can trigger it, and why a harvest vests instead of landing at once.
The epoch
One epoch is 24 hours. Once it elapses, anyone may call harvest(tokens). The first caller in the epoch earns a fixed 0.002 ETH tip, paid from the vault's idle WETH. There is no allowlist and no registration; the countdown and the leaderboard are on the keeper board.
T+0h
Epoch opens
NAV marked, deposits and redemptions continue, last harvest keeps vesting
T+24h
harvest() callable
any keeper may call, first caller earns the tip
call
Claim + swap
every eligible fee stream claimed from the escrow, non-ETH fees swapped to WETH
after
Vest + reinvest
10% fee to treasury, the rest vests linearly into NAV; keeper posts fresh λ₁ weights
Linear vesting
A harvest does not land in NAV all at once. It enters totalAssets linearly over the following epoch, Yearn-style locked profit. Without this, anyone watching the mempool could deposit one block before a harvest, capture a full day of fees earned by other people's capital, and redeem one block after.
The practical consequence for depositors: your first day earns roughly a day of fees, not the previous day's. It is a deliberate trade of a small convenience for a closed sandwich.
Fees
- Performance fee 10% of each harvest, to the treasury.
- Management fee: none.
- Deposit and withdrawal fee: none.
- Keeper tip 0.002 ETH per harvest, to whoever calls it.
The seller of a stream may keep a residual share, set at registration. The registry splits every claim between the vault and the seller in the same transaction, so nobody has to trust anybody to forward anything.
Reinvest
Harvested ETH either pays eYLD holders through NAV or buys more streams, weighted by the current λ₁ loadings. Buying a stream shows up as an immediate NAV dip, because a purchased right sits off balance sheet while the ETH that bought it has left. That is honest accounting and it is asserted in the tests rather than smoothed over, which is also why reinvest is owner-gated while the keeper role can only post weights.