RoutrHook on Ethereum

Uniswap v4 Hook Contract 0x64698d37a020ebfa4183716148f9212dc869e0cc on Ethereum · Fee sharing · Verified contract

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

What it does

Every buy and sell of the Routr token in this pool burns 0.1% of the Routr amount, with no ETH fee, so the token's supply goes down while LPs and traders pay the same static pool fee.

How it works step by step

  • Opens a single pool, ETH as currency0 and the Routr token as currency1, only for the creator wallet's own transaction (tx.origin check in beforeInitialize) and only with a static fee.
  • On every buy and sell it burns 0.1% (10 bps) of the Routr amount on the trader's side, inside the same swap.
  • Burn is taken from the PoolManager via take() into the hook, then destroyed with ERC20Burnable.burn, reducing total supply.
  • Burn is applied in beforeSwap when Routr is the specified currency (exact-output buy, exact-input sell) and in afterSwap when Routr is the unspecified currency (exact-input buy, exact-output sell).
  • Burn amount is capped at the Routr balance held by the PoolManager, so the hook never asks for more than available and cannot revert a swap.
  • Tracks totalBurned, buyBurns and sellBurns and emits a Burned event per burn; quoteBurn exposes the burn for a given gross amount.
Swap behaviour
Every swap that involves Routr pays a 0.1% Routr burn on the Routr side of the trade, buys and sells alike; ETH is never charged. On exact-output buys the pool sends out amount plus the burn, on exact-input sells the trader's Routr input is reduced by the burn, and on the other two legs the burn is taken from or added to the Routr amount in afterSwap.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Uses the pool's static fee; the hook returns no LP fee override. The only fee-like charge is the fixed 0.1% Routr burn, which is not paid to anyone and is destroyed.
Owner & admin controls
No owner, no pause, no upgrade mechanism and no parameter setters are present; token and creator are immutable constructor arguments. The creator address only controls which wallet can initialize the single pool.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize gates pool creation to the creator wallet, ETH/Routr pair and a non-dynamic fee. beforeSwap takes and burns the Routr burn on exact-output buys and exact-input sells by returning a specified-currency delta. afterSwap takes and burns the Routr burn on exact-input buys and exact-output sells by returning an unspecified-currency delta. beforeSwapReturnDelta and afterSwapReturnDelta are enabled because the hook returns those deltas to take its burn.

Security & trust assessment

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

Who controls it: No privileged key can change fees, pause swaps, withdraw tokens or upgrade the contract; the creator address only gates which wallet can open the single pool at initialization.

Risk to user funds: The hook can hold Routr only transiently during a swap (take then burn) and cannot block swaps or redirect user funds to any address; ETH is never touched by the hook.

Security findings

  • [info] Hook takes tokens via return deltas: beforeSwap and afterSwap return positive deltas in Routr to pull 0.1% of the trade out of the PoolManager and burn it, so the hook does move pool-held Routr funds on every trade.
  • [info] Burn capped at PoolManager balance: _burn clamps the amount to the Routr balance held by the PoolManager, which prevents the hook from reverting swaps or over-taking tokens.
  • [low] Pool creation restricted by tx.origin: beforeInitialize uses tx.origin == creator, so a contract wallet or the creator's own relayer contract cannot initialize, and any phishing contract that the creator interacts with would not pass this check; this is a usability gate rather than a risk to funds.
  • [info] Burn computed on gross amounts with rounding: _onGross and _onNet use integer division on 10 bps, so small trades round the burn down to zero; this is a minor precision effect, not a loss-of-funds path.
  • [info] Dynamic fee rejected: beforeInitialize reverts for dynamic-fee pools, which prevents the zero lpFeeOverride from silently setting the LP fee to 0.

Contract details

Verified source
Yes (RoutrHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
5,933 bytes
Upgradeable proxy
No
Detected patterns
dynamic-fee, moves-currency, return-delta

Pools using RoutrHook