[Medium-1] Hardcoded `monsterMultiplier` in case of `stakedTimeBonus` disregards the updates done to `monsterMultiplier` through `setMonsterMultiplier()`
[Medium-1] Hardcoded `monsterMultiplier` in case of `stakedTimeBonus` disregards the updates done to `monsterMultiplier` through `setMonsterMultiplier()`\\nFrankenDAO allows users to stake two types of NFTs, `Frankenpunks` and `Frankenmonsters` , one of which is considered more valuable, ie: `Frankenpunks`,\\nThis is achieved by reducing votes applicable for `Frankenmonsters` by `monsterMultiplier`.\\n```\\nfunction getTokenVotingPower(uint _tokenId) public override view returns (uint) {\\n      if (ownerOf(_tokenId) == address(0)) revert NonExistentToken();\\n\\n      // If tokenId < 10000, it's a FrankenPunk, so 100/100 = a multiplier of 1\\n      uint multiplier = _tokenId < 10_000 ? PERCENT : monsterMultiplier;\\n      \\n      // evilBonus will return 0 for all FrankenMonsters, as they are not eligible for the evil bonus\\n      return ((baseVotes * multiplier) / PERCENT) + stakedTimeBonus[_tokenId] + evilBonus(_tokenId);\\n    }\\n```\\n\\nThis `monsterMultiplier` is initially set as 50 and could be changed by governance proposal.\\n```\\nfunction setMonsterMultiplier(uint _monsterMultiplier) external onlyExecutor {\\n    emit MonsterMultiplierChanged(monsterMultiplier = _monsterMultiplier); \\n  }\\n```\\n\\nHowever, one piece of code inside the FrakenDAO staking contract doesn't consider this and has a monster multiplier hardcoded.\\n```\\nfunction stake(uint[] calldata _tokenIds, uint _unlockTime) \\n----\\nfunction _stakeToken(uint _tokenId, uint _unlockTime) internal returns (uint) {\\n   if (_unlockTime > 0) {\\n     --------\\n      stakedTimeBonus[_tokenId] = _tokenId < 10000 ? **fullStakedTimeBonus : fullStakedTimeBonus / 2;** \\n    }\\n--------\\n```\\n\\nHence any update done to `monsterMultiplier` would not reflect in the calculation of `stakedTimeBonus`, and thereby votes.
Consider replacing the hardcoded value with monsterMultiplier
Any update done to monsterMultiplier would not be reflected in stakedTimeBonus; it would always remain as /2 or 50%.\\nLikelihood: Medium\\nOne needs to pass a governance proposal to change the monster multiplier, so this is definitely not a high likelihood; it's not low as well, as there is a clear provision in spec regarding this.
```\\nfunction getTokenVotingPower(uint _tokenId) public override view returns (uint) {\\n      if (ownerOf(_tokenId) == address(0)) revert NonExistentToken();\\n\\n      // If tokenId < 10000, it's a FrankenPunk, so 100/100 = a multiplier of 1\\n      uint multiplier = _tokenId < 10_000 ? PERCENT : monsterMultiplier;\\n      \\n      // evilBonus will return 0 for all FrankenMonsters, as they are not eligible for the evil bonus\\n      return ((baseVotes * multiplier) / PERCENT) + stakedTimeBonus[_tokenId] + evilBonus(_tokenId);\\n    }\\n```\\n