Seam on Robinhood Chain

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

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

What it does

Seam is a token whose own ETH/coin pool charges every swap a fixed royalty of 0.5% to 3% of the ETH side, split into tins for the creator, community, a shared pool and the house, with liquidity providers left unaffected.

How it works step by step

  • Seam is both an ERC20 token (fixed 1B supply minted once to the Pithead in the constructor) and the Uniswap v4 hook for its own ETH/coin pool.
  • On each swap the hook takes a royalty of royaltyBps (50 to 300 bps) of the ETH side, always denominated in ETH.
  • beforeSwap carves the royalty off exact-in ETH buys and grosses up exact-out ETH sells; afterSwap handles legs that are specified in the coin amount.
  • Royalty is never sent out as loose ETH: the hook mints itself an ERC-6909 claim on the PoolManager and books the amount into four tins (collier 80% split with lodge by creditsBps, parish 10%, pit 10% plus rounding).
  • Each tin bearer draws its own balance via draw(), which burns the claim inside an unlock callback and takes ETH to the bearer's address.
  • Liquidity hooks are all stubbed to revert with NotWired, so liquidity providers are not affected by the hook.
Swap behaviour
Every swap in the home pool pays a royalty of royaltyBps of the ETH side. Exact-in ETH buys and exact-out ETH sells are adjusted in beforeSwap; exact-out coin buys and exact-in coin sells are adjusted in afterSwap. Swaps in any other pool revert with ForeignPool.
Liquidity behaviour
Liquidity callbacks are not enabled. The beforeAdd/afterAdd/beforeRemove/afterRemove/donate hooks all revert with NotWired, so adding and removing liquidity goes straight through the PoolManager without hook involvement.
Fee behaviour
The pool's LP fee is fixed at 0 (key.fee must equal 0 at initialization). The hook separately takes a royalty of royaltyBps (immutable, 50 to 300) of the ETH side of every swap, booked into tins for the collier, lodge, parish and pit.
Owner & admin controls
Ownership is renounced in the constructor, so owner() returns the zero address and no owner-gated functions remain. There is no pause, no blocklist, no parameter change and no upgrade path; royaltyBps, creditsBps and the tin bearers are immutable. The only privileged-like actions are each tin bearer drawing its own balance.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize restricts the home pool to the exact canonical key, initialized once by the Pithead. beforeSwap applies the ETH-side royalty for ETH-specified legs and books it. afterSwap applies the royalty for coin-specified legs and reverts with Unfilled if an ETH-named leg did not fill exactly. afterSwapReturnDelta and beforeSwapReturnDelta let the hook take the royalty from the swap settlement.

Security & trust assessment

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

Who controls it: No privileged key can change fees, pause trading or move pool funds; the owner is renounced at deployment. Tin bearers (collier, lodge, parish, pit) are fixed addresses that can each withdraw their own accrued ETH.

Risk to user funds: The hook holds no user funds directly; it books royalty ETH as ERC-6909 claims inside the PoolManager and tin bearers draw only their own tin. Swap participants pay the royalty but cannot have their principal moved by the hook.

Security findings

  • [info] Immutable fee and recipients: royaltyBps, creditsBps, collier, lodge, parish and pit are all immutable constructor values, so the royalty rate and split cannot be changed after sinking.
  • [info] Return-delta fee capture: The hook uses beforeSwap and afterSwap return deltas to take a share of ETH from every swap in the home pool; traders pay this royalty on top of the pool's zero LP fee.
  • [low] Strict swap gating: Any swap whose ETH leg does not fill exactly as computed in beforeSwap reverts with Unfilled, and swaps outside the canonical key revert with ForeignPool, which may cause some router paths to fail.
  • [info] Ownership renounced: The constructor calls renounceOwnership(), so no address can pause, blocklist or alter the contract after deployment.
  • [low] Unverified mechanics: Correctness of the grossUp/royalty arithmetic and the afterSwap expected-value check relies on rounding behaviour that was reviewed from source only and not tested here.

Contract details

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

Pools using Seam