Jig on Robinhood Chain
Uniswap v4 Hook Contract 0x6c63242c3eac6a4148784f228eeacbbe17d320cc on Robinhood Chain · Custom pricing · Verified contract
- Volume (24h)
- $0.97
- Value locked (TVL)
- $0
- All-time volume
- $0.97
- Pools using this hook
- 1
- Swaps (24h)
- 3 (1 traders)
- Total swaps
- 3
What it does
Every swap in a Jig pool pays a flat 0.8% of its ETH value to the coin's maker, buyers and sellers alike, while liquidity providers are not charged.
How it works step by step
- Registers a pool only when the Joinery opens it, requiring the native ETH currency0, the fixed hook address, zero static fee and tick spacing 1
- Takes a flat 0.8% shavings fee (SHAVINGS_BPS = 80) on the ETH side of every swap, rounding up
- Books shavings into a per-batten bin and mints a matching ERC-6909 ETH claim to the hook itself inside the PoolManager
- Lets only the batten's maker sweep its bin: burns the claim and takes ETH directly to the maker
- Returns before-swap and after-swap deltas so the shavings are settled through return deltas rather than a separate transfer
- Reverts every liquidity and donate callback (beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity, afterRemoveLiquidity, beforeDonate, afterDonate, afterInitialize)
- Swap behaviour
- On every swap in a Jig pool, 0.8% of the ETH side is carved off: for ETH-specified exact-in legs it is taken in beforeSwap from the ETH sent, for ETH-specified exact-out legs it is the grossed-up difference, and for coin-specified legs it is computed in afterSwap from the ETH actually moved. Buyers and sellers both pay the same 0.8% of ETH value; the hook does not favour a direction.
- Liquidity behaviour
- No liquidity callbacks. Liquidity callbacks revert with NotWired, so liquidity can only be added or removed through paths that do not invoke these hooks, and LPs are not subject to the shavings.
- Fee behaviour
- The pool's static fee is zero; the only charge is the fixed 0.8% shavings taken as a return delta on swaps and credited to the batten's maker. There are no dynamic fee updates.
- Owner & admin controls
- No owner, pause, upgrade or parameter setter in the Jig. The only privileged path is the maker of each batten, who alone can sweep that batten's bin. Immutable poolManager and joinery addresses are set in the constructor.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize registers each pool and its batten once, gated to the Joinery. beforeSwap and afterSwap compute and book the shavings for ETH-specified and coin-specified legs. beforeSwapReturnDelta and afterSwapReturnDelta let the hook take the shavings from the swap amounts.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: No privileged key controls the Jig: it has no owner, pause or setter. Each batten's maker controls only sweeping of its own bin. The Batten token renounces ownership in its constructor and has a fixed supply minted to the Joinery.
Risk to user funds: The hook holds ETH claims as ERC-6909 balances inside the PoolManager for shavings not yet swept, and its return deltas can take up to 0.8% of ETH swap value. It cannot move LP liquidity, since liquidity callbacks revert.
Security findings
- [info] Hook takes value via return deltas: beforeSwap and afterSwap return non-zero deltas, so the hook takes 0.8% of the ETH side of every swap in its pools by design.
- [low] Pool gating depends on Joinery: beforeInitialize only accepts initialization from the immutable joinery address, with a one-time seat per batten; a misconfigured joinery would block new pools rather than move funds.
- [low] Coin-specified legs settled in afterSwap: Shavings for coin-specified legs are computed after the swap from delta.amount0, and ETH-specified legs revert with Unfilled if they do not fill exactly, which limits partial-fill accounting edge cases but adds revert paths.
- [info] Sweep is maker-only and bounded by bin: sweep requires msg.sender equal to the batten's maker and amount not exceeding bin[batten], and the unlock callback is gated by fromPoolManager and a transient sweeping flag.
Contract details
- Verified source
- Yes (Jig)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 6,421 bytes
- Upgradeable proxy
- No
- Detected patterns
- erc6909-claims, moves-currency, return-delta, self-unlock
Pools using Jig
- ETH / DVTL (0.00% fee) — 24h volume $0.97, TVL $0, 3 swaps today