Voting Power Modifier

I originally posted this in the Discord, thought it would be appropriate to move here.

Problem:
When you look at several projects, exchanges and speculating whales almost always lead the pack in voting power. This doesn’t make sense for DAOs and community ran projects. Smaller holders, no matter how long they’ve been supporting the project, are at a disadvantage and are drown out by these massive accounts. This leads to the project being driven by speculators and exchanges, who then vote on proposals to control the narrative to fit their wants and needs, rather than the community at large.

Solution:
Introduce a multiplier to voting power that incentivizes long-term participation from users, as well as prevents exchanges and speculators from having too much power.

Proposal:
When I was first introduced to Dragonchain in 2017, I was very intrigued by the idea of TIME. TIME works like this: User deposits token into their wallet. From that moment, they begin accumulating TIME. Every block the wallet gains more TIME. For the sake of this example, let’s say that every block a user generates .001 TIME for each token in their wallet. If the user holds 1000 tokens, they generate 1 TIME per block. TIME accumulates until the user withdraws any of the tokens, at which time it would be reset to zero. Deposits do not affect TIME. Now that you have a basic understanding of how TIME works, let’s apply it to voting power. In this case, we would use TIME as a multiplier to increase voting power for long-term participation. Let’s look at an example.

User 1 has 1,000,000 BAO. They are a speculator and have been trading BAO. Because of this, they accumulated very little TIME, let’s just assume they made a trade just now, so their TIME has been reset to zero. This would make User 1s voting power 1,000,000.

User 2 has 100,000 BAO. They are a long-term hodler. They’ve been holding for 1 year and have not withdrawn any BAO from their wallet. Ethereum processes roughly ~6500 blocks a day. For each block, User 2s multiplier increases by .001. At 6500 blocks a day, there would be 2,372,500 blocks in a year. To get our multiplier we do the math: 2,372,500 * .001 = 2,372.5. You then take this number and multiply it by their total holdings: 100,000 * 2,372.5 = 237,250,000

User 1 voting power: 1,000,000
User 2 voting power: 237,250,000

As you can see, although User 2 holds far less BAO than User 1, their voting power is exponentially larger because of their long-term participation.

In the previous example, we did not apply the current method of calculating user voting power to make it as simple to understand as possible.

For our final example, we have a user who is a long-term BAO holder, and has been providing liquidity for some time. Let’s calculate their voting power.

This user has 3,000,000 BAO, 16,000,000 locked BAO, and is staking 1,500 LP BAO-ETH LP Tokens. They’ve not made any withdrawals in 1 year, and have been providing liquidity for 6 months.

Based on the current formula for determining voting rewards we would take 33% of the users locked BAO (5,280,000), 25% of their unlocked BAO (750,000) and 3x their BAO in the BAO-ETH pool (~1,800,000 at time of writing).

((Unlocked BAO + Locked Rewards) * Wallet TIME) * (BAO LP * LP TIME) = Total Voting Power ((750,000 + 5,280,000) * 2,372.5) * (1,800,000 * 1,186.25) = 16,441,425,000

With a total voting power that high, it would be nearly impossible for any exchange to have more voting power than your “average” long-term user.

To take this one step further, we can also include a modifier for Participation. If you’ve never voted, your voting power would be the value above. For every consecutive vote, your Participation would increase by 1, and for every vote you miss, it would decrease by 1. In that case, the formula would be the same, but with the addition of an IF statement:

if Participation >= 2 then
(((Total Holdings + Locked Rewards) * Wallet TIME) * (LP Tokens * LP TIME)) * Participation Multiplier = Total Voting Power
else
(((Total Holdings + Locked Rewards) * Wallet TIME) * (LP Tokens * LP TIME)) = Total Voting Power

Conclusion:
By introducing a multiplier while determining user voting power, we can assure that the protocol is controlled by the users who are most active and committed to the project. Exchanges and speculators will constantly be withdrawing BAO from their wallets, which will keep their multiplier very low and prevent them from controlling governance.

8 Likes

What do you think about quadratic voting as an alternative?

TLDR: quadratic voting limits the vote of larger stakeholders. For example, someone with 10K tokens would get 100 votes. And someone with 10M tokens would get 3162 votes.

I think it would work great, but from what I understand, BaoMan says it isn’t possible at this time?

Quadratic voting is a fantastic concept but only works if you can validate something is sybil resistant which a decentralized protocol has no real way of doing yet - BaoMan

2 Likes

Correct impossible in a platform where people stay anonymous.

To do quadratic voting you’d have to do some sort of KYC or verification which doesn’t make sense.

1 Like

A few points to consider:

  1. The wallet times that tend to have the longest hold are actually exchanges, because the assets sit idle even if they rotate in the exchange. So this overly helps exchanges.

  2. Tracking time on a blockchain is really hard as it is done by block. We’ll also be on two chains (xDAI and ETH) which have different block times (5s and 15s respective)

  3. Since users need to migrate their xDAI ones back to the main net this would invalidate the wallets hold time.

  4. This is painful to code.

  5. “If statements” are the worst offenders for gas usage in Ethereum.

I like the concept and I think we need to continue to refine voting weight, so don’t give up on exploring this but these are just points to keep in mind as you do!

8 Likes

Appreciate your feedback BaoMan! I will take these points into account and see if I can come up with some ideas.

4 Likes

Based on discord as well I suggested an alternative to the time part. Since exchanges most likely won’t go and stake.

What about applying a ratio hold to stake

If you stake more than you hold 25% applies
If your hold is 2:1 higher compared to your stake the 25% gets divided by the ratio difference

And perhaps also apply something similar as the penalty fees on the stake

10% of stake is taken into consideration if the original stake is older than 5 days old
25% of stake is taken into consideration if the original stake is older than 10 days old
50% of stake is taken into consideration if the original stake is older than 25 days old
100% of stake is taken into consideration if the original stake is older than 45 days

Not sure on the feasibility of the time aspect if that is hard to track.

*numbers are just examples

3 Likes

To me the problem analysis highlighted in the first post of this thread is misleading.

Problem:
When you look at several projects, exchanges and speculating whales almost always lead the pack in voting power. This doesn’t make sense for DAOs and community ran projects. Smaller holders, no matter how long they’ve been supporting the project, are at a disadvantage and are drown out by these massive accounts. This leads to the project being driven by speculators and exchanges, who then vote on proposals to control the narrative to fit their wants and needs, rather than the community at large.

The reason why exchange are leading the pack in voting power is because the community is depositing token here. Also Exchanges does not really care about governance topics (see Hive and steemit episode) unless they have $$$ incentive.

Don’t forget you are the community you can decide to give your vote to exchanges, or not!

if this is something you are kind to avoid I see 2 ways

  • incentive community so that they won’t deposit token on exchange (not a solution to me)
  • educate community (I bet 95% of people are don’t even understand what we are talking about just look the number of post here vs price discussion channel lol)
2 Likes

what about just: 1 wallet = 1 vote . regardless of how many bao that wallet have

1 Like