SentrySentryFeeHook on Robinhood Chain
Uniswap v4 Hook Contract 0xa695f84c86367d5aea445e8289dbc7c4c4e530cc on Robinhood Chain · Launchpad · Verified contract
- Volume (24h)
- $8.73K
- Value locked (TVL)
- $50.32K
- All-time volume
- $3.63M
- Pools using this hook
- 1
- Swaps (24h)
- 29 (27 traders)
- Total swaps
- 6,363
What it does
A Uniswap v4 hook for the SENTRY/WETH pool that charges a decaying fee on swaps, splitting it between token holders in WETH, permanently-locked liquidity, and the SENTRY treasury, with an early-exit fee for sellers still inside the migration lock.
How it works step by step
- Decays the swap fee from startFee to endFee after a hold period, in halving steps
- Splits the curve fee into holder WETH reflection, LP WETH compounding and SENTRY treasury shares
- Sends reflected WETH to the SENTRY token and calls notifyReward() so holders receive it
- Accrues LP WETH fees in the hook and compounds them into permanently-locked full-range liquidity once decay ends
- Charges a flat early-exit fee to treasury on sells by migration-locked wallets
- Gives launch whitelist wallets the floor fee on buys only
- Swap behaviour
- On each swap the hook forces the LP fee to zero and takes the curve fee as return deltas: WETH legs for holder reflection and LP compounding, SENTRY leg for the treasury. Sells by wallets still in the migration lock pay a flat early-exit fee in WETH to treasury instead. Launch whitelist wallets get the floor fee on buys.
- Liquidity behaviour
- No external liquidity callbacks. Accrued LP WETH fees are held by the hook and can be compounded via compound() after the decay ends: half is swapped to SENTRY, then full-range liquidity is minted to a position owned by the hook with no withdrawal function, so the liquidity is permanently locked.
- Fee behaviour
- Dynamic fee: the curve fee decays from startFee to endFee after a hold period with halving steps. The LP fee charged to the pool is forced to 0 via override flag, and the curve fee is instead skimmed as return deltas: reflectionShareBps and lpShareBps in WETH, treasuryShareBps in SENTRY, summing to 10000 bps of the curve fee. Wallets still inside the migration lock pay a flat earlyExitFee in WETH on sells, all to treasury, replacing the curve fee. Launch whitelist wallets get the floor fee on buys only.
- Owner & admin controls
- No owner or pause function. The launcher address (immutable) alone can create the pool and set the launch whitelist, and only before the pool is initialized; the whitelist is frozen once launchedAt is stamped. Fee shares, durations, treasury and token addresses are all immutable. compound() is permissionless after decay ends. No upgrade path is visible.
Enabled Uniswap v4 callbacks
beforeInitialize, afterInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize: restricts pool creation to the launcher, requires dynamic fee flag and the exact WETH/SENTRY pair. afterInitialize: records launch timestamp, pool key and token ordering. beforeSwap: forces LP fee to 0, skims the WETH or treasury leg on the specified currency, and computes the rate or early-exit mode. afterSwap: skims the unspecified currency's leg. beforeSwapReturnDelta and afterSwapReturnDelta: enable the hook to take a portion of swap currency as fees, which is how the reflection, LP and treasury shares are collected.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: The launcher can only front-run the pool creation through the whitelist before initialization and cannot change fees or redirect funds afterward. There is no owner, pauser or upgrade, so post-launch centralization is minimal beyond the sentry token's own migration lock logic, which this hook reads through tx.origin lookups on the sentry token.
Risk to user funds: The hook takes real WETH and SENTRY from swaps via return deltas and holds accrued WETH fees until compound() is called. Those held LP fees and the locked liquidity are not withdrawable by anyone, and no privileged key can pause swaps or move funds after launch, so exposure is mainly to bugs in the fee and compounding logic plus dependence on the sentry token contract.
Security findings
- [medium] Early-exit depends on external token state: Early-exit path reads tx.origin against migrationLocked and unlockTime on the SENTRY token. The lookup is wrapped in try/catch so a missing interface cannot brick swaps, but the sentry token controls whether a wallet is treated as locked, so its behaviour directly sets the early-exit fee applied to sells.
- [low] tx.origin based fee classification: Using tx.origin for launch whitelist and lock checks means smart-contract wallets and aggregators are treated by their EOA origin, which can misclassify routed sells and whitelisted buys.
- [medium] Complex settlement in compound(): compound() swaps half of accrued WETH through the same pool and mints liquidity with a 1 wei slack and a return-delta based accounting path; the hook has to settle both currencies correctly or accrued fees can be stranded in the hook or minted with wrong amounts.
- [info] Return-delta fee skimming moves user funds: Reflection notifications call notifyReward() on the sentry token and treasury takes SENTRY via take(); both external calls depend on those contracts behaving as expected, and the hook's return deltas move real user funds.
Contract details
- Verified source
- Yes (SentrySentryFeeHook)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 11,005 bytes
- Upgradeable proxy
- No
- Detected patterns
- access-control, dynamic-fee, launchpad, liquidity-management, moves-currency, return-delta, self-unlock
Pools using SentrySentryFeeHook
- WETH / SENTRY (Dynamic fee) — 24h volume $8.73K, TVL $50.32K, 29 swaps today