Proposal to covert from system based reward to voter based reward; to implement an accept quorum mechanism; and to return the reject cost to 1 ICP

The following is a comprehensive proposal that aims to:

  • Reduce the Inflation given out as NNS rewards
  • Reduce the visibility of offensive/attention/in-actionable proposals in the NNS
  • Eliminate the financial incentive for spam proposals while maintaining the ability to weight proposals to incentives participation.

Action 1. Convert from a system-based rewards model to a voter-based reward model.

The current system determines a reward rate, total supply, and then determines the total reward to give each day by multiplying the (reward rate * the total_supply)/day. The total rewards are then handed out based on each neuron’s share of the total voting weight for the day.

The new system will determine the reward rate and multiply the rate by the weighted vote-completion percentage and bonus rate of each voting neuron.

A result of this proposal will be the reduction in total inflation of ICP due to the fact that some voters do no vote on all proposals or follow a voter for all proposals. The following illustration shows the handing out of rewards in the old vs new system.

Spam is neutralized because additional proposals will not affect the ability of a neuron to gain rewards. Any neuron’s maximum reward for the day is generated by Reward Rate *(Actual Vote Weight/Possible Vote Weight) * Age Bonus. Adding extra, superfluous heavy weighted votes only increase the Possible Vote denominator and thus does not increase the number of rewards handed out in a day.

Weights can remain in the calculations to encourage participation due to the fact that each voter is only competing against themselves to achieve 100% voting for the day.

This scheme can be easily implemented in the existing code by manipulating the distribute_rewards function to iterate over all considered_proposals, finding the weight of each proposal and creating a target sum. Instead of creating a map of voters_to_used_voting_rights, the map will also need to keep track of each vote’s absolute weight. The reward function on ic/governance.rs at 73983e05ebbab239ce39492a05fb39a83ce5dce5 · dfinity/ic · GitHub will need to be adjusted to be used_voting_rights * (total absolute vote weight/target vote weight). The used_voting_rights has the age and lock bonuses built in. (Note - The reward function is mapping twice as much data, so performance may be an issue here).

A worked example:

4 proposals are eligible for rewards on a day. The reward rate is 15%.

Proposal 1 - XDR Exchange Rate - Weight 0.01

Proposal 2 - Subnet management - Weight 1

Proposal 3 - Node Rewards - Weight 1

Proposal 4 - Governance Proposal - Weight 20

Total Possible Vote weight: 22.01.

