airswap / airswap-aips

AirSwap Improvement Proposals
22 stars 3 forks source link

AIP 19: Voter Loyalty Points to Incentivize Long Term Staking #19

Open agriimony opened 3 years ago

agriimony commented 3 years ago

Summary

This is similar to what was proposed in AIP6 but never implemented. This proposal seeks to create a loyalty point system that rewards active participation in governance and continuous long-term staking of AST. A correct implementation should result in a system which rewards early and continued participation in governance (e.g. 1000 AST staked today should be worth more than 1000 AST staked next year as long as the staker remains actively involved in governance of the network)

Rationale

Early stakers hold additional risk as they are effectively beta testing the system. An incentive needs to be given to early stakers to encourage them to remain invested in the network. This way, early stakers can still maintain a decent voter percentage in the future as more AST gets staked.

We also do not wish to incentivize passive staking, and hence we believe it is more fair to tie loyalty rewards to number of AIP votes participated in, rather than time of initial stake. In the future, it may also be possible to tie this reward to other community / governance initiatives to encourage involvement in the decentralized community.

Specification

A new weighting parameter, w, is introduced which is the multiplier applied when converting from sAST to voting power and claiming points. w starts at 1 for all new stakes.

Points = sAST x w

The value of w is modified by 3 events

  1. Voting - on successful completion of a vote, multiply w by a certain percentage (e.g. 1%). This percentage can be decided by a simple community consensus.

On voting, w = w * (1 + x/100)

We can also implement a maximum weight w_max to prevent large weights from deterring potential new future stakers.

  1. Staking - when staking a new amount, w is decreased by a certain amount depending on the size of the new stake. This is to ensure that the old multiplier is not being unfairly applied to new stakes. This can be done by calculating the new weight such that the total points will equal to the old points + new sAST staked (any new AST staked has a weight of 1)

Given a current stake of size s and a weight of w, the number of points would be equal to sw. When the user stakes a new amount t, the new number of points would be equal to sw + t. We can easily calculate the new weight, w2, by the following equation

w2 * (s + t) = sw + t w2 = (sw + t) / (s + t)

On any given staking event, we can simply update the value of w = w2 to make it fair.

  1. Unstaking - optionally, unstaking can also incur an additional penalty to the multiplier which can be defined by the community. Currently, the opinion is to set y = 0 since future re-staking will already lower the weight. But we can always program this into the contract for future use.

On unstaking, w = w / (1 + y/100)

Examples

Assuming that one starts with 1000 sAST. The following table shows how the weight of his vote (and points generated) will increase with the number of governance events participated in. Note: This does not change his actual staked amount. Participated in _ Votes x = 0.1% x = 0.5% x = 1%
1 1001 1005 1010
2 1002 1010 1020
5 1005 1025 1051
10 1010 1051 1105
20 1020 1105 1220
50 1051 1283 1645
100 1105 1647 2705

Potential Problems

Currently, staking is done on-chain while voting is done off-chain. It might be difficult to have an implementation which can capture both staking/unstaking events (on-chain) as well as governance events (off-chain).

Credits

Thanks to jortmoney, junkshot and Vlad for their contributions to this AIP

Copyright — All proposals are public domain via CC0.

agriimony commented 3 years ago

jortmoney Feb 18

Extensive write up, I like it a lot! What I’m wondering about is the penalty imposed upon unstaking a certain percentage. Why do we need to impose a penalty? If a person unstakes 50%, then the future rewards will also be lower, because the multiplier applies to a lower amount of sAST. And since the multiplier (over the total staked amount) decreases when a person adds to their stake, I don’t get the need to impose a multiplier penalty after partial unstaking.


agrimony Feb 19

Great question! I’m definitely double penalising unstaking here to disincentivize unstaking. This way unstaking not only affects current weightage but also past weightage.

Alternatively we could also implement some less harsh form of penalty for unstaking. Eg consider it an “unvoting” event instead?

Not sure what the rest think. Should we “unfairly” penalise unstaking?


VladislavW Feb 19

agrimony i have read your AIP 19 proposition and i like it! But i have a few questions and comments:

We can smoothly implement this AIP to the current rewards system but how would it work in proportional reward system?

We cant give any bonuses if the pool will proportionally distributed to all voters because we will have more then 100% of the pool size to be distribute. We can try to adopt it and let the long term active voters to get some bonuses to the detriment of those who staked later but that would be unfair and start looking like ponzi. So as the result, approving this AIP makes no sense to fundamentally change the reward system ty proportional model in nearest future.

As mentioned by jortmoney AIP 19: Time-Weighted Voting Points - #2 by jortmoney

I don’t think we have to add some more penalties for unstaking, only bonuses for active voting


agrimony Feb 19

We cant give any bonuses if the pool will proportionally distributed to all voters because we will have more then 100% of the pool size to be distribute.

The pool distribution is normalized after the allocation of points, so the bonus does not inflate the pool above 100%. If everyone votes, then the % allocation remains exactly the same.

e.g. Alice = 10 sAST, Bob = 20 sAST. Their reward payouts are Alice = 33% and Bob = 66%. After voting, they gain a bonus weight of 10%. The 10 sAST that Alice has is worth 11 points, while Bob’s 20 sAST is worth 22 points. After the 2nd vote, their reward payouts remain as Alice = 33% and Bob = 66%.

However, if Alice votes and Bob does not vote. Alice now has 11 points, while Bob still has 20 points. That increases Alice’s share of the rewards to 35%, while Bob’s share will be reduced to 65%. Hope this clarifies.

We can try to adopt it and let the long term active voters to get some bonuses to the detriment of those who staked later but that would be unfair and start looking like ponzi.

This is the goal of the proposal, to reward long term stakers. Those who stake later did not face the same risks of the early stakers and should be rewarded less. We can also implement a bonus cap so that later stakers might still have some skin in the game.