Live on Arbitrum OneUniswap v4 hookERC-4626 vaultNo emissions · no lockups

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.

Fees distribute per donation event to in-range liquidityConcentrated LP exposure includes IL vs USDCRange is owner-controlled via SafeBonus capped: $25K/wallet · $10K/epochRisk runbook ↗
Live on-chain · Arbitrum One
TVL
Live vault assets
Share price
1 share → asset
Swaps
Hook-routed
Reserve fills
Hook-settled trades
Bonus pool
Epoch 0, claimable
Depositors
Unique LPs
Honest comparison

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.

Days since launch: 72.8
Window threshold: 7d
Vault — realized return since launch
From convertToAssets(10^shareDec) / 10^assetDec − 1. Share price advances at flush blocks; this is realized only, excluding latent v4 fee growth.
TVL:·noise floor:$10,000
Snapshots stored: 0 · cadence: 1/hour, in your browser only (localStorage; not shared, not a server backfill)
v3 baseline — same window
backfill pending
Uniswap v3 WETH/USDC 0.05% (Arbitrum) · pool
Read-path: connecting · data: computing rolling 7d
Methodology — exactly how each number is computed
  1. Vault realized yield = vault.convertToAssets(10^shareDec) / 10^assetDec − 1 where shareDec = 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.
  2. v3 baseline = passive full-range LP yield on Uniswap v3 WETH/USDC 0.05% (Arbitrum) over the same time window. Computed from feeGrowthGlobal0X128 / feeGrowthGlobal1X128 deltas, divided by liquidity at 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.
  3. Window — rolling 7 days, refreshed hourly. Below the threshold we show neither vault APR nor baseline APR; both numbers would be statistical noise.
  4. 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.
In plain English

What happens when you deposit USDC.

  1. 01

    You deposit USDC into this vault.

  2. 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.

  3. 03

    Swaps routed through the hook attempt to apply a 25 bps fee (1.5× in volatile blocks, hard-capped at 50 bps).

  4. 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.

  5. 05

    Share price is totalAssets() / totalSupply() with share-based attribution only. This vault uses discrete harvest: uncollected fee growth is imported when collectYield() or deposit/withdraw paths flush.

Honest caveat. Fee capture depends on being in range. Yield harvesting via collectYield() is permissionless, but range movement (rebalance()) is owner-only via Safe.

Vault overview

Live on-chain state. Deposit to start earning fee yield.

TVL
Total assets under management
Share price
1 share → asset units (×10¹⁸)
Depositors
Unique LPs
Yield collected
Lifetime harvested into share price
Performance fee
Treasury cut on yield
Tick range
Live on-chain · owner-rebalanceable
Vault
WETH / USDC · deposit USDC
AmountBalance: — USDC
The vault accepts USDC only. When the selected LP range is active, the vault must hold both USDC and WETH; the zap deposit swaps part of your USDC into WETH automatically.
Checking vault range status…
Connect a wallet to deposit.
Deposits are not swaps. Deposit mints ERC-4626 vault shares; redeem returns the vault asset by default. Share price rises as hook fees accrue; anyone can call collectYield(). Deployment into active range happens on deposit() and owner rebalance() paths.
Bootstrap pool · live on-chain

Real USDC sitting in epoch 0

Verify these numbers yourself. Every value below is read live from BootstrapRewards and on Arbitrum One.

Epoch 0 bonus pool
Fills as hook fees accumulate from swaps
Claimed so far
Cumulative claims by eligible LPs
Contract balance
Total USDC held by BootstrapRewards
Per-epoch cap
Hard ceiling on epoch bonus pool
Epoch 0 window
Start
End
End in
Statusaccruing
Program parameters
Bonus share of treasury
Epoch length
Total epochs
Real treasury
Why this is real

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.

Your eligibility

Connect a wallet to preview your bonus eligibility.

Model your real return

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 ↗

No offer posted

The vault has no active reserve offer. New offers appear here the instant the operator posts one on-chain.

Lifetime hook activity
Total swaps
0
Reserve fills
0
Reserve sold
— ?
cumulative inventory cleared
Fees routed
atomic units (mixed currencies)
Recent activity
Last ~200k blocks · refreshes every 30s
Direct from chain
Loading events…

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.

Low deployed liquidity (informational)
Vault reports little or no deployed liquidity. Quotes from the V4Quoter are authoritative — if a quote returns, the swap is enabled. Quote failures may indicate the pool has no in-range liquidity (e.g. a single-sided USDC position outside the live tick), in which case NoLiquidityToReceiveFees can revert.
FromBalance: USDC
USDC
To (estimated)Balance: WETH
0.0WETH
Slippage tolerance

How it works

Four contracts, one transaction per swap. No off-chain keepers, no token.

01
Swap triggers the hook
Swaps routed through the pool hook call DynamicFeeHookV2 — a 25 bps fee is computed from swap deltas and can scale 1.5× during volatile blocks.
02
Fee is split and donated
FeeDistributor routes 20% to the treasury and 80% straight into poolManager.donate() — same tx, no escrow. Treasury share is owner-adjustable, hard-capped at 50%.
03
Share price accrues
v4 credits donation events pro-rata to in-range liquidity on this PoolId. Share price is totalAssets()/totalSupply() with discrete harvest via collectYield() or deposit/withdraw flush.
04
Owner rebalances the range
Ticks are owner-adjustable without touching depositor accounting. Range shifts leave share price untouched.
Contracts · Arbitrum One
LiquidityVaultV20xf79c…eee0
DynamicFeeHookV20x4865…00cC
FeeDistributor0x5757…78B0
BootstrapRewards0x3E6E…a03d
Asset (USDC)0xaf88…5831
Single-sided by design

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.

Risks & custody model
  • 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 Pausable and owned by VaultOwnerController, 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.