Voter 1 - Passive whale votes with 10,000 voting reward on proposals 1-3. Total executed weight is 2.01. Thus the reward is 10,000 * (.15/365) *(2.01/22.01 = 0.3752 ICP(~1.3%)

Voter 2 - Active holder votes with 100 voting reward on proposals 1-4. Total executed weight is 22.01. Thus the reward is 100 * (.15/365) *(22.01/22.01 = 0.041 ICP (~15%)

Action 2 - Restrict reward qualification to a Threshold and implement an “accept quorum” for proposals.

This proposal was previously discussed at Proposal to restrict rewards qualification to a threshold - #43 by skilesare?

It was not voted on because it was pointed out that whales may purposely vote yes on a proposal to get it past the quorum. Since Action 1 eliminates this incentive it is repurposed to implement this solution quickly while other more involved and complex proposals are considered. It only requires changes to a few lines of code. It achieves much of the desired outcome of Multi-stage Governance Proposals, Starting w/ Stage 0 and Stage 1 and [Proposal] Introduce an incubation period and minimum support threshold for governance proposals but without increased complexity:

Objectives:

  • Decrease incentives to submit attention/offensive spam governance proposals
  • Protect the NNS from censorship, and preserve the current accessibility of submitting NNS governance proposals (i.e. does not increase the cost or difficulty of submitting an NNS proposal).
  • Allow NNS voters to ignore spam

Note : In this post, all references to “proposal” refer to all proposals, those could be restricted to governance proposals, but I don’t think that is necessary.

Solution

Update the NNS canister to skip rewarding proposals that have not received at least the Minimum threshold of Yes votes required to pass threshold of Yes votes(currently 3%).

Update the NNS canister to extend the end date to match the initial voting period when the proposal passes threshold of Yes votes required to pass Yes vote proposal.

Implementation for Proposed Solution

After line 6027( https: //github.com/dfinity/ic/blob/79bbd3177f6532037eb29d62b3e52a364a8103ee/rs/nns/governance/src/governance.rs#L6027 ) add the equivalent Rust code to the pseudocode below:

if( proposal.tally.yes/proposal.tally.total < MIN_NUMBER_VOTES_FOR_PROPOSAL_RATIO){continue;}

After line 5274(ic/governance.rs at 35acac6c1113a23e2cb92329f1431c5254567e6e · dfinity/ic · GitHub) add the equivalent Rust code to the pseudo code below:

let oldYesRatio = proposal.tally.yes / proposal.tally.total;

After line 5284(ic/governance.rs at 35acac6c1113a23e2cb92329f1431c5254567e6e · dfinity/ic · GitHub) add the equivalent Rust code to the pseudo code below:

if (proposal.tally.yes / proposal.tally.total >= {MIN_YES_THRESHOLD} and oldYesRatio < {MIN_YES_THRESHOLD}){proposal.deadline_timestamp_seconds = deadline_timestamp_seconds + (now() - proposal.proposal_time_stamp_seonds);

This proposal is put forward to complement https: //forum.dfinity.org/t/proposal-introduce-an-incubation-period-and-minimum-support-threshold-for-governance-proposals/12220/14 which is a longer-term solution. This implementation could be created much more quickly.

Action 3. Reduce the ICP proposal Rejection cost back to 1.

This proposal moves the Rejection cost back to 1 ICP so that almost everyone can afford to participate in submitting proposals to the NNS without undue fear of rejection.

Action 4. Affirm the utility of passive voting in a liquid democracy.

Finally, this proposal affirms the following patterns for consideration in future proposals:

  1. Active voting has a negative utility for the network when voters who do not understand a proposal vote on it manually.
  2. Passive assignment has positive utility for the network when voters assign their votes to knowledgeable and active voters.
  3. Short-term network security depends on maximum participation in non-governance topics and thus resetting of neuron following has a negative utility on the network.
  4. Zombie neurons have a negative long-term effect on the network and thus some consideration should be given to auto-starting dissolving neurons after a certain period with no activity. For example, if a neuron does not vote, change followees, merge maturity, spawn a neuron, or take some other proactive action, it will begin to dissolve after 1 year of inactivity.
  5. Decentralization of the network has long-term positive utility and thus a system for measuring the diversification and overall voting power of a Neuron’s followee’s should be explored and the network should consider reward bonuses or restrictions on neurons that over-centralize their neuron following graph.
9 Likes

I really appreciate seeing a full solution like this in a proposal that tackles all the issues we’re seeing right now. Thanks for all the time you put into writing this up and looking into the code.

I have a similar proposal idea in terms of fixing governance rewards, but I also really like the idea here that rewards which passive voters “miss” by not voting aren’t redistributed to those who do vote. It therefore removes the incentive for some to profit from voter suppression (i.e. by passing an enormous amount of proposals or resetting followees randomly). Well done! - I see this as an improvement that would tackle a problem we have not yet encountered, but could possibly encounter in the future.

The one issue I do see with this is that now we’re messing with the ICP inflation rate - DFINITY must have some reasoning behind their targeted inflation rate schedule design, so here and now might be a good time to provide an explanation before the voters potentially change it up @diegop.

Not to go into a price discussion, but a lower inflation rate could be a good thing since we’re currently seeing so much more ICP supply hit the exchanges than there is demand for that ICP. I don’t have any issues with a lower inflation rate and having that inflation rate be dependent on the amount of ICP staked in the NNS, although staked whales who are in it for the rewards might not look as favorably upon this proposal for that reason.

1 Like

I’d love to get their comment as well. There may be some tax reason that it works the way it does.

1 Like

I need time to think about action 1. It’s a very interesting idea. I didn’t understand your explanation until you provided the example of
Voter 1 and 2. One detail that still isn’t clear to me is how you came up with the reward rate of 15%. My first pass conclusion is that action 1 does solve the problem with spam that is submitted for the purpose of financial gain (edit: maybe not; see post from @bjoernek below). It also seems at first glance that action 1 maintains the utility of proposal weights to incentivize decentralization.

I don’t think action 2 is necessary because I think there is a simple idea to solve spam that is submitted for announcement and advertisement. This idea also enables your action 3 of reducing proposal rejection cost. Instead of a sizable penalty being assessed for a rejected proposal it assesses a sizable penalty for proposals identified as spam by the majority of votes cast. I think @Jarred-Sauce idea is very simple and effective without having to hide proposals or penalize the voter for their decision. The penalty falls solely to a proposer of spam without a quality proposer having to fear a high rejection cost for a proposal that risks rejection.

Action 4 seems like a catch all category. I fully agree with item 4 in the list. I think it’s really important for this topic to be discussed further. Items 1 and 2 are just affirming that liquid democracy is important. I don’t think this needs affirmation, but I fully agree that liquid democracy is very important. There seems to be a variety of definitions of active and passive in some of the conversations I’ve observed on social media, the forum, and podcasts, but to me active participation does not mean that a person votes manually on every Governance vote. To me, an active participant includes anyone who has intentionally selected their Followee(s) for all topics. My concern with passive voting is related to the fact that all neurons were configured to follow Dfinity by default for the first year. I think there should be no default following, but people are free to use whatever method they want to select their Followee. I think it should be a choice we make instead of someone else doing it for us. Liquid democracy is critical for success of IC governance for all the reasons you describe and making that as easy as possible is important. It can be easy and still characterized as active participation.

This rate is determined elsewhere in the governance code and is a function of the amount of ICP to the total supply that is staked. It will eventually decrease to 5%. 15% was just an example rate.

This idea also enables your action 3 of reducing proposal rejection cost. Instead of a sizable penalty being assessed for a rejected proposal it assesses a sizable penalty for proposals identified as spam by the majority of votes cast.

My concern with the Spam/Bad button is when it gets used as a club in inappropriate ways. The problem with giving the government all the guns so it can defend you is that the government now has all the guns. Hopefully, we stay decentralized enough for it not to become an issue, but a sizeable voting block could build a cartel to hit certain kinds of proposals with a heavy spam vote when it is a perfectly legitimate proposal that they just don’t like. Further, I’d argue that there is a financial incentive to vote spam on every proposal instead of NO because it burns more ICP and that is good for price.

1 Like

Got it. The quadratic decay I think you are referencing started at 10% at genesis and decreases to 5% over 8 years. This is not the reward rate though. This is the daily voting reward allocation. I suspect you intend to reference a calculation of estimated rewards like they do on the dashboard at the top of any neuron profile. It’s a calculation of daily rewards assuming all neurons vote to maximize rewards each day. I think that would be reasonable, but you might want to add clarity on what you mean by reward rate. The rate today for an 8 year neuron with approx 4 months age is 21.2%.

Is there any way you would consider breaking out action 1 into a separate proposal topic? I think I could support it by itself, but not actions 2 and 4. I could support action 3 as well assuming spam is addressed first.

The threshold that was proposed is 51% of total votes cast would have to call the proposal spam in order for it to be identified as spam. No neuron has this much voting power following them. Dfinity comes the closest by far, but I think Dfinity can be trusted not to abuse that power more than a minority of neurons can be trusted not to abuse a hidden proposal feature.

Even if a few voters did this as some sort of protest to our governance system, There is no way that 51% of votes cast would take this action.

Thanks for all the work you’re putting in here @skilesare! Before going into the separate parts of the proposal, how are you planning to submit this? I think it would be beneficial to submit things as separate proposals.

Action 1
So the TL;DR is, if you vote on all proposals you get the rewards as if everybody else also votes on all proposals, and you get reduced rewards if you miss votes (but those lost rewards don’t go to the active voters, instead they’re just not minted), right? I guess that could work, @bjoernek wdyt?

Action 2

Since Action 2 eliminates this incentive it is repurposed to implement this solution quickly while other more involved and complex proposals are considered

You meant “action 1” here right?

I think what’s missing from this proposal is that the proposals that didn’t reach 3% quorum yet should be clearly separated from the real proposals that i need to vote on, and that their timer should only start when they become a “full” proposal. I should be able to just check in once every 4 days and vote on all open proposals and not miss anything. And ideally I don’t even see spam proposals, unless i’m actively looking at “pre-proposals”.

Action 3
I think i would prefer to stick to 10 ICP for now, but i understand that different people have different views here.

Action 4
iiuc, this is not really a proposal, but more trying to establish that passive stakers are good for the ecosystem right? I agree with that, but I don’t think that should be submitted to the NNS.

3 Likes

Correct.

You meant “action 1” here right?

Yes…I’ll edit

Before going into the separate parts of the proposal, how are you planning to submit this? I think it would be beneficial to submit things as separate proposals.

The comment on the last submission was that DFINITY didn’t vote because they wanted a more comprehensive proposal. I’m happy to break it up if it makes sense and has momentum!

iiuc, this is not really a proposal, but more trying to establish that passive stakers are good for the ecosystem right? I agree with that, but I don’t think that should be submitted to the NNS.

I think you’re probably right, but I thought it made good context for the discussion.

1 Like

This builds beautifully on @justmythoughts reward mechanism. Awesome good to see the progress of these concepts as they bounce from brain to brain. However i still think we need a human in the loop to truly verify if proposals meet set guidelines.

1 Like

This is a wonderful proposal, but I have a simpler idea:

If a listed followee finds a “Spam” proposal, then she can immediately fold this proposal so that her followers will not automatically see it. If a follower wants to see what she folds, then he can just click some button to see the folded; if he think she always folds proposals maliciously, then he can unfollow her or even submit a proposal to unlist her.

I think this idea can cause minimal distortion of the voting market. It is so simple that someone must have already recommended it elsewhere.

This is an interesting concept. The above is meant to be a very light lift based on the current iteration of the code base. Longer term I think we have Better tuned options but they require new concepts, functions, and new code paths.

Thank you for the detailed proposal @skilesare ! I have the following initial comments

Process comment: As outlined in this recent post, we propose to structure the discussion around spam prevention (and voting enhancements in general) by assessing proposals against a set of pre-defined goals. This facilitates the discussion & benchmarking of the various proposals. → I suggest to conduct this assessment also for this proposal.

Clarification question on Action 1:

  • We have currently approx 195mn active voting on governance proposal (out of 410mn total voting power) which corresponds to approx 48% active voters.
  • If understand correctly, in your proposal the active votes will get 48% of daily reward pool regardless on how many governance proposals are submitted.
  • For the non-active governance voters (passive holders) the reward would however depend on how many governance proposals will be submitted and voted on, correct? E.g. on a day with 10 governance proposals they will receive almost no rewards. Thus one could use governance proposals to a) “punish” passive holders and b) to lower the daily supply increase. I am not sure if spamers would have an interest in a) or b) but this is a side effect worth considering.
