FairHookHost on Robinhood Chain
Uniswap v4 Hook Contract 0xddc9a293cfdd6a824dbd33c58a9e78fee85828c4 on Robinhood Chain · Fee sharing · Verified contract
- Volume (24h)
- $0.24
- Value locked (TVL)
- $3.18
- All-time volume
- $0.24
- Pools using this hook
- 1
- Swaps (24h)
- 1 (1 traders)
- Total swaps
- 1
What it does
The hook charges every swap a platform and creator fee plus a sniper tax that starts high and falls to zero over the first day after launch, so early buyers and sellers pay the most while later trades pay only the base fee, and the tax itself is burned rather than paid to anyone.
How it works step by step
- Takes a platform fee and a creator fee from the unspecified side of every swap in afterSwap via return deltas, with total fee capped at 30 percent
- Applies a sniper tax from pool initialization that decays linearly to zero over taxDecaySecs; token-side tax is sent to 0xdEaD in the same swap and ETH-side tax is banked
- Confirms or forfeits creator fees: pending creator fees become claimable only if the creator still holds at least the graduation baseline minus forfeitDropBps, otherwise they are burned
- Accepts a burnBank call that swaps banked ETH for tokens inside its own unlock and sends the tokens to 0xdEaD, guarded by a per-second price deviation check and a per-call price impact cap
- Restricts pool initialization to a single configured initializer and blocks third-party liquidity additions until the sniper tax reaches zero
- Holds platform fees in owed balances claimable by the platform or pushable by anyone to the platform account
- Swap behaviour
- Every swap runs a creator check on its first occurrence per transaction and records the pool price at the start of each second. In afterSwap the hook takes platform fee plus creator fee plus current sniper tax from the unspecified side, so buys and sells are both charged in the unspecified currency. Swaps made while the sniper tax is active pay an extra tax that is highest at launch and falls linearly to zero; after taxDecaySecs only the platform and creator fee applies. The hook does not distinguish buyers from sellers, so trade direction does not change the fee.
- Liquidity behaviour
- beforeAddLiquidity reverts for any sender other than the initializer while block.timestamp is before launchTs plus taxDecaySecs. Liquidity removal has no hook callback. After the tax window, liquidity can be added by anyone.
- Fee behaviour
- The fee is not the pool's static fee alone: afterSwap takes platformBps plus creatorBps of the unspecified amount as the fee, plus a time-decaying sniper tax of up to taxStartBps. Creator share is held as pending and later either claimable or burned depending on the creator balance check. Platform share goes to owed balances. Sniper tax is burned or banked for burnBank.
- Owner & admin controls
- The deployer may call setInitializer exactly once; the initializer then sets per-pool config once through setPoolConfig, which is frozen after pool initialization. Fee splits, tax parameters, decay window and forfeit threshold are immutable constructor values. There is no owner, pause, upgrade proxy or parameter setter found in the source. burnBank and claim functions are permissionless.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, afterSwapReturnDelta
beforeInitialize restricts pool creation to the initializer and records the per-pool launch time and token. beforeAddLiquidity blocks third-party liquidity during the sniper tax window. beforeSwap records the start-of-second price reference and optionally enforces an anti-sniper gate. afterSwap takes fees and tax from the unspecified side and returns the taken amount as a return delta.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: The deployer role is one-shot and the initializer role controls pool creation and per-pool configuration; no key can change fees, pause swaps or upgrade the contract. A compromised initializer could set creator and baseline values for new pools, and the forfeit and creator payment flow depends on those values.
Risk to user funds: The hook takes platform fee, creator fee and sniper tax from swaps through return deltas and holds ETH-side tax and creator fees in its own balance, with claimable and banked amounts tracked on-chain. Token-side sniper tax and forfeited creator fees are transferred to 0xdEaD. Swaps are not blocked by any admin pause, but users pay fees and a sniper tax during the decay window.
Security findings
- [info] Return-delta fee and tax capture on every swap: afterSwap takes totalTake from the unspecified side and returns it as a positive return delta, so every swap pays platform, creator and sniper tax to the hook. Fee rate is capped by the constructor at MAX_TOTAL_BPS of 30 percent plus up to 30 percent sniper tax.
- [medium] Creator balance check depends on external balanceOf read: _balanceOf returns type(uint256).max when the staticcall fails, which means an unreadable token balance is treated as above the floor and never forfeits. A token whose balanceOf reverts or returns short data would keep creator fees confirmed.
- [low] burnBank swap uses caller-supplied slippage only as a lower bound on tokens: burnBank has a 1 percent per-second deviation guard and a 0.5 percent per-call impact cap, but the swap is executed by the hook against the live pool; repeated calls across seconds can still move price step by step, and minTokensOut is set by the caller.
- [low] Pending creator fees can be claimed or burned depending on timing: Creator fees accrue as pending and are only confirmed by a later transaction's check; the check runs on the first swap of each transaction and in pokeForfeit or claimCreatorFees, which revert while the pool manager is unlocked, so the outcome depends on who triggers the check and when.
- [info] Initializer role controls pool creation and liquidity gating: Only the initializer address can create pools through beforeInitialize and set per-pool config, and only the initializer can add liquidity during the tax window. Compromise of the initializer would control the launch configuration of new pools.
Contract details
- Verified source
- Yes (FairHookHost)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 14,114 bytes
- Upgradeable proxy
- No
- Detected patterns
- fee-sharing, mev-protection, return-delta, self-unlock, tax
Pools using FairHookHost
- ETH / FAIRAL (0.30% fee) — 24h volume $0.24, TVL $3.18, 1 swaps today