FareCollector on Robinhood Chain

Uniswap v4 Hook Contract 0x7c154fbd2b9f0ccf89ce1ebd8fd89d6663cfa0cc on Robinhood Chain · Fee sharing · Verified contract

Volume (24h)
$0
Value locked (TVL)
<$0.01
All-time volume
$1.11M
Pools using this hook
1
Swaps (24h)
0 (0 traders)
Total swaps
25,517

What it does

Charges a configurable fare, capped at 10%, on native ETH swaps into and out of a pool paired with a specified line token, with an optional signed-pass gate during an initial curfew period.

How it works step by step

  • Restricts pool initialization to native ETH paired with the configured line token.
  • Rejects exact-output swaps outright.
  • Takes an inbound fare on ETH-in swaps as a percentage of the input via a before-swap return delta.
  • Takes an outbound fare on ETH-out swaps as a percentage of the output via an after-swap return delta.
  • Accumulates collected fares as native balance and forwards them to a depot address through remit().
  • During the gated period before the curfew, requires EIP-712 signed passes from a conductor key with per-rider caps, expiry and use counts.
Swap behaviour
Exact-output swaps are rejected. On zero-for-one swaps the hook takes an inbound fare from the native input before the swap; on one-for-zero swaps it takes an outbound fare from the native output after the swap. While the gate is active, swaps require a valid conductor-signed pass with an unspent use.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Charges an inbound fare on zero-for-one swaps (native currency0 in) as inboundFareBps of the input amount, taken via a before-swap return delta, and an outbound fare on one-for-zero swaps as outboundFareBps of the native amount received, taken via an after-swap return delta. Both are capped at 10% and set by the owner. Fares accumulate as native balance in the hook and are forwarded to the depot by remit().
Owner & admin controls
Owner (Ownable) can call setFares to change inbound and outbound fare basis points up to a hard cap of 1000 bps (10%), setDepot to redirect where collected native balance is remitted, setConductor to rotate the signing key that authorizes gated passes, and open() to permanently release the gate before the curfew. renounceOwnership is blocked while the gate is still active. Ownership transfer is standard Ownable.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize restricts pools to native ETH paired with the specified line token. beforeSwap rejects exact-output swaps, applies the optional gated pass check, and takes the inbound fare. afterSwap takes the outbound fare from the swap output. beforeSwapReturnDelta and afterSwapReturnDelta let the hook claim these fare amounts from the pool flow.

Security & trust assessment

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

Who controls it: The owner can raise fares up to 10% on each side at any time, redirect all accumulated fare revenue to any depot address, and rotate the conductor key that controls access during the gated period. The owner can also open the gate early, after which swaps are no longer restricted by pass signatures.

Risk to user funds: The hook holds native ETH collected as fares until remit() is called, and that balance can be forwarded by anyone to the configured depot. The hook does not custody LP principal, but the owner can change fees and the depot address, and during the gated window it can block swaps lacking valid conductor-signed passes. Fares are taken through return deltas, so trader output is reduced by the fare amount.

Security findings

  • [medium] Owner-adjustable swap fares: Owner can change inbound and outbound fares between 0 and 10% at any time via setFares, which directly alters the cost of every swap on the pool.
  • [medium] Owner can redirect fare revenue: setDepot lets the owner redirect all accumulated native fare balance to a new address, and remit() sends the full balance to whatever depot is set.
  • [medium] Conductor signing key controls access during gate: While gated, every exact-input zero-for-one swap must carry a signature from the conductor key over a pass that binds rider, pool key, cap, use count and expiry. A compromised or rotated conductor key determines who can trade during the gate.
  • [info] Return-delta fee capture and exact-output rejection: Swaps are rejected when amountSpecified is non-negative (exact output), and the hook takes return deltas on both sides, so it can alter the net amounts received by traders.
  • [info] Non-upgradeable immutable core: Hook is not upgradeable; behaviour is fixed in bytecode aside from owner-set parameters and addresses.

Contract details

Verified source
Yes (FareCollector)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
7,852 bytes
Upgradeable proxy
No
Detected patterns
ownable, return-delta

Pools using FareCollector