ZeroForge on Ethereum
Uniswap v4 Hook Contract 0x24bfabaff86a9384a4954ecaea8477d2830fe0cc on Ethereum · Fee sharing · Verified contract
- Volume (24h)
- $427
- Value locked (TVL)
- $0
- All-time volume
- $427
- Pools using this hook
- 1
- Swaps (24h)
- 7 (6 traders)
- Total swaps
- 7
What it does
Every swap in the official ZERO/ETH pool, buys and sells alike, pays a flat 1% fee in ETH to the dev wallet, while liquidity operations and other pools are untouched.
How it works step by step
- Acts as both the ERC-20 token ZERO (fixed supply of 999,999 minted once at deployment) and a Uniswap v4 hook for the single official ZERO/ETH pool.
- Charges a 1% project fee on swaps in the official pool only, paid in native ETH and forwarded to an immutable devWallet via PoolManager.take in the same transaction.
- Uses beforeSwap to charge the fee on the specified side for exact-input buys and exact-output sells, returning a positive delta that offsets the amount taken.
- Uses afterSwap to charge the fee on the unspecified side for exact-input sells and exact-output buys, computing it from the realised ETH delta and returning it as the hook delta.
- Reverts with PartialFillNotSupported in afterSwap if the realised ETH amount does not match the expected fee-adjusted amount on specified-side fee swaps.
- Only permits initialization of the official pool key (ETH/ZERO, 0.30% LP fee, tick spacing 60, this hook); beforeInitialize restricts the caller to the owner.
- Swap behaviour
- Swaps in the official ZERO/ETH pool pay a 1% fee in ETH: buys (ETH in) and sells (ETH out) both incur it, computed on total ETH paid for exact-input buys and exact-output sells, and on gross ETH released for exact-input sells and exact-output buys. Swaps in any other pool revert with NotOfficialPool. Buys and sells pay the same 1% rate, so no direction is favoured by the fee itself.
- Liquidity behaviour
- No liquidity callbacks. Add and remove liquidity hooks revert with HookNotImplemented, and these callbacks are not enabled in the permissions, so liquidity operations are not taxed by this hook.
- Fee behaviour
- A fixed 1% fee (BUY_FEE_BPS and SELL_FEE_BPS both 100) is taken in native ETH on all swaps in the official pool and sent to the immutable devWallet. The 0.30% LP fee is the pool's static fee and goes to liquidity providers. No setter exists to change the fee rates.
- Owner & admin controls
- Owner is set at deployment and can only pass the beforeInitialize check for the official pool; the contract declares Ownable with renounceOwnership and transferOwnership. No setters, pause, blacklist, fee-change functions, proxy or upgrade path are visible in the ABI. The devWallet is immutable. Owner powers are limited to pool initialization; the source comments say the owner should renounce.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize restricts pool initialization to the official pool key and the owner. beforeSwap takes the fee on the specified side for exact-input buys and exact-output sells. afterSwap takes the fee on the unspecified side for exact-input sells and exact-output buys. beforeSwapReturnDelta and afterSwapReturnDelta let the hook return deltas that settle the fee to the devWallet.
Security & trust assessment
Risk level: low (verified source, high confidence).
Who controls it: The owner cannot change fees, pause swaps, blacklist addresses, mint or upgrade the contract; the only privileged action in the ABI is pool initialization gating, and ownership can be renounced.
Risk to user funds: The hook can move ETH from swap settlement to the devWallet at 1% of swap value via PoolManager.take and return deltas, but it does not custody user funds; the source states no ETH or ZERO is held by the contract.
Security findings
- [info] Hook takes fee via return delta: Both beforeSwap and afterSwap return deltas that route 1% ETH to devWallet through PoolManager.take, so the hook can move ETH from swap flows, as intended by the design.
- [low] Owner can gate pool initialization: beforeInitialize reverts unless sender equals owner(), so only the owner can initialize the official pool; if ownership is never transferred or renounced, the owner retains this single gate.
- [info] Partial fill reverts: afterSwap reverts with PartialFillNotSupported when the realised ETH delta does not match the expected fee-adjusted amount, which can cause swaps to fail on partial fills rather than silently mis-charging the fee.
- [info] Fixed immutable parameters: Fee rates, LP fee, tick spacing, devWallet and poolManager are constants or immutables, with no setters, so fee terms cannot be changed after deployment.
Contract details
- Verified source
- Yes (ZeroForge)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 5,231 bytes
- Upgradeable proxy
- No
- Detected patterns
- erc20, moves-currency, ownable, return-delta
Pools using ZeroForge
- ETH / ZERO (0.30% fee) — 24h volume $427, TVL $0, 7 swaps today