Dynamic fee pools in Uniswap V4 have an initial LP fee of 0. As stated in the Uniswap documentation:
"if a dynamic fee pool wants a non-0 initial fee, it should call
updateDynamicLPFeein the afterInitialize hook"
The TokenLaunchHook contract does not call updateDynamicLPFee in TokenLaunchHook::_afterInitialize, leaving the pool's base LP fee at 0. Furthermore, the contract has no function that allows calling updateDynamicLPFee at a later time.
This is critical because PoolManager.updateDynamicLPFee() can only be called by the hook contract itself:
Since the hook never calls this function and has no mechanism to do so, the pool's LP fee is permanently stuck at 0% (outside of when penalty fees are applied).
Likelihood:
Every pool created with this hook will have a permanent 0% LP fee (outside of when penalty fees are applied)
There is no mechanism in the contract to ever change this, making it a guaranteed condition
Impact:
Liquidity providers earn zero fees on swaps, removing all economic incentive to provide liquidity
The pool becomes economically unviable as LPs have no reason to deposit funds
This contradicts the README which states "Post-launch: Standard Uniswap fees apply"
Add the following test to the TokenLaunchHookUnit.t.sol file.
This test clearly shows that the LP fee of the pool initialized with the TokenLaunchHook in the setUp function, has an LP fee of 0.
Call updateDynamicLPFee in TokenLaunchHook::_afterInitialize, to set the desired poolFee on initialization
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.