The VotingMath::calculateVotingPower function yields the result of multiplying the lockedAmount by the remainingVestingDuration and ultimately dividing by the MAX_VESTING_DURATION which we consider an insecure measurement of a position's voting power.
Specifically, the current mechanism uses a weak dynamic between the time a vest occurs and the balance for which it occurs whereby doubling the vested balance will halve the vesting duration. This is unfair as the opportunity cost as well as potential market fluctuations a long-term vesting member will render themselves susceptible to are far greater than a short-term vesting member.
Impact:
The current mechanism does not adequately incentivize long-term vests and thus results in a less secure governance mechanism as voting power frequently exchanges hands and is easily acquirable temporarily.
Example:
/**
* @dev Calculates the voting power based on the amount of tokens locked and the remaining vesting duration. The
* voting power is proportional to the product of the locked amount and the remaining vesting duration, divided by
* the maximum vesting duration.
*
* @param lockedAmount The amount of tokens that are locked.
* @param remainingVestingDuration The remaining duration for which the tokens are locked.
* @return The calculated voting power, scaled according to the remaining vesting duration and the locked amount.
*/
function calculateVotingPower(uint256 lockedAmount, uint256 remainingVestingDuration)
internal
pure
returns (uint256)
{
return lockedAmount * remainingVestingDuration / MAX_VESTING_DURATION;
}
Recommendation:
We advise a model akin to the original legacy RWAVotingEscrow implementation to be applied, f.e. utilizing exponentials to significantly increase the voting power of long-term holdings while ensuring medium-term but large amount holdings are equally incentivized.
VMH-01M: Potentially Weak Voting Power Mechanism
Description:
The
VotingMath::calculateVotingPower
function yields the result of multiplying thelockedAmount
by theremainingVestingDuration
and ultimately dividing by theMAX_VESTING_DURATION
which we consider an insecure measurement of a position's voting power.Specifically, the current mechanism uses a weak dynamic between the time a vest occurs and the balance for which it occurs whereby doubling the vested balance will halve the vesting duration. This is unfair as the opportunity cost as well as potential market fluctuations a long-term vesting member will render themselves susceptible to are far greater than a short-term vesting member.
Impact:
The current mechanism does not adequately incentivize long-term vests and thus results in a less secure governance mechanism as voting power frequently exchanges hands and is easily acquirable temporarily.
Example:
Recommendation:
We advise a model akin to the original legacy
RWAVotingEscrow
implementation to be applied, f.e. utilizing exponentials to significantly increase the voting power of long-term holdings while ensuring medium-term but large amount holdings are equally incentivized.