1 Like

I think that is right. Basically, the votes that don’t get cast don’t get rewards. So 52% of the voters wouldn’t be getting the possible rewards because they don’t vote.

  • For the non-active governance voters (passive holders) the reward would however depend on how many governance proposals will be submitted and voted on, correct? E.g. on a day with 10 governance proposals, they will receive almost no rewards. Thus one could use governance proposals to a) “punish” passive holders and b) to lower the daily supply increase. I am not sure if spammers would have an interest in a) or b) but this is a side effect worth considering.

This is certainly a possibility, but I think it is also the intent of the changes in weighting. It is good for whales to have less inflation, so you are right, it could be abused. It is a bit more passive than voting to give yourself more numbers in your column, so I’d argue it is a step in the right direction, but for sure it doesn’t completely solve the problem. I guess the question to ask is does it offer enough incentive to cause spam. The “complete” answer is to set all weights to 1, but you lose incentives. I don’t think there is a complete answer that involves weights that can’t be manipulated in some way. Thus if you want to have incentives based on category weights I think you have to pick your trade-off. I’ll think a bit more on this.

Maybe the unclaimed rewards go to the community pool so the inflation still occurs, but it occurs for funding of projects?

1 Like

This abuse is possible b/c of the high weightings on individual governance proposal rewards. Setting a fixed % of voter rewards attributable to governance proposals on a daily basis would solve this.

