52998 sc low minor delays from oracle can unfairly reset users streak
Description
Brief/Intro
Vulnerability Details
function handleRandomness(
uint256 nonce,
uint256[] memory rngList
) external onlyRole(SUPRA_ROLE) nonReentrant {
address payable user = userNonce[nonce];
if (user == address(0)) {
revert InvalidNonce();
}
isSpinPending[user] = false;
delete userNonce[nonce];
delete pendingNonce[user];
uint256 currentSpinStreak = _computeStreak(user, block.timestamp, true);
uint256 randomness = rngList[0]; // Use full VRF range
(string memory rewardCategory, uint256 rewardAmount) = determineReward(
randomness,
currentSpinStreak
);
...................................................
// update the streak count after their spin
userDataStorage.streakCount = currentSpinStreak;
userDataStorage.lastSpinTimestamp = block.timestamp;
// ---------- Interactions: transfer Plume last ----------
if (
keccak256(bytes(rewardCategory)) == keccak256("Jackpot") ||
keccak256(bytes(rewardCategory)) == keccak256("Plume Token")
) {
_safeTransferPlume(user, rewardAmount * 1 ether);
}
emit SpinCompleted(user, rewardCategory, rewardAmount);
}Impact Details
References
Proof of Concept
Previous53001 sc high yield tokens become stuck in arctokenpurchase contract when distributing yield during active salesNext52896 sc low pause gate is present but no way to pause
Was this helpful?