Custom pricing hook on Base

Uniswap v4 Hook Contract 0x1f904dbb36f21d079739bda491534fa6432a2888 on Base · Custom pricing

Volume (24h)
$0
Value locked (TVL)
$0
All-time volume
$0
Pools using this hook
1
Swaps (24h)
0 (0 traders)
Total swaps
0

What it does

This unverified hook replaces normal pool liquidity with its own wrap/unwrap swaps between an underlying token and a wrapper token, depositing into an external vault, with no confirmed fee percentage and a multisig-controlled withdraw and close capability.

How it works step by step

  • Acts as a wrapper-style pool: swaps convert between an underlying token and a wrapper token instead of using normal AMM liquidity.
  • Blocks normal liquidity additions (reverts with a 'liquidity not allowed' error), so the pool is driven entirely by the hook's custom swap logic.
  • Appears to deposit underlying tokens into an external ERC-4626-style vault and track 'fortress' and 'tower' state through sync, collect and close functions.
  • Has a withdrawToken function and multisig/owner lookups, which suggests privileged sweeping of tokens held by the hook.
Swap behaviour
Before each swap the hook takes over the trade with a return delta, wrapping or unwrapping between the underlying and wrapper currency. Only one swap direction or mode appears supported (errors exist for unsupported exact-input or exact-output), and any fee or rate applied cannot be confirmed from bytecode.
Liquidity behaviour
Adding liquidity is rejected by the hook, so the pool has no regular LP positions. Remove-liquidity callbacks are disabled, so the hook can never block withdrawals.
Fee behaviour
No explicit fee percentage could be confirmed from bytecode; the pool fee is validated at initialization and any value captured flows through the hook's vault deposits and collect function.
Owner & admin controls
Functions like withdrawToken, collect, closeTower and an unnamed initializer appear privileged, likely gated via a multisig's owner list, but exact restrictions cannot be verified from bytecode. closeTower seems able to change the contract's state, possibly ending swaps.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeSwap, beforeSwapReturnDelta

beforeInitialize checks the pool tokens and fee are valid; beforeAddLiquidity rejects normal liquidity; beforeSwap runs the custom wrap/unwrap logic; beforeSwapReturnDelta lets the hook settle the swap amounts itself.

Security & trust assessment

Risk level: medium, estimated (decoded bytecode, low confidence).

Who controls it: A multisig whose owners are checked on-chain appears to control withdrawals, collection and closing. Its worst action is likely stopping the mechanism or sweeping hook-held tokens.

Risk to user funds: The hook handles traders' swap tokens during each swap and holds or deposits underlying tokens in an external vault; exact fee or rate bounds are unknown. There are no LP positions, so no LP principal can be locked.

Security findings

  • [medium] Hook fully controls swap amounts: Swap return delta is enabled, so the hook decides how much traders receive; the exact conversion rate is not verifiable without source.
  • [medium] Token withdrawal function: A withdrawToken function can transfer tokens held by the hook, probably to a multisig-controlled destination; access control is unverified.
  • [low] Swaps can be closed: A closeTower function changes a state flag that other functions check, which may stop the wrapping mechanism.
  • [info] No LP principal at risk: Liquidity additions are blocked and remove-liquidity callbacks are disabled, so there is no LP principal to lock.

Contract details

Verified source
No
Bytecode size
11,772 bytes
Upgradeable proxy
No
Detected patterns
erc20, moves-currency, return-delta, self-unlock

Pools using Custom pricing hook