IncubationHook on Ethereum
Uniswap v4 Hook Contract 0x1a6b43282af511b6b94714022a4b05702c02c5cc on Ethereum · Dynamic fee · Verified contract
- Volume (24h)
- $1.62K
- Value locked (TVL)
- $2.91K
- All-time volume
- $35.41K
- Pools using this hook
- 1
- Swaps (24h)
- 3 (3 traders)
- Total swaps
- 225
What it does
A Shell protocol hook on the canonical SHELL/ETH Uniswap v4 pool that charges a fixed 3% buy and 5% sell fee in SHELL, funds a reserve and LP nursery from those fees, and lets holders lock SHELL for 7 to 180 days to hatch a share of the reserve or crack early for a 50% refund.
How it works step by step
- Charges a fixed 3% buy fee and 5% sell fee on SHELL in the canonical SHELL/ETH pool, collected in SHELL via return deltas and poolManager.take.
- Splits every fee 90% to a reserve pool and 10% to a per-unit nursery accumulator for canonical LPs.
- Lets users incubate at least 1,000 SHELL for 7, 30, 90 or 180 days with 1.0x, 1.5x, 2.5x or 5.0x weighting.
- Hatch pays principal plus a weight-proportional share of the reserve after maturity; crack refunds 50% of principal before maturity and sends the penalty to the reserve.
- Tracks canonical LP positions on add and remove liquidity and lets anyone trigger claimNursery to pay the stored owner.
- Swap behaviour
- On swaps against the canonical pool, beforeSwap reverts for any other pool and takes a 3% (buys) or 5% (sells) SHELL fee via return deltas; afterSwap drains that fee to the hook, sending 90% to reservePool and 10% to the nursery accumulator.
- Liquidity behaviour
- afterAddLiquidity and afterRemoveLiquidity track liquidity for canonical-pool positions only, registering owner and per-unit nursery checkpoints. Liquidity itself is not moved or held by the hook; LP nursery rewards accrue pro-rata and are claimable permissionlessly by anyone to the stored position owner.
- Fee behaviour
- Fixed fees on canonical SHELL/ETH pool swaps: 3% on buys and 5% on sells, taken in SHELL via beforeSwap/afterSwap return deltas. Each fee splits 90% to the reserve pool and 10% to the LP nursery accumulator. The pool's own LP fee is not overridden (lpFeeOverride is 0).
- Owner & admin controls
- No owner or admin key: the contract has no pause, upgrade path or fee router. The only privileged action is setCanonicalPoolKey, callable once by the immutable deployer address; after that the canonical pool key is fixed. Parameters (fees, penalty, tier durations and multipliers) are hardcoded constants.
Enabled Uniswap v4 callbacks
afterAddLiquidity, afterRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
afterAddLiquidity and afterRemoveLiquidity: record canonical LP positions and checkpoint nursery accrual. beforeSwap: reverts for non-canonical pools and, for SHELL-specified swaps, takes the fee as a specified-side delta. afterSwap: drains fees via poolManager.take into the reserve and nursery. beforeSwapReturnDelta and afterSwapReturnDelta: allow the hook to consume a portion of swap amounts as fees.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: Essentially none after setup: no admin, pause or upgrade. The only privileged actor is the deployer, who can set the canonical pool key exactly once before it is locked; a malicious or mistaken key cannot be changed later, but it is also constrained to include SHELL.
Risk to user funds: The hook holds the entire reserve pool and all active incubation deposits in SHELL and can transfer them only through hatch, crack or claimNursery under the contract's own rules. It has no mechanism to block or seize funds, and swap-side fees are taken by design on canonical swaps. The main exposure is smart contract and economic-design risk rather than privileged control.
Security findings
- [info] Return-delta fee extraction on every canonical swap: Swaps against the canonical pool are intercepted: the hook takes 3% (buy) or 5% (sell) in SHELL via return deltas and moves the fee out with poolManager.take, so users always pay the fee regardless of routing.
- [medium] Hatch payout depends on live reserve and stake state: Crack returns 50% of principal immediately with a flat penalty that is added to the reserve, while hatch pays principal plus a share of the reserve computed from live state at call time; the payout depends on ordering and on the reserve balance, which can be seeded by anyone via seedReserve.
- [medium] Hook holds all user and reserve SHELL with no recovery path: The hook is the sole custodian of the reserve and of all incubated SHELL; if the SHELL token or the pool misbehaves, these funds are not protected by any admin recovery path.
- [low] Nursery accounting rounding and dust: accNurseryPerUnit is updated with integer division by totalCanonicalLiquidity and nursery is only accrued when liquidity exists; fee that arrives while no LPs are registered gets no nursery accumulator update, so the nurseryCut may sit unallocated in nurseryAccrued.
Contract details
- Verified source
- Yes (IncubationHook)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 13,900 bytes
- Upgradeable proxy
- No
- Detected patterns
- moves-currency, return-delta
Pools using IncubationHook
- ETH / SHELL (1.00% fee) — 24h volume $1.62K, TVL $2.91K, 3 swaps today