FlockFallDynamicFeeHook on Robinhood Chain
Uniswap v4 Hook Contract 0xdd1a91b3093c12bbe38ab80537f1b53a7d07a880 on Robinhood Chain · Dynamic fee · Verified contract
- Volume (24h)
- $795
- Value locked (TVL)
- $34.88K
- All-time volume
- $1.72M
- Pools using this hook
- 1
- Swaps (24h)
- 5 (3 traders)
- Total swaps
- 5,076
What it does
A Uniswap v4 hook for the single FlockFall ETH/SHELL pool that sets each swap's LP fee dynamically (1%, 2%, 3% or 5%) from an external fee policy and restricts liquidity additions until a bootstrap venue has placed initial liquidity.
How it works step by step
- Accepts pool initialization and liquidity adds only for the canonical ETH/SHELL pool key with dynamic fee flag and fixed tick spacing.
- Restricts pool initialization to the bootstrapVenue address.
- Blocks non-bootstrap liquidity adds until bootstrapVenue.bootstrapLiquidityPlaced() returns true.
- On each swap queries policy.currentFeeDecision() for hour-based fee, source hash and stale flag.
- Validates the selected fee is one of 1%, 2%, 3% or 5% and applies it as the override LP fee.
- Emits DynamicFeeSelected for each swap for off-chain auditing.
- Swap behaviour
- On every swap beforeSwap reads the current fee decision from the policy, checks it is one of the allowed bands, emits DynamicFeeSelected and returns that fee as an override with no hook delta.
- Liquidity behaviour
- beforeAddLiquidity allows adds only from bootstrapVenue or after bootstrapVenue.bootstrapLiquidityPlaced() returns true; otherwise reverts MarketBootstrapPending. beforeRemoveLiquidity is not enabled, so removals are not hook-gated. No after-liquidity hooks or return deltas.
- Fee behaviour
- Each swap calls policy.currentFeeDecision(); the returned feePips must be one of 10000, 20000, 30000 or 50000 (1%, 2%, 3%, 5%) or the swap reverts with UnsupportedFeeBand. The fee is returned with OVERRIDE_FEE_FLAG so PoolManager charges that LP fee once. The hook takes no fee from caller input and adds no hook delta.
- Owner & admin controls
- No owner or pause functions in the hook itself. Fee selection is delegated to an immutable policy contract (IMarketFeePolicy) whose currentFeeDecision() can latch hour finality and return fee, sourceHash and stale flags; the policy's own admin controls are not visible in the supplied source. bootstrapVenue is immutable and gates beforeInitialize and the pre-bootstrap window of beforeAddLiquidity. Fee bands are fixed constants (1%, 2%, 3%, 5%).
Enabled Uniswap v4 callbacks
beforeInitialize, beforeAddLiquidity, beforeSwap
beforeInitialize: restricts pool initialization to the canonical pool key and to bootstrapVenue as sender. beforeAddLiquidity: enforces canonical pool key and the bootstrap gating described above. beforeSwap: enforces canonical pool key, fetches the dynamic fee from the policy, validates the fee band and emits DynamicFeeSelected.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: The hook has no privileged key of its own. Its behaviour depends on the immutable policy and bootstrapVenue addresses; if the policy contract is controlled by a single party, that party could influence the fee within the four allowed bands and the stale/finality flags. Whether the policy is upgradeable or admin-controlled cannot be determined from the hook source.
Risk to user funds: The hook does not custody tokens, takes no hook delta and cannot move pool funds directly. User funds are exposed indirectly: swaps can revert if the policy fails or returns an unsupported band, and LP adds can be blocked by the bootstrap gate. Trader fees are set by the policy within 1% to 5%.
Security findings
- [medium] Swaps depend on external policy contract: beforeSwap calls an external policy whose currentFeeDecision() is non-view and can latch state on first swap; swaps depend on that call succeeding and on it returning an allowed band.
- [low] Policy can move the fee within allowed bands: The policy returns a fee that is validated only against four allowed values, so any policy compromise can set fees anywhere in 1% to 5% per hour, changing trader costs.
- [low] Liquidity adds gated by external flag: Liquidity adds are blocked until bootstrapVenue reports bootstrapLiquidityPlaced(); a bootstrap venue that never sets this flag would permanently block non-venue liquidity adds.
- [info] Single canonical pool only: Pool keys are hard-wired to one currency pair, tick spacing and dynamic-fee flag, and bootstrapVenue is the only initializer, so other pools cannot use this hook.
Contract details
- Verified source
- Yes (FlockFallDynamicFeeHook)
- Compiler
- solc 0.8.30+commit.73712a01
- Bytecode size
- 3,997 bytes
- Upgradeable proxy
- No
- Detected patterns
- dynamic-fee
Pools using FlockFallDynamicFeeHook
- ETH / SHELL (Dynamic fee) — 24h volume $795, TVL $34.88K, 5 swaps today