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
- TSLA / USDG (Dynamic fee) — 24h volume $60.13K, TVL $14.28K, 384 swaps today
- USDG / CRCL (Dynamic fee) — 24h volume $19.28K, TVL $20.23K, 287 swaps today
- USDG / META (Dynamic fee) — 24h volume $12.27K, TVL $10.45K, 92 swaps today
- USDG / NVDA (Dynamic fee) — 24h volume $8.12K, TVL $1.94K, 208 swaps today
- TSLA / USDG (Dynamic fee) — 24h volume $0, TVL <$0.01, 0 swaps today
- USDG / NVDA (Dynamic fee) — 24h volume $0, TVL <$0.01, 0 swaps today
- TSLA / USDG (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- TSLA / USDG (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- SPY / AMD (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- SPY / AMZN (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- SPY / TSLA (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today