FundByHook on Ethereum
Uniswap v4 Hook Contract 0x6acb2a5445de09dd9e2b013cad6e5800d1e928c4 on Ethereum · Custom pricing · Verified contract
- Volume (24h)
- $71
- Value locked (TVL)
- $7.03K
- All-time volume
- $305.65K
- Pools using this hook
- 1
- Swaps (24h)
- 1 (1 traders)
- Total swaps
- 670
What it does
A single-sided curve where the hook owns all pool liquidity, buyers pay 1% in and sellers pay 10% tax out, and the team receives fees plus a weekly 1% draw of the pool's ETH.
How it works step by step
- Seeds a single v4 position holding 400 tokens from the bottom of the range up to a fixed start price, with no initial ETH.
- Charges a 1% dynamic fee on buys that accrues to the position and can be claimed by the team.
- Takes a 10% tax on the ETH out of every sell and sends it to the team address.
- Restricts the first 10 blocks of buying to addresses that called probablyNothing(), then opens to all.
- Lets the team draw 1% of pool ETH once per week by decreasing liquidity and selling the returned tokens back into the pool.
- Only allows liquidity to be added by the hook's own seed mint and blocks any pool initialization by others.
- Swap behaviour
- Buys (ETH in, token out) pay a 1% dynamic fee and are gated to enlisted addresses for the first 10 blocks after seeding. Sells (exact-input only) are capped by available ETH and pay a 10% tax on the ETH out, which goes to TEAM while the seller receives the net amount via afterSwapReturnDelta.
- Liquidity behaviour
- Only the hook's own seed mint routed through the PositionManager may add liquidity (beforeAddLiquidity reverts otherwise). Liquidity removal is not blocked by a hook callback; the single position is only decreased by the team's weekly draw (fundMyWork) and zero-liquidity fee collection.
- Fee behaviour
- Buys pay a 1% dynamic LP fee (BUY_FEE_PIPS = 10000) via beforeSwap override; sells pay no pool fee but a 10% sell tax on the ETH out is taken in afterSwap and sent to TEAM. Buys through buy() charge the same 1% manually and push it to TEAM. Accrued LP fees can be collected permissionlessly via claimFees() and go to TEAM.
- Owner & admin controls
- No admin, owner or pause controls. The TEAM address receives the sell tax and weekly draw and can call fundMyWork() once per 7 days; the DEPLOYER can call seed() only once. Immutable TOKEN, TEAM, POSM and PERMIT2 addresses; no upgrade path.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, afterSwapReturnDelta
beforeInitialize blocks any pool initialization by others (only the hook's own seed initializes). beforeAddLiquidity restricts liquidity additions to the hook's seed mint. beforeSwap enforces the 10-block guestlist gate on buys, exact-input-only and sell size limits, and sets the dynamic buy fee. afterSwap takes the 10% sell tax to TEAM and emits trade events. afterSwapReturnDelta lets afterSwap return the tax amount as a delta so the seller receives the net ETH.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: TEAM cannot pause, change parameters or move the position arbitrarily; it can only receive fees and draws and trigger one 1% draw per week. The deployer role is one-shot. Trading is otherwise permissionless with no privileged swap or withdrawal path for an operator.
Risk to user funds: The hook holds the pool's entire ETH and token inventory as a v4 position it controls, plus any owed ETH balances. Users buying/selling are exposed to the 10% sell tax and the 1% buy fee; the team's weekly draw removes 1% of pool ETH, lowering the price for holders. No function lets an admin withdraw user funds directly.
Security findings
- [info] Time-limited buy guestlist: During the first 10 blocks after seeding, buys through the router require the transaction origin to be enlisted via probablyNothing(); buy() requires msg.sender enlistment. Sells are never gated.
- [low] Team draw moves pool price and liquidity: The weekly draw removes 1% of the ETH in the position by decreasing liquidity and selling the returned tokens back into the pool at a computed target price. Price and liquidity are derived from pool state read in the same transaction.
- [info] Sell tax redirected to team: The 10% sell tax is taken from every sell and sent to TEAM, with a 100k gas-limited ETH push and a fallback owed mapping so a rejecting recipient cannot revert trades.
- [info] Sell size capped to pool ETH: Sell and buy amounts are constrained by maxSell() and the single-sided curve; the position holds all pool ETH, so a large sell beyond available ETH reverts rather than corrupting the pool.
- [low] Economic extraction by team: Permission-based design with only the team able to draw; no owner key can drain user funds, but the team draw and tax mechanics reduce what sellers receive relative to a standard constant-product pool.
Contract details
- Verified source
- Yes (FundByHook)
- Compiler
- solc 0.8.33+commit.64118f21
- Bytecode size
- 16,098 bytes
- Upgradeable proxy
- No
- Detected patterns
- moves-currency, return-delta, self-unlock, tax
Pools using FundByHook
- ETH / RISK (Dynamic fee) — 24h volume $71, TVL $7.03K, 1 swaps today