SatoHook on Ethereum

Uniswap v4 Hook Contract 0x0000f07d2b5f1ddf3244b8780f972f306efd2888 on Ethereum · Custom pricing · Verified contract

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

What it does

A Uniswap v4 hook that replaces AMM liquidity with a deterministic bonding curve: buys mint SATO for ETH and sells burn SATO for ETH from the hook's reserves, with a flat 0.3% fee and no LP deposits allowed.

How it works step by step

  • Prices all trades on a bonding curve (forward for buys via Curve.mintFor, inverse for sells via Curve.burnFor) instead of AMM liquidity.
  • Blocks all liquidity additions permanently in beforeAddLiquidity.
  • Mints SATO to the PoolManager on buys and burns it on sells, settling through sync, settle and take.
  • Applies a per-buy entropy multiplier between 0.9x and 1.1x during the first 100 blocks after genesis.
  • Caps each buy at 5 ETH and enforces a one-block cooldown between a wallet's buy and its next sell.
  • Self-deprecates to block further buys once 99% of K_SUPPLY (21M) is minted on the fair curve.
Swap behaviour
Exact-input swaps only. ETH-to-SATO (zeroForOne) runs _executeBuy, minting SATO along the forward curve with an entropy multiplier and capped at 5 ETH per buy. SATO-to-ETH runs _executeSell, burning SATO and paying ETH along the inverse curve after a one-block cooldown for the swapper's last buy. Both sides skim 0.3% into feesAccrued and the hook supplies the counterparty via BeforeSwapDelta.
Liquidity behaviour
beforeAddLiquidity always reverts with LiquidityAdditionsForbidden, so no LP can ever add liquidity; the pool holds no AMM liquidity and the hook acts as sole counterparty.
Fee behaviour
Fixed 0.3% (FEE_NUMERATOR 30 / FEE_DENOMINATOR 10000) skimmed by the hook on both buys and sells and accumulated in feesAccrued. The pool's lpFeeOverride is always zero, and POOL_FEE is 3000 in the pool key.
Owner & admin controls
No owner or admin role on the hook. The minter of SatoToken is set once by the deployer and then locked; the hook is the sole minter and burner. No pause, no upgrade path, no parameter setters. Only the deployer could call setMinter, and only once.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeSwap, beforeSwapReturnDelta

beforeInitialize validates the pool key (ETH/SATO, fee 3000, this hook) and sets poolInitialized. beforeAddLiquidity reverts to block all liquidity additions. beforeSwap executes buys and sells via the bonding curve. beforeSwapReturnDelta lets the hook return a BeforeSwapDelta that replaces the AMM swap with curve pricing and settles tokens and ETH through the PoolManager.

Security & trust assessment

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

Who controls it: No privileged key controls the hook or token after deployment. Pricing parameters are immutable constants and the curve is deterministic on-chain. The only residual trust is in the deployment process (the deployer's one-time setMinter call) and the hook address mining.

Risk to user funds: The hook holds the ETH reserves backing sells and the fee balance. Users' sell proceeds depend on those reserves and on correct curve bookkeeping. The hook can block trades only when reserves are insufficient or the cooldown or self-deprecation condition applies; it has no way to seize or freeze user tokens, since SatoToken burns only through the hook's sell path.

Security findings

  • [medium] Sell solvency depends on curve accounting: The hook pays sells from its own ETH balance minus feesAccrued and reverts with InsufficientEthReserves if short. Its solvency depends on the curve math staying consistent with ethCum and totalMintedFair; an error there would strand or misprice ETH.
  • [medium] Entropy multiplier changes effective buy price and sell value: Sell pricing uses totalSupply-based scaling and the entropy multiplier on buys (9000 to 11000 bps) decouples actual supply from totalMintedFair, so holders' redemption value depends on this accounting rather than a fixed AMM price.
  • [low] Cooldown is trivially bypassable: Per-wallet cooldown is keyed on the address in hookData, which the caller supplies. A user can bypass the same-block sell restriction by using a fresh address, so the cooldown is a weak anti-MEV control.
  • [info] No admin, pause or upgrade surface: Curve parameters, fee and cap are constants and the token has no owner, pause or blacklist. Trading cannot be frozen by any party, and there are no upgrade hooks.
  • [info] Router integration requirement: Swaps only work when routers pre-settle the input currency to the PoolManager, and the hook accepts only exact-input swaps; exact-output and direct-to-manager flows revert.

Contract details

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

Pools using SatoHook