68880 sc insight missing reward parameter in staked event breaks off chain accounting
Description
Brief/Intro
Vulnerability Details
// Reward calculated using CURRENT period parameters
uint256 reward = (amount * stakingPeriod.aprBps * stakingPeriod.stakingDurationSeconds) / rewardBpsDenominator;
// Reward stored immutably in UserStake
userStakes[msg.sender].push(
UserStake({
amount: amount,
reward: reward, // ← Stored on-chain
claimedAmount: 0,
claimedReward: 0,
aprBps: stakingPeriod.aprBps,
stakeTime: uint64(block.timestamp),
unlockTime: uint64(block.timestamp) + stakingPeriod.stakingDurationSeconds,
unlockDuration: stakingPeriod.unlockDurationSeconds
})
);
// Event emission WITHOUT reward
emit Staked(msg.sender, periodIndex, params.referrer, stakeIndex, amount);
// ^^^^^^
// Missing: rewardImpact and Likelihood Details
Link to Proof of Concept
Proof of Concept
Previous69650 sc low setmigrationpermit blocks revocation after role revoke enabling stale consent reuseNext69964 sc low users cannot revoke migration permission after migrator role revocation
Was this helpful?