The contract inconsistently records timing information, using block.timestamp for initial deposits but block.number for transfers, which could lead to incorrect timing-based logic.
In addLiquidityProportional, the contract records the deposit time using block.timestamp:
However, in afterUpdate during transfers, it uses block.number:
This inconsistency creates two issues:
Data corruption: The same field stores different types of values (timestamps vs block numbers)
Semantic confusion: The variable name suggests timestamp but sometimes contains block number
While this timing information isn't currently used for critical calculations in the contract, it creates a confusing state that could lead to bugs if timing logic is added in future updates.
Low- While not immediately exploitable, this inconsistency corrupts timing data and could lead to issues if timing-based features are added. The inconsistency also makes it impossible to reliably track how long positions have been held.
Manual Review
Be consistent with timing information. Choose either block numbers or timestamps
Likelihood: Medium/High, any NFT transfer will change this variable. Impact: Informational/Very Low. This variable is unused and won’t impact anything, but the array is public and its getter will return a variable with inconsistencies.
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.