We already have the concept of vote multiplier when voting with ranks, I propose we generalize on the concept where rank becomes just one of the possible multipliers. We would remove the decision method Rank and add an optional gerneric type M to each of the other variants, current Rank becomes a special case of Standard + a multiplier that takes ranks into account.
A pallet config T::Multiplier can implement a trait VoteMultiplier { type Multiplier } that enables for all kinds of governance enhancements that don't need to go into the communities pallet code base. Besides standard ranks we can introduce things such as conviction voting, altering vote based on account activity, multiplier for staked assets, custom per-community-multipliers via smart contracts where a community could decide to increase a member's vote based on custom attributes set by the community on the membership of the user ... to give an example.
We already have the concept of vote multiplier when voting with ranks, I propose we generalize on the concept where rank becomes just one of the possible multipliers. We would remove the decision method
Rank
and add an optional gerneric typeM
to each of the other variants, currentRank
becomes a special case of Standard + a multiplier that takes ranks into account.A pallet config
T::Multiplier
can implement atrait VoteMultiplier { type Multiplier }
that enables for all kinds of governance enhancements that don't need to go into the communities pallet code base. Besides standard ranks we can introduce things such as conviction voting, altering vote based on account activity, multiplier for staked assets, custom per-community-multipliers via smart contracts where a community could decide to increase a member's vote based on custom attributes set by the community on the membership of the user ... to give an example.