SherwoodV2 on Robinhood Chain
Uniswap v4 Hook Contract 0xc33c907127b94303f578d6be551c36f45939e0cc on Robinhood Chain · Rewards · Verified contract
- Volume (24h)
- $235
- Value locked (TVL)
- $39
- All-time volume
- $602
- Pools using this hook
- 1
- Swaps (24h)
- 19 (14 traders)
- Total swaps
- 108
What it does
SherwoodV2 runs a leaderboard game where every buy pays a 5% fee into a round pot and earns points that can be boosted by special moves, with every sell paying the same 5% fee and wiping the seller's points for the round, so buyers and sellers both pay the same fee rate but only buyers can win the pot.
How it works step by step
- Runs a leaderboard game in 20-hour rounds on an ETH/token Uniswap v4 pool, with buys scored as points (1 per 0.001 ETH, up to 100 per buy) and selling wiping the seller's points for the round
- Takes 5% of every exact-input buy's ETH side into the round's pot via beforeSwap return delta, and takes 5% of the ETH paid out on sells via afterSwap return delta
- Lets buyers pick a move via hook data: BUY, STEAL (takes 20-40% of the previous player's points), ROBIN_HOOD (takes 10-33% of the leader's points to the lowest of the last 10 players), FLIP (Dice Protocol coin flip, double or lose points), or SHIELD (reflects the next Steal or Robin Hood back onto the attacker)
- Uses Dice Protocol (Pyth Entropy fork) randomness for flips, with a 10-minute timeout that scores an unrevealed flip as a plain buy
- Settles rounds permissionlessly after a delay: top three and the King of the Hill (longest time at #1) split 80% of the pot, 10% burns the game token via a buyback pool, 7% burns the host token via a host buyback pool, and 5% rolls into the next round
- Pays prize claims in native ETH, with winners required to still hold the tokens they held at settlement; unclaimed prizes after 7 days are swept back into a pot
- Swap behaviour
- Buys (ETH in) pay a 5% fee to the pot in beforeSwap and are scored as a move if at least 0.001 ETH; buys below that or before GENESIS are not scored. Sells (tokens in) pay a 5% fee on the ETH paid out in afterSwap and wipe the seller's positive points for the round. Exact-output swaps and partial fills on buys revert. Steal, Robin Hood and Flip outcomes change other players' points, not the swap price.
- Liquidity behaviour
- No liquidity callbacks.
- Fee behaviour
- A flat 5% hook-level fee (500 bps) is taken from the ETH side of every swap: from the ETH paid in on buys and from the ETH paid out on sells, and credited to the round's pot. Trades pay the same 5% in both directions; buyers additionally pay a Dice fee out of the pot for FLIP moves, capped by MAX_DICE_FEE. Bonuses (holder +25%, host holder +10%, welcome +10%) change points, not the swap fee.
- Owner & admin controls
- The owner (set at deployment, transferable in two steps via setOwner and acceptOwner) can name the pool's creator-only gate in beforeInitialize and appoint an operator via setOperator. The operator and owner can trigger buybacks and burns (buybackAndBurn, buybackAndBurnHost) and refund unrevealed Dice requests. The owner cannot change fee rates, prize splits, or the burn pools, which are hardcoded constants. No pause function was observed.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize restricts pool creation to the owner and binds the hook to one ETH/token pool. beforeSwap takes the 5% buy fee and runs the move logic (and reverts on exact-output or wrong pool). afterSwap takes the 5% sell fee, records bought tokens, and wipes sellers' points. beforeSwapReturnDelta and afterSwapReturnDelta let the hook take those fees out of the swap's ETH amounts.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: The owner can appoint the operator, who can run buyback swaps and refund Dice requests. Neither can change fees, prize splits, pool addresses or the Dice provider after deployment, so the owner cannot directly seize or redirect user prizes.
Risk to user funds: The hook custodies the ETH fees and prize pots until settlement and claim, and pays them out through its own functions. Unclaimed prizes after 7 days go to the current round's pot, and burn reserves go to fixed buyback pools, so the hook can hold and move pool ETH but no path gives a privileged key direct withdrawal of user funds.
Security findings
- [info] Hook takes ETH via return deltas on every swap: beforeSwap and afterSwap return non-zero deltas and call poolManager.take to route 5% of the ETH side into the pot, so the hook holds user ETH in custody until settlement and claims.
- [low] Prize payouts depend on externally settable token balances: Winners must hold at least the balance recorded at settlement to claim, and a prize shrinks pro rata if a winner sold part of their buys, so a winner who transfers tokens out before claiming forfeits value back into the pot.
- [low] Operator and owner can trigger burn swaps with minimum-output checks only: buybackAndBurn and buybackAndBurnHost accept a caller-supplied minimum output, so the operator or owner chooses how much slippage the reserve accepts when swapping in the burn pool.
- [low] Dice randomness dependency: Flip outcomes rely on the external Dice Protocol entropy provider; if Dice stops responding, flips fall back to plain buys after a 10-minute timeout.
- [info] Owner transfer and operator appointment: Ownership transfers through a two-step pending owner flow, which limits accidental handover, but the owner still controls who the operator is.
Contract details
- Verified source
- Yes (SherwoodV2)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 23,654 bytes
- Upgradeable proxy
- No
- Detected patterns
- moves-currency, ownable, return-delta, rewards, self-unlock, tax
Pools using SherwoodV2
- ETH / IMD (0.90% fee) — 24h volume $235, TVL $39, 19 swaps today