Beginner FriendlyFoundryNFT
100 EXP
View results
Submission Details
Severity: low
Invalid

[G-1] `Streets::unstake()` mints 1 CRE token every day staked

Description

Streets::unstake() calls Credibility::mint() for every day the OneShot NFT was staked. It can be minted just once.

Recommended Mitigation

function unstake(uint256 tokenId) external {
require(stakes[tokenId].owner == msg.sender, "Not the token owner");
uint256 stakedDuration = block.timestamp - stakes[tokenId].startTime;
uint256 daysStaked = stakedDuration / 1 days;
// Assuming RapBattle contract has a function to update metadata properties
IOneShot.RapperStats memory stakedRapperStats = oneShotContract.getRapperStats(tokenId);
emit Unstaked(msg.sender, tokenId, stakedDuration);
delete stakes[tokenId]; // Clear staking info
// Apply changes based on the days staked
- if (daysStaked >= 1) {
- stakedRapperStats.weakKnees = false;
- credContract.mint(msg.sender, 1);
- }
- if (daysStaked >= 2) {
- stakedRapperStats.heavyArms = false;
- credContract.mint(msg.sender, 1);
- }
- if (daysStaked >= 3) {
- stakedRapperStats.spaghettiSweater = false;
- credContract.mint(msg.sender, 1);
- }
- if (daysStaked >= 4) {
- stakedRapperStats.calmAndReady = true;
- credContract.mint(msg.sender, 1);
- }
// Only call the update function if the token was staked for at least one day
if (daysStaked >= 1) {
+ stakedRapperStats.weakKnees = false;
+ if (daysStaked >= 2) {
+ stakedRapperStats.heavyArms = false;
+ }
+ if (daysStaked >= 3) {
+ stakedRapperStats.spaghettiSweater = false;
+ }
+ if (daysStaked >= 4) {
+ stakedRapperStats.calmAndReady = true;
+ }
+ credContract.mint(msg.sender, daysStaked);
oneShotContract.updateRapperStats(
tokenId,
stakedRapperStats.battlesWon
stakedRapperStats.weakKnees,
stakedRapperStats.heavyArms,
stakedRapperStats.spaghettiSweater,
stakedRapperStats.calmAndReady,
stakedRapperStats.battlesWon
);
}
// Continue with unstaking logic (e.g., transferring the token back to the owner)
oneShotContract.transferFrom(address(this), msg.sender, tokenId);
}
Updates

Lead Judging Commences

inallhonesty Lead Judge over 1 year ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity
0xEzSwim Submitter
over 1 year ago
inallhonesty Lead Judge
over 1 year ago
inallhonesty Lead Judge over 1 year ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.