Runnel on Robinhood Chain
Uniswap v4 Hook Contract 0x56620fdf341c37af4c0b9d61bff048169c0c20cc on Robinhood Chain · Custom pricing · Verified contract
- Volume (24h)
- $106
- Value locked (TVL)
- $0
- All-time volume
- $106
- Pools using this hook
- 1
- Swaps (24h)
- 10 (5 traders)
- Total swaps
- 10
What it does
Every swap pays the pool's spill of 0.5 to 3 percent of the ETH side plus a surge of up to 25 percent of that spill for the first 90 seconds, so early trades pay the most and later trades pay the base spill only, with the proceeds split between the fitter, branch and works tanks and the sump that buys back and burns the coin.
How it works step by step
- Acts as the Drainpad coin itself: a fixed-supply ERC-20 minted once (1 billion) to the Sluice, with no later minting.
- Hooks only beforeInitialize, beforeSwap and afterSwap (with return deltas) on its single home pool, paired against native ETH as currency0.
- Takes a spill of 50 to 300 bps of each swap's ETH side, plus a surge of up to 25% that decays linearly to zero over 90 seconds after the pour.
- Books the spill into three spill tanks (70% fitter side split between fitter and branch by branchBps, 15% works, remainder and surge to the sump) and mints a matching ERC-6909 ETH claim on the PoolManager.
- Lets only the bearer of each tank draw ETH out via draw(), and lets anyone call flush() to spend up to 0.01 ETH of the sump buying this coin in its own pool and burn the result.
- Has no liquidity hooks, so liquidity provision and removal go straight through Uniswap without any hook logic.
- Swap behaviour
- On swaps, the hook takes a spill of spillBps (50 to 300 bps) of the ETH side, plus a surge that starts at 25% of the spill rate at the pour and falls linearly to zero at 90 seconds. Buys and sells of the coin are both charged on the ETH leg. Trades executed early after the pour pay more (up to 25% extra on top of the spill), and trades after 90 seconds pay only the base spill. The spill is taken as a return delta in beforeSwap or afterSwap depending on which side is named, and is always denominated in ETH.
- Liquidity behaviour
- No liquidity callbacks. The hook does not run on add or remove liquidity, so positions are managed directly through Uniswap; the Sluice records who holds the position and that address is outside the hook's control.
- Fee behaviour
- The pool itself uses a zero static fee. The effective fee is the spill plus surge taken by the hook as a return delta: 70% of the base spill is credited to the fitter side (split between the fitter and the branch wallet by branchBps), 15% to the works tank, and the remainder plus all surge amounts to the sump, which is used to buy back and burn the coin via flush().
- Owner & admin controls
- Ownable is used only to make owner() answer; ownership is renounced in the constructor, so there is no active owner. There is no pause, no blocklist, no upgrade path, no transfer tax, and no function to change the spill, surge, tank bearers or sump parameters after deployment.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize restricts pool creation to the Sluice with the exact canonical key. beforeSwap and afterSwap compute and book the spill and surge, returning the ETH amount through the before-swap and after-swap return deltas. beforeSwapReturnDelta and afterSwapReturnDelta are enabled so the hook can take a cut of swap amounts; the liquidity and donate callbacks are disabled and revert if invoked.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: No privileged key remains after the constructor renounces ownership, so no address can change fees, pause swaps, blocklist users or upgrade the hook. Privilege lies only with the fitter, branch and works bearers, who can each draw their own tank balance, and with the Sluice, which deploys the contract and is the sole address allowed to open the home pool.
Risk to user funds: The hook holds ETH claims on the PoolManager representing the spill tanks and sump, and can only send them to tank bearers (via draw) or spend the sump on buybacks (via flush). It cannot move the pool's principal liquidity or block any user's ability to swap or withdraw, since it has no liquidity callbacks and no pause.
Security findings
- [info] Return-delta skim on every swap: The hook takes spillBps plus surge (up to 300 bps plus 2500 bps of the spill at the pour) from each swap's ETH side via return deltas, so traders pay this on every trade by design.
- [medium] Sandwichable flush: flush() swaps up to FLUSH_MAX (0.01 ETH) with no price limit in the home pool and is called by anyone, so a searcher can sandwich it; the cap limits each flush's size, and the spill on the sandwich legs partly offsets the loss.
- [info] Snipe surcharge within the first 90 seconds: surgeBps starts at 2500 and decays to 0 over 90 seconds, so early buyers and sellers pay a sharply higher fee that goes entirely to the sump.
- [low] Reverting fallback on unused hooks: afterInitialize, all liquidity hooks and donate hooks revert with NotWired; the pool's liquidity cannot be affected by the hook, but these hooks are not usable.
Contract details
- Verified source
- Yes (Runnel)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 11,661 bytes
- Upgradeable proxy
- No
- Detected patterns
- erc20, erc6909-claims, moves-currency, ownable, return-delta, self-unlock
Pools using Runnel
- ETH / SUMP (0.00% fee) — 24h volume $106, TVL $0, 10 swaps today