DualPoolHook on Robinhood Chain
Uniswap v4 Hook Contract 0xd1bcbcca41f3bdb6b4812652959c6df725ea2ac0 on Robinhood Chain · Liquidity management · Verified contract
- Volume (24h)
- $5.49K
- Value locked (TVL)
- $0
- All-time volume
- $311.66K
- Pools using this hook
- 34
- Swaps (24h)
- 304 (137 traders)
- Total swaps
- 23,618
What it does
DualPoolHook is a Uniswap v4 hook that pools two-token liquidity in ERC-4626 vaults and deploys it as just-in-time concentrated positions across configurable tick ranges during each swap.
How it works step by step
- Deploys multi-range concentrated liquidity from vault and raw token balances during each swap, then tears it down afterwards
- Rehypothecates idle assets into owner-configured ERC-4626 vaults between swaps and withdraws only what is needed for deployment
- Issues non-transferable pool shares for LP deposits and redemptions, with a bootstrap seeded by the owner and virtual-shares inflation protection
- Enforces per-pool deposit locks, deadlines, slippage bounds and a reentrancy JIT lock to prevent deposit-swap-withdraw sniping
- Blocks direct v4 liquidity modification and pool initialization so only the hook controls the pool's price and depth
- Swap behaviour
- beforeSwap reverts if the pool is paused, otherwise takes the JIT lock and deploys the configured buckets from pool-owned balances (redeeming claims and withdrawing only the shortfall from vaults). afterSwap removes those positions, settles the hook's net deltas, re-deposits idle balances into vaults and releases the lock. Swaps charge the static pool fee.
- Liquidity behaviour
- Direct external addLiquidity/removeLiquidity to the v4 pool is blocked. Hook-level share deposits (addLiquidity, gated by owner or external-deposit flag) and withdrawals (removeLiquidity, with same-block/minimum-block deposit lock and slippage bounds) mint and burn pro-rata shares over assets held in ERC-4626 vaults, raw ERC-20 and ERC-6909 claims.
- Fee behaviour
- Pool fee is the static PoolKey.fee fixed at creation; dynamic-fee pools are rejected. The hook does not set or share fees and ignores hookData.
- Owner & admin controls
- Owner (Ownable2Step, renounce disabled) controls initializePool, bootstrap, setDistribution, setExternalDeposits, setPoolLive (per-pool pause), refreshVaultApproval, and emergencyRevokeVault which pauses the pool, disables external deposits, zeroes vault allowances and best-effort drains vault positions. Vault and minDepositBlocks bindings are immutable after pool init. Owner transfer is two-step.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap
beforeInitialize: blocks direct pool initialization so only initializePool can set the starting price. beforeAddLiquidity/beforeRemoveLiquidity: revert external LP modifications so only the hook's JIT cycle adds or removes positions. beforeSwap: pauses swaps if the pool is not live, takes the JIT lock, and deploys multi-range concentrated liquidity from vault and pool balances. afterSwap: removes the JIT positions, settles net deltas, re-deposits idle balances to vaults and clears the lock.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: The owner can pause any pool, change the distribution weights and tick ranges, toggle external deposits, and run emergencyRevokeVault. The owner cannot change the swap fee, but can sweep vault-held assets back to the hook during emergencyRevokeVault and the hook holds the pool's pooled capital, so a compromised owner key could pause or redirect exposure within the hook's own accounting.
Risk to user funds: Depositors' funds are held in the hook as ERC-20, ERC-6909 claims and ERC-4626 vault shares that the hook manages. The owner can pause swaps, change the deployment distribution and revoke vault exposure, and a compromised vault or ERC-20 could affect pooled balances. Liquidity exits via removeLiquidity remain open while the pool is paused.
Security findings
- [medium] Vault trust and infinite approval: Vaults are per-currency ERC-4626 contracts with max approval granted at init; a compromised or malicious vault could drain the hook's raw ERC-20 balance for that currency, which is shared across pools that use the same token.
- [medium] Owner pause and emergency revoke: Owner can pause a pool via setPoolLive, which causes beforeSwap to revert with PoolNotLive, halting trading, and can disable external deposits and revoke vault exposure via emergencyRevokeVault.
- [low] Owner-controlled distribution: Owner can replace the liquidity distribution at any time via setDistribution (blocked only during a JIT cycle), changing where pool capital is deployed and the effective swap curve.
- [info] Anti-sniping and reentrancy guards present: Per-pool deposit lock (minDepositBlocks) and deadline/slippage checks on addLiquidity and removeLiquidity protect against same-block deposit-then-withdraw sniping; the JIT lock blocks reentrant LP calls during a swap cycle.
- [info] Vault validation at initialization: Vault fee-on-entry and fee-on-exit tokens are rejected at pool initialization, and vault asset mismatches are rejected, which reduces the chance of silently mis-accounted vault shares.
Contract details
- Verified source
- Yes (DualPoolHook)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 24,412 bytes
- Upgradeable proxy
- No
- Detected patterns
- dynamic-fee, liquidity-management, moves-currency, ownable, self-unlock
Pools using DualPoolHook
- WETH / USDG (0.01% fee) — 24h volume $3.62K, TVL $0, 232 swaps today
- TSLA / USDG (0.05% fee) — 24h volume $329, TVL $0, 9 swaps today
- USDG / COIN (0.05% fee) — 24h volume $291, TVL $0, 8 swaps today
- USDG / MU (0.05% fee) — 24h volume $260, TVL $0, 10 swaps today
- RDDT / USDG (0.05% fee) — 24h volume $183, TVL $0, 5 swaps today
- USDG / AMD (0.05% fee) — 24h volume $161, TVL $0, 7 swaps today
- USDG / PLTR (0.05% fee) — 24h volume $122, TVL $0, 8 swaps today
- USDG / NVDA (0.05% fee) — 24h volume $110, TVL $0, 3 swaps today
- USDG / META (0.05% fee) — 24h volume $72, TVL $0, 3 swaps today
- SPCX / USDG (0.05% fee) — 24h volume $71, TVL $0, 3 swaps today
- USDG / QQQ (0.05% fee) — 24h volume $50, TVL $0, 2 swaps today
- SPY / USDG (0.05% fee) — 24h volume $49, TVL $0, 2 swaps today
- USDG / MSFT (0.05% fee) — 24h volume $48, TVL $0, 1 swaps today
- USDG / MSTR (0.05% fee) — 24h volume $47, TVL $0, 2 swaps today
- AMZN / USDG (0.05% fee) — 24h volume $25, TVL $0, 1 swaps today
- AMC / USDG (0.05% fee) — 24h volume $19, TVL $0, 3 swaps today
- USDG / INTC (0.05% fee) — 24h volume $15, TVL $0, 2 swaps today
- TTWO / USDG (0.05% fee) — 24h volume $13, TVL $0, 1 swaps today
- GOOGL / USDG (0.05% fee) — 24h volume $5.77, TVL $0, 1 swaps today
- USDG / SNDK (0.05% fee) — 24h volume $2.11, TVL $0, 1 swaps today