Voting Power is an equation where we look at your Franken holdings and determine how much "voting power" your wallet has.
Voting power is an important concept in the Franken DAO.
In our view, voting comes down to two main factors: how many FrankenPunks/FrankenMonsters do you own and how much of a positive contribution have you had on the DAO?
The system is divided into two distinct types of Voting Power.
- 1.Token Voting Power are the votes you earn through staking your tokens. This is calculated as follows:
Token Voting Power = (Base Votes + Staking Bonus + Evil Bonus) * (Monster Multiplier / 100)
- Base Votes is a number set at the contract level. It will be initialized to 20.
- Staking Bonus is calculated when tokens are staked. It is awarded linearly based on the formula
(unlockTime - block.timestamp) / maxStakeBonusTime * maxStakeBonusAmount. In other words, you can earn
maxStakeBonusAmountif you stake for
0if you stake for no time, and rewards are added linearly between these points. These values will be initialized to
- Evil Bonus is a bonus for FrankenPunks stakers whose underlying tokens have specific traits. The bitmap of users who have sufficient "evil score" to get this bonus is stored in
EVIL_BITMAPSand accessed to determine whether a specific ID should get the bonus. This value will be initialized to 10.
2. Community Voting Power are the additional votes you earn by being an active participant in the DAO.
This is calculated as follows:
Community Voting Power = ((# Votes * votesMultiplier / 100) + (# Proposals Verified * proposalsCreatedMultiplier / 100) + (# Proposals Passed * proposalsPassedMultiplier / 100))
- votesMultiplier, proposalsCreatedMultiplier, and proposalsPassedMultiplier are all values that can be set by governance to adjust the importance of these actions. They will be initialized to 100, 200, and 200, meaning users will earn 1 additional vote per vote they cast, 2 votes per proposal they get on chain, and 2 votes per proposal they get passed.
- A user will only earn Community Voting Power if they have some Token Voting Power. In other words, if a user has delegated their votes, or doesn't have any tokens staked or votes delegated to them, they have no voting power, and they therefore forfeit their community power.
- Users who delegate their votes to others therefore delegate only their Token Voting Power, and their Community Voting Power is temporarily forfeited (until they undelegate their votes).
Most governance systems (including Nouns) use some form of checkpointing to capture each user's voting power at the time of a proposal, to stop users from "double spending" their tokens on votes.
In order to improve gas efficiency, we've implemented a different system.
- When a user's votes are used on a proposal (whether through voting directly, having a delegate vote, proposing the proposal directly, or having a delegate propose a proposal), their tokens are locked until that proposal is no longer active.
- Since FrankenDAO tokens are non-transferrable, we simply block the ability to unstake or delegate, and that ensures that users must hold their tokens once they've "used" them on an active proposal.