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)
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.
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
- 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.
w = w * (1 + x/100)
We can also implement a maximum weight
w_max to prevent large weights from deterring potential new future stakers.
- 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.
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 = 0since future re-staking will already lower the weight. But we can always program this into the contract for future use.
w = w / (1 + y/100)
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%|
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).
Thanks to jortmoney, junkshot and Vlad for their contributions to this AIP
Copyright — All proposals are public domain via CC0.