SingleSidedLiquidityVault._accumulateInternalRewards will revert with underflow error if rewardToken.lastRewardTime is bigger than current time
SingleSidedLiquidityVault._accumulateInternalRewards will revert with underflow error if rewardToken.lastRewardTime is bigger than current time\\n```\\n    function _accumulateInternalRewards() internal view returns (uint256[] memory) {\\n        uint256 numInternalRewardTokens = internalRewardTokens.length;\\n        uint256[] memory accumulatedInternalRewards = new uint256[](numInternalRewardTokens);\\n\\n\\n        for (uint256 i; i < numInternalRewardTokens; ) {\\n            InternalRewardToken memory rewardToken = internalRewardTokens[i];\\n\\n\\n            uint256 totalRewards;\\n            if (totalLP > 0) {\\n                uint256 timeDiff = block.timestamp - rewardToken.lastRewardTime;\\n                totalRewards = (timeDiff * rewardToken.rewardsPerSecond);\\n            }\\n\\n\\n            accumulatedInternalRewards[i] = totalRewards;\\n\\n\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n\\n\\n        return accumulatedInternalRewards;\\n    }\\n```\\n\\nThe line is needed to see is this `uint256 timeDiff = block.timestamp - rewardToken.lastRewardTime`. In case if `rewardToken.lastRewardTime > block.timestamp` than function will revert and ddos functions that use it.\\n```\\n    function addInternalRewardToken(\\n        address token_,\\n        uint256 rewardsPerSecond_,\\n        uint256 startTimestamp_\\n    ) external onlyRole("liquidityvault_admin") {\\n        InternalRewardToken memory newInternalRewardToken = InternalRewardToken({\\n            token: token_,\\n            decimalsAdjustment: 10**ERC20(token_).decimals(),\\n            rewardsPerSecond: rewardsPerSecond_,\\n            lastRewardTime: block.timestamp > startTimestamp_ ? block.timestamp : startTimestamp_,\\n            accumulatedRewardsPerShare: 0\\n        });\\n\\n\\n        internalRewardTokens.push(newInternalRewardToken);\\n    }\\n```\\n\\nIn case if `startTimestamp_` is in the future, then it will be set and cause that problem. lastRewardTime: block.timestamp > `startTimestamp_` ? block.timestamp : `startTimestamp_`.\\nNow till, `startTimestamp_` time, `_accumulateInternalRewards` will not work, so vault will be stopped. And of course, admin can remove that token and everything will be fine. That's why i think this is medium.
Skip token if it's `lastRewardTime` is in future.
SingleSidedLiquidityVault will be blocked
```\\n    function _accumulateInternalRewards() internal view returns (uint256[] memory) {\\n        uint256 numInternalRewardTokens = internalRewardTokens.length;\\n        uint256[] memory accumulatedInternalRewards = new uint256[](numInternalRewardTokens);\\n\\n\\n        for (uint256 i; i < numInternalRewardTokens; ) {\\n            InternalRewardToken memory rewardToken = internalRewardTokens[i];\\n\\n\\n            uint256 totalRewards;\\n            if (totalLP > 0) {\\n                uint256 timeDiff = block.timestamp - rewardToken.lastRewardTime;\\n                totalRewards = (timeDiff * rewardToken.rewardsPerSecond);\\n            }\\n\\n\\n            accumulatedInternalRewards[i] = totalRewards;\\n\\n\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n\\n\\n        return accumulatedInternalRewards;\\n    }\\n```\\n