Uniswap v4 Hook · Base Sepolia

The hook that rewards
loyal LPs

Retention scoring, partial IL compensation, tier badges, and Aave-compounded rewards. Live on Base Sepolia.

Uniswap v4 BaseHook + ISubscriber Fee capture, 0 extra swapper fee Aave V3 yield Base Sepolia · Live 138 tests + 8 fork tests
The problem

Mercenary capital leaves when you need it most

In volatile pools, LPs withdraw exactly when liquidity matters most. Impermanent loss drives them out, depth collapses, and slippage spikes for everyone left behind.

IL drives exits

When price moves, LPs realize impermanent loss. The rational response is to flee high-volatility pools, the very pools that need depth.

Depth collapses

As liquidity leaves, the remaining LPs face wider spreads and worse fills. Volatility and thin books feed each other.

Incentives are external

Liquidity mining and ve-tokenomics patch this with emitted tokens and lockups. They bolt incentives on from outside the AMM.

Holdfast moves the incentive into the hook itself. No external token, no lockup. Loyalty is scored and rewarded natively at the protocol level.

How it works

Four mechanisms, one loyalty loop

01

Retention scoring

Every position accrues a score from liquidity share, tenure (blocks active), and pool volatility. Loyalty and stability are rewarded, not just position size.

score = liquidity share × tenure (blocks) × pool volatility
02

Partial IL compensation

Realized impermanent loss is computed at claim time with log-return math (Solady lnWad), and a portion is compensated from a shared bonus pool. This is honest: the compensation is partial and bounded by the pool. It is not a full hedge.

03

Tier badges

Reaching Bronze, Silver, or Gold requires both a score threshold and a minimum tenure in blocks. The dual criterion filters mercenary capital that arrives and leaves quickly. Each tier is an on-chain ERC-721 badge with real IPFS art.

Holdfast Bronze badge Bronze
Bronze
Holdfast Silver badge Silver
Silver
Holdfast Gold badge Gold
Gold
04

Aave V3 yield compounding

Idle bonus pool USDC is supplied to Aave V3, held as aUSDC. The reward pool earns yield while it waits to be claimed, so it grows on its own.

Architecture

Subscriber-native by design

One contract implements both a Uniswap v4 BaseHook and an ISubscriber. Position ownership and liquidity come from the canonical PositionManager through subscriber callbacks, keyed by tokenId. There is no caller-asserted identity.

Swap path
Swap on pool
afterSwap
capture 15% of USDC delta
YieldRouter
Aave V3
aUSDC
Subscriber path
PositionManager
mint, modify, burn
Subscriber callbacks
keyed by tokenId
Holdfast Hook
score, tier, claim

Fee capture redirects a fixed portion (default 15%) of the existing pool fee into the bonus pool. Swappers pay no extra fee; the share is taken as USDC and supplied to Aave.

Demo walkthrough

One loyalty cycle, on-chain

A live cycle on Base Sepolia: accrue score, reach a tier, let real swaps fund the pool, then claim a share. The pool refills from swap flow, with no manual seeding.

  1. 01 · Accrue

    Score builds on every swap

    A subscribed position accrues score from liquidity share, tenure, and volatility as swaps move through the pool.

  2. 02 · Reach tier

    Silver badge is minted

    Once the score threshold and the minimum tenure are both met, the hook mints a tier badge. In the live demo, position #24915 reached Silver.

  3. 03 · Capture

    Swaps fund the bonus pool

    WETH to USDC swaps redirect 15% of the USDC delta, scaled 1.0x to 1.5x by volatility, into the YieldRouter and on to Aave. In the demo the router aUSDC grew from 0 to ~0.20 USDC, purely from capture.

  4. 04 · Claim

    The loyal LP gets paid

    The bonus pool splits into a 70% tier arm (Bronze 25 / Silver 35 / Gold 40, pro-rata by score within a tier) and a 30% realized-IL arm. As the sole Silver member, the position claims about 24.5% of the pool.

Accrue, reach tier, capture funds the pool, claim pays out. The cycle is self-funding from real swap flow.

Deployment

Live on Base Sepolia