Something like, you receive X% of total potential voter rewards per day based on your governance participation. The mechanism for doing this is outlined in Proposal to fix governance proposal rewards at 75% on a daily basis.

I think this combined with your idea of rewards without redistribution might be the solution.

1 Like

I’ve been thinking on this solution and I really like the idea of active voters not getting passive voter’s rewards, but instead having those rewards never minted. I also appreciate the fact that this is a change with known code changes and can thus be implemented quicker.

Applying the 9 design considerations presented by @bjoernek (Assessing governance & voting enhancements - #13 by bjoernek), this is how I see this proposal compared to the system as it is:
Decentralized & Active - Improves - Keeps the incentives for active participation (albeit, reduces the incentives) and also reduces the rewards paid to non-active participants (and any growing VP). It does, however, improve decentralization by removing incentives to suppress votes.
Secure - Slight Improvement - Removes the security flaw of spamming the NNS to hide proposals that should receive attention
Efficient and Scalable - Increases - End user experience can be increased by the option to hide proposals that have not met the 3% threshold.
Purposeful - Increases - reduces the incentives to spam for both increased rewards and for advertisement
Simple and Accessible - Decreases - slightly complicates the UI and back end functionality.

I certainly welcome any feedback on this evaluation.

All in all, I would support this measure. I’ve been enjoying the 40% APR rewards recently and this would reduce that to closer to 20%, but it would also provide more price stability by reducing the inflation in half.

1 Like

I would argue that this proposal actually makes voting on the NNS more accessible. Sometimes additional features being added to a UI simplify the user experience by compartmentalizing information, saving the user themselves from “information overload”.

Think about your email inbox - is it more “accessible” when spam is mixed in with the rest of the emails you actually want to read?

I think you’re onto something though in saying that the UI behind this solution is just as important as the backend changes themselves. Therefore, if we can turn the equivalent of the “spam” tab you click on in email into an “view all proposals” or those below a threshold (via a slider, sort of like the default visibility filter on the proposals you see when you first login in and vote on the NNS), then I think this actually makes the NNS voter experience simpler and more accessible.

Some amount of price stability is pretty important imo. Assuming the ICP price eventually stabilizes and reverses into a bull trend (ICP acts as deflationary against USD), we don’t want developers being incentivized to hold onto ICP until the moment they need to burn it, instead of being able to provision out cycles a month or even a year or so at a time without worrying that they’re losing out too much on the opportunity cost of future cycle burn.

The reverse situation (that we’ve been in since Genesis) incentivizes developers to burn their ICP as soon as possible for as many cycles as possible before the price drops. These are also the wrong incentives and messages to be sending developers.

@skilesare A few questions that just popped into my head. I haven’t done my due diligence on the the total ICP supply basis for the rewards rate, so maybe you can help clarify this for me here.

  1. Does this mean that individual voter rewards will be calculated on the total supply basis being every single ICP ever minted could be staked, or referring to the total supply being the supply of all ICP that has not been burned which could be staked?
  2. If (1) is based on the total existing supply (every or minus burns), this still is a massive hit to the staked rewards, quite possibly a halving as mentioned by @Kyle_Langham. How will you sell this to whales in the 8 year gang?
  3. Instead of the total supply, why not just calculate the voter rewards based on the total supply of staked ICP instead of the total supply of ICP in general? This way, the deflation rate is only based on voters that have staked but are missing rewards instead of based on all tokens in circulation (staked or not).

For action 1, I think there are 2 issues that need further consideration:
A) It will lower rewards that are currently accessible to NNS participants that vote on Governance topics. How to convince people it is the right answer?
B) In the current form, I think this will create a new spam incentive that doesn’t exist today. That spam incentive is to submit a governance proposal for the purpose of decreasing inflation. Some people seems to be very concerned about inflation and may submit proposals to prevent inactive voters from getting their fraction of the pie that would normally be available to them on days when there is not naturally a governance proposal. The solution to this is periodic confirmation of followees and reset of followees if not confirmed.

