Pleat on Robinhood Chain

Uniswap v4 Hook Contract 0xd849b6db17a04ebbf6cdea28ab93cd757671a0cc on Robinhood Chain · Custom pricing · 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

Pleat takes a fixed 0.75% to 5% levy in ETH on every swap through its home pool, applied equally to buys and sells, and sorts it into four pockets that only their fixed holders can draw.

How it works step by step

  • Pleat is an ERC20 token that is also the hook of its own Uniswap v4 pool, with ETH as currency0 and the token as currency1, fee 0 and tick spacing 1.
  • On each swap through the home pool a levy of 0.75% to 5% (levyBps, fixed at creation) is taken in ETH via beforeSwapReturnDelta or afterSwapReturnDelta, and minted to the PoolManager as an ERC-6909 claim owned by the hook.
  • Collected levy is sorted into four pockets: 80% to origin/circle split by creditsBps, 10% to commons, remainder to fold.
  • Each pocket can only be drawn by its fixed holder through draw(), which burns the claim and transfers ETH from the PoolManager to that holder.
  • Liquidity callbacks (add, remove, donate, initialize other than the seated home pool) revert with NotWired, so liquidity can only be added through the pool's normal path and the hook takes no part in it.
  • Supply of one billion tokens is minted once to the Crease in the constructor; ownership is renounced in the constructor.
Swap behaviour
Swaps through the home pool are levied in ETH. Buying coin with exact ETH in: levy is cut from the ETH sent before the pool sees the rest. Selling coin for exact ETH out: the pool is asked for a grossed-up ETH amount and the levy is the difference. Buying exact coin out or selling exact coin in: levy is computed afterwards from the ETH actually moved. Swaps through any other pool revert with ForeignPool.
Liquidity behaviour
No liquidity callbacks; every liquidity hook reverts with NotWired.
Fee behaviour
The pool's static fee is 0; the hook takes a separate ETH levy of levyBps (75 to 500 basis points, fixed at creation) on each swap via return deltas. Levy is split 80% origin side (of which creditsBps goes to circle), 10% commons, and the remainder to fold. Buyers and sellers pay the same rate.
Owner & admin controls
Ownership is renounced in the constructor so owner() returns zero; there is no pause, blacklist, fee setter, or upgrade path in the code. All pocket holders, levy rate and credits split are immutable. Only the registered holder of each pocket can draw it.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize seats the single home pool with the exact canonical key; beforeSwap takes the levy for exact-ETH-in buys and exact-ETH-out sells and applies the gross-up; afterSwap computes and enforces the levy for coin-named legs and reverts with ShortFill if the fill does not match the expected amount; beforeSwapReturnDelta and afterSwapReturnDelta let the hook claim the levy amounts as deltas.

Security & trust assessment

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

Who controls it: No privileged key remains after creation: ownership is renounced in the constructor and no setter exists. The only role is the fixed pocket holders, who can draw their own shares; they cannot alter swaps, pricing or other holders' pockets.

Risk to user funds: The hook holds ETH claims in the PoolManager backing the levy pockets and can move them only to the fixed holders via draw(). It cannot touch pool liquidity or user balances outside the levy, and cannot block swaps except through the ShortFill and AmountOffScale reverts.

Security findings

  • [info] Return deltas take value from every swap: The hook claims ETH through beforeSwap and afterSwap return deltas on each home-pool swap, at a fixed rate between 0.75% and 5% that cannot be changed after creation.
  • [low] Sell-side levy relies on a gross-up calculation: For exact-ETH-out sells the hook requests a grossed-up ETH amount in beforeSwap and checks the fill in afterSwap; a mismatch reverts with ShortFill, which can block that swap path rather than move funds.
  • [info] Fixed pocket holders with no rotation: The origin, circle, commons and fold addresses are immutable, so if a holder loses its key its share of the claim cannot be redirected by anyone.
  • [info] Renounced ownership is set in the constructor: Ownable is used only to expose owner() and it is renounced in the same transaction, so no privileged key remains for later changes.

Contract details

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

Pools using Pleat