ProbabilisticFeeCollector on World Chain
Uniswap v4 Hook Contract 0x44b3606eb07cff3af44ff7c8139cf44bc6684040 on World Chain · Fee sharing · Verified contract
- Volume (24h)
- $0
- Value locked (TVL)
- $0
- All-time volume
- $0
- Pools using this hook
- 2
- Swaps (24h)
- 0 (0 traders)
- Total swaps
- 0
What it does
Periodically, after a swap, this hook withdraws liquidity and fees from a designated position NFT and sends the tokens to a fixed collector address, with no effect on the swap itself.
How it works step by step
- Runs only in afterSwap, leaving swap pricing and fees unchanged
- Skips entirely while nftId is zero
- Triggers a collect when block.number % triggerModulo equals zero (default modulo 25, roughly 1 in 25 blocks)
- Calls DECREASE_LIQUIDITY and TAKE_PAIR via the position manager, sending tokens to STATIC_COLLECTOR
- Catches and emits any failure so the swap still completes
- Lets STATIC_COLLECTOR update nftId and triggerModulo
- Swap behaviour
- After each swap, if nftId is set and block.number is divisible by triggerModulo, the hook attempts a collect; the swap's amount0 delta is returned unchanged and the swap is never reverted by the hook.
- Liquidity behaviour
- No liquidity callbacks are enabled, but when triggered after a swap the hook decreases liquidity on the position identified by nftId with zero minimums and takes the resulting tokens to STATIC_COLLECTOR.
- Fee behaviour
- The hook does not set or take a fee directly; it periodically calls DECREASE_LIQUIDITY and TAKE_PAIR on a configured position NFT to pull accrued fees and principal to STATIC_COLLECTOR.
- Owner & admin controls
- Only STATIC_COLLECTOR (hardcoded address) can call setNFT and setTriggerModulo; no owner transfer, pause or upgrade path exists in the decoded interface.
Enabled Uniswap v4 callbacks
afterSwap
afterSwap is the only enabled callback; it runs after each swap and, on a probabilistic trigger based on block.number modulo triggerModulo, attempts the collect.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: STATIC_COLLECTOR controls which position NFT is targeted and how often collection is attempted; it can point nftId at any position the hook is able to operate on, and can set triggerModulo to 1 to collect on every swap.
Risk to user funds: The hook does not hold user funds directly, but via afterSwap it can trigger withdrawal of liquidity from the position identified by nftId and send the tokens to STATIC_COLLECTOR, which affects the position owner's assets and the pool's liquidity depth.
Security findings
- [medium] No minimum amounts on decrease: The collect call passes zero for the minimum amounts to DECREASE_LIQUIDITY, so there is no slippage protection on the withdrawn amounts.
- [low] Predictable trigger: The trigger uses block.number % triggerModulo, which is predictable and can be timed by the block builder or searchers, so the collection moment is not random in practice despite the name.
- [info] Failures are swallowed: The hook calls modifyLiquiditiesWithoutUnlock on the position manager from inside afterSwap; failures are caught and emitted, so a failing collect does not revert the swap.
- [info] Destination of withdrawn funds: Collection destination is a hardcoded STATIC_COLLECTOR address and the hook itself does not custody user tokens, but the position it drains must be owned or approved so that the position manager accepts the call.
Contract details
- Verified source
- Yes (ProbabilisticFeeCollector)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 8,694 bytes
- Upgradeable proxy
- No
Pools using ProbabilisticFeeCollector
- WLD / USDC (0.01% fee) — 24h volume $0, TVL $0, 0 swaps today
- WLD / uSOL (0.30% fee) — 24h volume $0, TVL $0, 0 swaps today