I’m leaning toward agreeing that action 1 is a good idea that improves the NNS and is in the long term best interest of the IC, but I think it still requires proposal 55651 to be effective and I don’t think action 2 or 4 are the best solutions. At this time, I would vote yes if action 1 is submitted independently, but I would vote no if actions 2 and 4 are also included.

A bit short on time, but I’ll make the following quick comments:

  1. Does this mean that individual voter rewards will be calculated on the total supply basis being every single ICP ever minted could be staked, or referring to the total supply being the supply of all ICP that has not been burned which could be staked?

I’m pretty sure this is an established ratio in the code. It is a factor of the total supply to the staked ICP. You can see the fraction calculation on ic/governance.rs at 73983e05ebbab239ce39492a05fb39a83ce5dce5 · dfinity/ic · GitHub. I’m not proposing any change to the fraction calculation, only that the fraction that is determined is equal to the “reward rate” in the future calculation. Currently that rate is used to determine the fraction of total supply that should be used as the day reward and I’m proposing that the same fraction be used to calculate an individual neuron’s reward.

How will you sell this to whales in the 8 year gang?

They have as much to gain from a reduction in inflation as anyone. People are prone to focus on “line goes up” and “total icp in my account” is easy to grok. The proposes trading 1 ICP in my account at $8/ICP and declining price vs 0.5 ICP in my account at $8 with increasing price. Of course, it is all relative and there are external forces that make this not a straight line calc. If we can’t get the whales to think about second-order effects then we don’t have much hope of effecting change.

  1. Instead of the total supply, why not just calculate the voter rewards based on the total supply of staked ICP instead of the total supply of ICP in general? This way, the deflation rate is only based on voters that have staked but are missing rewards instead of based on all tokens in circulation (staked or not).

