Gander on Robinhood Chain

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

Volume (24h)
$0
Value locked (TVL)
$0
All-time volume
$0
Pools using this hook
1
Swaps (24h)
0 (0 traders)
Total swaps
0

What it does

Gander takes a fixed ETH cut of 0.75% to 5% from every swap in its home pool, so both buyers and sellers pay the same percentage and no direction is favoured, and that cut is split among the creator, lobby, guild and operator pockets.

How it works step by step

  • Charges a fixed ETH cut of 75 to 500 bps on every swap in the single home pool (ETH paired with the coin itself), taken through beforeSwap or afterSwap return deltas depending on swap leg
  • Keeps the cut inside the PoolManager as an ERC-6909 claim minted to the hook and books it into four pockets: 80% creator side (split player/lobby by creditsBps), 10% guild, remainder to operator
  • Lets only each pocket's designated payee call cashOut, which burns the claim and sends ETH to that payee via unlockCallback
  • Initializes only the canonical home pool, callable once and only by the Kiosk address recorded at deployment
  • Mints the full 1,000,000,000 coin supply to the deployer at construction and renounces ownership in the constructor
  • Reverts all liquidity and donate hook callbacks, so only swaps are supported
Swap behaviour
Every swap in the home pool pays the cut. Buys with exact ETH input and sells with exact ETH output have the cut taken before the pool runs (buy: carved from ETH in; sell exact out: pool asked for grossed-up ETH). Buys with exact coin output and sells with exact coin input have the cut taken after the swap, based on the ETH actually moved. Partial fills revert for legs that were pre-charged.
Liquidity behaviour
No liquidity callbacks. Add, remove and donate hook callbacks all revert with Unsupported.
Fee behaviour
Uses a zero static pool fee. Instead the hook takes a fixed percentage cut in ETH, set immutably between 0.75% and 5% at deployment, split into pocket balances as described above.
Owner & admin controls
Ownership is renounced in the constructor, so owner() returns zero. Every cut, payee, creditsBps and the cut rate are immutable. No pause, blacklist, upgrade or parameter-change function exists in the code shown. Each pocket's payee alone controls withdrawal of that pocket.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize restricts pool creation to the canonical home pool from the Kiosk. beforeSwap and afterSwap take the ETH cut and book it. beforeSwapReturnDelta and afterSwapReturnDelta let the hook claim part of the swap amounts as the cut.

Security & trust assessment

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

Who controls it: No privileged key can change the cut, payees, or pool configuration after deployment; ownership is renounced. The only privileged party is each immutable payee, who can withdraw its own pocket balance.

Risk to user funds: The hook holds no user principal, but it does take ETH from every swap by return delta (cut between 0.75% and 5%) and holds that value as ERC-6909 claims inside the PoolManager until a payee cashes out. It cannot block swaps by pausing, but a revert in the accounting paths would block swaps in the home pool.

Security findings

  • [medium] Hook takes value through return deltas: beforeSwap and afterSwap return non-zero deltas that reduce what swappers receive, so the hook directly moves trader value into pockets; the rate is fixed at 0.75% to 5% by constructor arguments, not adjustable later.
  • [low] Immutable payees control claimed ETH: cashOut and the unlock path send the full claimed ETH to the pocket's payee address with no cap beyond the booked balance; a compromised payee key can drain only its own pocket, but there is no recovery mechanism.
  • [low] Swap success depends on exact-amount accounting: afterSwap reverts with PartialFill if a pre-charged leg does not fill exactly as computed, so partially filled or unusual swaps can be blocked.
  • [info] Mutable state via unverified creation path: The hook relies on Hooks.validateHookPermissions at construction and a mined CREATE2 salt; the Kiosk factory that deploys it is outside the source provided and was not reviewed.

Contract details

Verified source
Yes (Gander)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
8,176 bytes
Upgradeable proxy
No
Detected patterns
erc20, launchpad, moves-currency, ownable, return-delta, self-unlock

Pools using Gander