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);
}