GridArbHookV2 on Robinhood Chain
Uniswap v4 Hook Contract 0xe956e43a0210de61cf92f930c6afafeb1b1ea8c0 on Robinhood Chain · Custom pricing · Verified contract
- Volume (24h)
- $23
- Value locked (TVL)
- $180
- All-time volume
- $1.31K
- Pools using this hook
- 1
- Swaps (24h)
- 6 (5 traders)
- Total swaps
- 131
What it does
The hook charges traders a 0.15% base fee that rises up to 0.50% on swaps that push the pool price back toward the reference, while the hook itself arbitrages the pool against two v2 pools and keeps the WETH profit, and outside LPs are not allowed.
How it works step by step
- Keeps a protocol-owned GRID/WETH v4 pool anchored to a reference price derived from two Uniswap v2 pools (GRID/VIRTUAL and VIRTUAL/WETH), using a dynamic-fee override on every outside swap.
- Runs self-arbitrage inside beforeSwap and afterSwap: when the v4 pool price diverges from the v2 path beyond fees and GRID tax, it trades its own liquidity against the v2 pools and keeps the WETH profit.
- Charges a displacement-based fee: swaps that move the pool back toward the reference pay a higher fee (capped by maxFee), others pay baseFee.
- Maintains an auto-range of one-sided liquidity: a wide GRID sell side, a tight GRID follower, and a thin WETH buy side, rebuilt or rolled by an operator key at most on set cooldowns.
- Refuses outside liquidity providers through beforeAddLiquidity, so the pool's liquidity is controlled only by the hook itself.
- Holds the owner-controlled exitAll, withdraw and removeLiquidity functions that move all pool and token balances to an arbitrary address.
- Swap behaviour
- Every outside swap first triggers an observation and a possible arb step, then pays feeFor(zeroForOne): baseFee (0.15%) when the trade does not move the price back toward the reference, and a higher displacement fee (up to maxFee, 0.50%) when the trade moves the pool price toward the reference from a displaced position. Trades that push the price away from the reference pay baseFee; trades that correct it pay more.
- Liquidity behaviour
- beforeAddLiquidity always reverts with LpLocked, so outside LPs cannot add liquidity. The owner adds and removes the hook's own positions through addLiquidity/removeLiquidity and exitAll; the operator triggers rerange() and roll() which pull and re-place the hook's positions.
- Fee behaviour
- The pool's stored fee is 0 and every swap is charged an overridden dynamic fee from feeFor: baseFee by default, rising to min(maxFee, displacement - slackBps) for corrective trades. All fees are retained by the pool's liquidity and the arb profit accumulates in the hook as WETH (totalProfit). No fee is shared with outside parties.
- Owner & admin controls
- The owner can set fee parameters (setFees, capped at 1%), arb parameters (setArb, can disable arbitrage), range and trigger parameters (setRange, setTriggers including a price floor), guard parameters (setGuards), and the operator address (setOperator). The owner can pull all liquidity and send all WETH and GRID held by the hook to any address (exitAll), withdraw arbitrary tokens (withdraw), and transfer ownership. The operator can only call rerange() and roll() under the same on-chain conditions. The contract is not behind a proxy and has no pause function found in the source.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap
beforeInitialize restricts pool creation to the owner and validates the WETH/GRID dynamic-fee key; beforeAddLiquidity blocks outside LPs; beforeSwap runs the observation and arb step and returns the overridden dynamic fee; afterSwap runs the arb step after the trade.
Security & trust assessment
Risk level: high (verified source, high confidence).
Who controls it: A single owner key can withdraw all WETH and GRID held by the hook, change fees, disable arbitrage and reassign the operator; a compromised owner or operator key could move or lose all pool value.
Risk to user funds: The hook holds the pool's full liquidity and accumulated profit, and the owner can transfer all of it out at any time, so LP and protocol funds are fully exposed to the owner key.
Security findings
- [high] Owner can drain all pool liquidity and tokens: exitAll(to) and withdraw(token,to,amount) let the owner transfer every WETH and GRID held by the hook, including LP principal, to any address, so LP funds are fully custodial.
- [medium] Owner can change fees and disable arbitrage: setFees allows raising maxFee to 1% immediately and setArb can disable arb, changing trader costs and the peg-keeping mechanism without notice or timelock.
- [medium] Arb trades use external v2 pools with GRID transfer tax: The arb path depends on v2 reserves read on-chain and on GRID's buy/sell tax getters; manipulation of the reference price or tax values could cause the hook to make unprofitable trades, since slippage limits are derived from the same reserves.
- [medium] Operator key can move liquidity: The operator can call rerange() and roll(), which pull and re-place all positions through an internal slide-to-reference swap; the operator cannot withdraw directly but controls when and where the pool's liquidity is repositioned.
- [info] Single-owner trust with no timelock: All privileged actions are gated by a single owner key with no multisig, timelock or upgrade delay visible in the source.
Contract details
- Verified source
- Yes (GridArbHookV2)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 24,055 bytes
- Upgradeable proxy
- No
- Detected patterns
- dynamic-fee, erc20, liquidity-management, moves-currency, ownable, self-unlock
Pools using GridArbHookV2
- WETH / GRID (Dynamic fee) — 24h volume $23, TVL $180, 6 swaps today