ArrakisPrivateHook on Robinhood Chain

Uniswap v4 Hook Contract 0xa4e6f5500e88691fdcb289aa0e99067481434880 on Robinhood Chain · Dynamic fee · Verified contract

Volume (24h)
$99.81K
Value locked (TVL)
$46.90K
All-time volume
$2.43M
Pools using this hook
11
Swaps (24h)
971 (171 traders)
Total swaps
27,568

What it does

A private-vault fee hook for Arrakis Uniswap v4 pools: the vault's module sets a directional LP fee for the pool, and only that module may add liquidity to it.

How it works step by step

  • Stores a per-pool record mapping the PoolId to the authorized Arrakis LP module plus a zero-for-one fee and a one-for-zero fee.
  • setFees can be called only by the vault's executor (or the universal executor fallback) and only after checking the module is the vault's active module, the poolKey matches the module's own pool, and the vault is registered as a private vault in the factory.
  • Fees are validated with LPFeeLibrary and stored with the override flag set, so the pool uses the hook-supplied fee on every swap in each direction.
  • beforeAddLiquidity reverts with OnlyModule unless the sender is the pool's authorized module, which makes the pool private to the vault.
  • Emits SetFees whenever a pool's fee configuration is written.
Swap behaviour
beforeSwap returns the stored directional fee override for the pool (zeroForOne or oneForZero). It reverts with ModuleNotSet if no module is registered for the pool. It takes no token deltas and does not modify swap amounts.
Liquidity behaviour
beforeAddLiquidity only lets the registered module add liquidity; other senders revert. beforeRemoveLiquidity and afterAddLiquidity/afterRemoveLiquidity revert with NotImplemented, which the hook does not use. Removal is therefore governed by the pool manager and the module's own flow.
Fee behaviour
Fees are set per pool and per direction by the vault executor through setFees. Each value is validated against the LP fee bounds and then applied as an override on every swap. The hook takes no fee itself and does not share fees.
Owner & admin controls
No owner or pause function is present. Fee configuration is controlled by the vault executor (or universal executor when none is set), and access is checked against the manager's vaultInfo and the module's active status. The manager and factory are immutable. No upgrade mechanism is visible, and the contract is not a proxy.

Enabled Uniswap v4 callbacks

beforeAddLiquidity, beforeSwap

beforeAddLiquidity: gates liquidity additions so only the pool's Arrakis module can add liquidity. beforeSwap: returns the directional LP fee override for each swap.

Security & trust assessment

Risk level: low (verified source, high confidence).

Who controls it: The vault executor or the universal executor can set any valid fee in each direction on the pool, at any time. Changes take effect immediately on live swaps.

Risk to user funds: The hook does not hold, move or take tokens. It returns no before-swap delta and no return delta, and it cannot block removals. Its effect on users is limited to the fee applied to swaps and to restricting who may add liquidity.

Security findings

  • [medium] Executor-controlled fee rate: The vault executor can set any directional fee that passes LPFeeLibrary.validate, so it can set a high fee and extract value from swappers on that pool. The bound is the protocol's maximum fee, not a stricter limit set here.
  • [low] Fee changes apply to live pools: setFees can be called at any time and takes effect on the next swap, so an executor can reprice an active pool without notice.
  • [low] Universal executor fallback: If vaultInfo returns no executor, the manager's universalExecutor is authorized to set fees for that vault's pool, which widens the set of addresses with fee control.
  • [info] Dependence on external contracts: Authorization and pool identity rely on the manager, factory, module and metaVault returning consistent values. Changes to those contracts can change what the hook accepts.
  • [info] Unimplemented hooks revert: Hook functions that are not used revert with NotImplemented. This is expected, but it means the pool can only use the add-liquidity and swap paths.

Contract details

Verified source
Yes (ArrakisPrivateHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
6,187 bytes
Upgradeable proxy
No
Detected patterns
dynamic-fee, liquidity-management

Pools using ArrakisPrivateHook