I’m not sure I’m following you here. The current skew of almost 40% returns for active voters/delegators is an accident of implementation. If you review all the docs from genesis we’re supposed to be at about 20% and decreasing toward 10%(for 8 year gang). Once re assign neurons happens we will all start approaching that rate anyway. This proposal offers a reduction in inflation on the way to full reassignment(which I do not think we will reach).

@wpb

A) It will lower rewards that are currently accessible to NNS participants that vote on Governance topics. How to convince people it is the right answer?

If we are doing 55651 then we are headed there anyway. This gets us there with less inflation. Seems like an easy argument if people will consider second order effects.

B) In the current form, I think this will create a new spam incentive that doesn’t exist today. That spam incentive is to submit a governance proposal for the purpose of decreasing inflation. Some people seems to be very concerned about inflation and may submit proposals to prevent inactive voters from getting their fraction of the pie that would normally be available to them on days when there is not naturally a governance proposal.

I agree this is an issue. The question is will there be less incentive? Reduced inflation doesn’t increase the number of ICP in your account in such a direct way, so perhaps it is less of an incentive? People are jerks, so I don’t doubt their capacity spam for spite, but I think it will be better than what we have right now.

I’m leaning toward agreeing that action 1 is a good idea that improves the NNS and is in the long term best interest of the IC, but I think it still requires proposal 55651 to be effective and I don’t think action 2 or 4 are the best solutions. At this time, I would vote yes if action 1 is submitted independently, but I would vote no if actions 2 and 4 are also included.

I agree about 55651 being complementary, but you’re more bullish on how much effect it will actually have. I think it will take a long time for those neurons to catch up.

We can certainly get rid of 4 as they are just there for context.

2 is a more quickly implementable version of @justmythoughts and @lastmjs 's proposal for incubation periods. I would think if you are in favor of those that you’d be in favor of this as it is a one-week project vs a one-quarter project(and in DFINITY time those time periods can be…maybe extended?..sometimes?)

its still 20percent in overall minted supply lol it seem like some people here try to protect whales that didnt vote n lose half of the reward to those who vote n being active (small retail 8years gang)