Likely oracle hook on Monad

Uniswap v4 Hook Contract 0x839f713817ebe9b4a9986f4d111be07d1450c040 on Monad · Oracle

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

What it does

A Uniswap v4 hook that runs after each swap to update internal state, with a random seed and generation pool id exposed as view functions.

How it works step by step

  • Executes an afterSwap callback that only the PoolManager can invoke
  • Writes a per-address uint256 mapping in storage on each swap
  • Exposes randomSeed() as a view getter
  • Exposes generationPoolId() as a view getter
  • Exposes poolManager() to reference the Uniswap v4 PoolManager
Swap behaviour
afterSwap runs after each swap and updates storage keyed by address; it does not appear to alter swap amounts from the decoded selectors.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Uses the pool's static fee; no fee logic is visible in the decoded selectors.
Owner & admin controls
No admin controls found.

Enabled Uniswap v4 callbacks

afterSwap

afterSwap: runs after each swap, updates a per-address storage mapping (slot 0) and possibly derives a random seed and generation pool id; the hook is gated to the PoolManager via an OnlyPoolManager error.

Security & trust assessment

Risk level: low, estimated (decoded bytecode, low confidence).

Who controls it: No owner or privileged role is visible in the decoded selectors, so no admin key was identified; the decoded surface is too small to rule out hidden privileged paths.

Risk to user funds: The afterSwap callback has no visible token transfer or return-delta selectors, so the decoded code does not show the hook holding or moving user funds; this is not confirmed without source.

Security findings

  • [info] Callbacks restricted to PoolManager: The hook only exposes an afterSwap callback and view getters, and the bytecode contains an OnlyPoolManager error, indicating callbacks are restricted to the PoolManager.
  • [info] State written on every swap: afterSwap writes to a mapping(address => uint256) at slot 0 on every swap, which suggests per-address accounting or state updates during swaps.
  • [low] Possibly predictable randomness: randomSeed() and generationPoolId() suggest a pseudo-random or generation-based component, which may be predictable on-chain if derived from block data.

Contract details

Verified source
No
Bytecode size
1,431 bytes
Upgradeable proxy
No

Pools using Likely oracle hook