USDC yield from real Uniswap v4 trading activity.
Deposit USDC into an ERC-4626 vault that captures hook-routed fees on Arbitrum. No emissions, no lockups, live on-chain accounting.
- Market yield — variable and uncapped. Hooked swaps route 80% of fees to in-range liquidity via
poolManager.donate(). - Incentive yield — capped and scheduled. Bootstrap rewards are funded from treasury inflows with on-chain epoch limits.
Pair: WETH / USDC.
Vault yield vs passive v3 LP baseline
The only chart that answers “does the hook actually beat v3?”. Methodology is committed up front; numbers fill in with on-chain history. We render the comparison even on days the baseline wins.
convertToAssets(10^shareDec) / 10^assetDec − 1. Share price advances at flush blocks; this is realized only, excluding latent v4 fee growth.Methodology — exactly how each number is computed
- Vault realized yield =
vault.convertToAssets(10^shareDec) / 10^assetDec − 1whereshareDec=assetDec + _decimalsOffset()(currently — for shares, 6 for assets). First deposit mints at parity by ERC-4626 convention, so this ratio − 1 is the cumulative realized return. Excludes uncollected v4 fees by design — see SPEC §2.2. - v3 baseline = passive full-range LP yield on Uniswap v3 WETH/USDC 0.05% (Arbitrum) over the same time window. Computed from
feeGrowthGlobal0X128 / feeGrowthGlobal1X128deltas, divided byliquidityat sample time, marked to USDC at spot. This is conservative: tighter v3 ranges earn more, but they also have non-zero re-balance cost we’re not modeling. - Window — rolling 7 days, refreshed hourly. Below the threshold we show neither vault APR nor baseline APR; both numbers would be statistical noise.
- Honesty contract — when the v3 baseline beats the vault on a given window, we render the window. If we hid losing windows the chart would be marketing, not signal.
What happens when you deposit USDC.
- 01
You deposit USDC into this vault.
- 02
The vault deploys across a concentrated range on Uniswap v4 for WETH / USDC. If price is outside range, inventory can sit single-sided in USDC until re-entry or owner rebalance.
- 03
Swaps routed through the hook attempt to apply a 25 bps fee (1.5× in volatile blocks, hard-capped at 50 bps).
- 04
By default 80% of hook fees goes to
poolManager.donate()and 20% to treasury. Donation credits are event-based and pro-rata to in-range liquidity on this exact PoolId. - 05
Share price is
totalAssets() / totalSupply()with share-based attribution only. This vault uses discrete harvest: uncollected fee growth is imported whencollectYield()or deposit/withdraw paths flush.
collectYield() is permissionless, but range movement (rebalance()) is owner-only via Safe.Vault overview
Live on-chain state. Deposit to start earning fee yield.
Real USDC sitting in epoch 0
Verify these numbers yourself. Every value below is read live from BootstrapRewards and — on Arbitrum One.
Click Read Contract on Arbiscan and call epochs(0). The first return value is bonusPool in USDC units (×106). It will match the value above. Anyone can also call payoutAsset.balanceOf(bootstrap) and confirm the USDC actually sits in the contract — not in a treasury wallet.
Untracked balance. If contract balance > bonus pool, anyone may call pullInflow() on BootstrapRewards to commit the residual into the active epoch's bonus pool. Permissionless, idempotent.
Connect a wallet to preview your bonus eligibility.
See exactly what a deposit earns on live pool data.
Project your share of hook fees and the early-depositor bonus using live pool numbers — TVL, share price, fee distribution split, bonus pool. Every input is on-chain and editable.
Reserve desk
Live, public state of the vault's single-sided reserve sale on the hook. Anyone can verify the offer, the price, and every fill — no indexer, straight from chain.
Quote source & gate. Vault price is posted by an allowlisted keeper (Safe-managed). Each fill is gated on-chain against live spot, directionally: fill ⇔ P_spot ≤ P_vault when the vault sells token1, and fill ⇔ P_spot ≥ P_vault when it sells token0 (PRICE_IMPROVEMENT mode; VAULT_SPREAD flips the inequality). A stale or mispriced quote cannot execute against the pool. Spec §3.4 ↗
The vault has no active reserve offer. New offers appear here the instant the operator posts one on-chain.
Swap directly through the hook
Routes through The-Pool's own Uniswap v4 PoolKey. 80% of every hook fee flows back to in-range LPs (including you, if you've deposited).
Swaps are trades. They do not mint vault shares; you receive the output token directly.
NoLiquidityToReceiveFees can revert.How it works
Four contracts, one transaction per swap. No off-chain keepers, no token.
You deposit USDC. The vault performs best when WETH / USDC trades in range. Out of range, inventory can remain mostly in USDC.
Reserve quotes are posted by an allowlisted keeper, then validated on-chain by spot-based price-improvement gates before fill.
- Impermanent loss. Concentrated-LP exposure can underperform a pure USDC hold.
- Range-shift risk.
rebalance()is owner-only via the Safe. Frequency and tick choice can change fee capture timing; depositor accounting is unaffected. - Pro-rata dilution. The 80% donation is shared across all in-range LPs on the same PoolId.
- Bonus is conditional. Epoch pool is funded only when treasury inflows arrive and
pullInflow()is called. Caps and windows are on-chain; funded balance is shown live below. - Reserve quote is discretionary. Posted by an allowlisted keeper. Fills are still gated by an on-chain AMM-spot price-improvement check.
- Custody & admin. Vault is
Pausableand owned byVaultOwnerController, which is owned by a Safe multisig. Hot keeper can only call typed reserve operations — no withdraw, no rebalance. Hook, vault, and distributor contracts are non-upgradeable; migration would require redeployment.