Voting to change `RewardsInfo::voteRewardsCoefficient` has an unintended side-effect of retrospectively changing voting rewards for active proposals
`GovSettings::editSettings` is one of the functions that can be executed via an internal proposal. When this function is called, setting are validated via `GovSettings::_validateProposalSettings`. This function does not check the value of `RewardsInfo::voteRewardsCoefficient` while updating the settings. There is neither a floor nor a cap for this setting.\\nHowever, we've noted that this coefficient amplifies voting rewards as calculated in the `GovPoolRewards::_getInitialVotingRewards` shown below.\\n```\\n    function _getInitialVotingRewards(\\n        IGovPool.ProposalCore storage core,\\n        IGovPool.VoteInfo storage voteInfo\\n    ) internal view returns (uint256) {\\n        (uint256 coreVotes, uint256 coreRawVotes) = voteInfo.isVoteFor\\n            ? (core.votesFor, core.rawVotesFor)\\n            : (core.votesAgainst, core.rawVotesAgainst);\\n\\n        return\\n            coreRawVotes.ratio(core.settings.rewardsInfo.voteRewardsCoefficient, PRECISION).ratio(\\n                voteInfo.totalVoted,\\n                coreVotes\\n            ); //@audit -> initial rewards are calculated proportionate to the vote rewards coefficient\\n    }\\n```\\n\\nThis has the unintended side-effect that for the same proposal, different voters can get paid different rewards based on when the reward was claimed. In the extreme case where `core.settings.rewardsInfo.voteRewardsCoefficient` is voted to 0, note that we have a situation where voters who claimed rewards before the update got paid as promised whereas voters who claimed later got nothing.
Consider freezing `voteRewardMultiplier` and the time of proposal creation. A prospective update of this setting via internal voting should not change rewards for old proposals.
Updating `rewardsCoefficient` can lead to unfair reward distribution on old proposals. Since voting rewards for a given proposal are communicated upfront, this could lead to a situation where promised rewards to users are not honoured.\\nProof of Concept: N/A
```\\n    function _getInitialVotingRewards(\\n        IGovPool.ProposalCore storage core,\\n        IGovPool.VoteInfo storage voteInfo\\n    ) internal view returns (uint256) {\\n        (uint256 coreVotes, uint256 coreRawVotes) = voteInfo.isVoteFor\\n            ? (core.votesFor, core.rawVotesFor)\\n            : (core.votesAgainst, core.rawVotesAgainst);\\n\\n        return\\n            coreRawVotes.ratio(core.settings.rewardsInfo.voteRewardsCoefficient, PRECISION).ratio(\\n                voteInfo.totalVoted,\\n                coreVotes\\n            ); //@audit -> initial rewards are calculated proportionate to the vote rewards coefficient\\n    }\\n```\\n