ReProposal: Spam Prevention - Convert from system-based rewards to voter based rewards

Proposal: 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 not 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 increases 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/ 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%)

Why Now?

The new exchange rate mechanism(New Exchange Rate Mechanism - #28 by THLO) will make spam much more attractive. We need a quick fix and this is the quickest route to implementation.

A few more notes from the discussion with the community/foundation(h/t to @bjoernek for compiling):

  • Proposal: The reward mechanism assumes that everybody votes on all proposals. If you vote on all proposals you get rewards corresponding to your share of voting power compared to the total voting power. You get reduced rewards if you miss votes, but those lost rewards don’t go to active voters.
  • Impact on total rewards/inflation: This proposal reduces the rewards which are allocated on a daily basis, depending on how many participants miss votes. This reduces inflation. In a second stage (out of scope of this proposal) we could consider allocating these un-distributed rewards to an NNS treasury.
  • Impact on financial incentives: This proposal removes the direct financial incentive to submit spam proposals, i.e., active votes will not gain additional rewards in case of spam proposals. However there is still an indirect financial incentive as the new mechanism reduces the inflation; this creates a benefit for ICP holders (staked/unstaked)
  • Impact on reward weights: As this proposal removes the direct financial incentive for spam we could consider to reset the reward weight for governance proposals back to 20.
  • Implementation effort: This proposal requires only an update of a few lines of code within the function distribute_rewards in Thus this can be implemented relatively quickly.
  • Why bring up this proposal now again?
    • In connection with the new exchange rate mechanism we require a quick solution.
    • Earlier concerns on the ability to influence the inflation rate (and thus also reduce the predictability of total supply) are much less of an issue now, given that maturity modulation included anyway further uncertainty on this.
  • Connection to periodic confirmation of following: We already have an approved motion proposal for spam prevention namely periodic confirmation of followees. However, this still requires some enhancements wrt to the handling of time-sensitive proposals (for which a few ideas are under discussion). Periodic confirmation of followees could still be valuable, even if this proposal is implemented because it strengthens active voting participation.

Personal note: I think putting the inflation into an NNS treasure is a great idea. This gives orgs like ICDevs a place to go to seek funds for specific projects that need to be built and hands control of those decisions to the NNS without as much work required by the foundation. This proposal is a step one toward doing that as it gives us an obvious chunk of value to use. It is also a win/win for the passive staker that may miss votes as the funds are still used for the benefit of the community and could, in theory, a much higher financial impact than liquidating them today. It is hard to find win/win scenarios, but we have one here.


I plan on submitting this to the NNS after seven days of discussion(unless we find significant issues).


I’m torn on this proposal. I’ll offer some thoughts, but haven’t decided yet how I would vote…

  1. I think removal of exchange rate proposals may not have that big of an effect on spam. Sure there is more incentive as @bjoernek described, but I’m not sure it will actually result in spam for the purpose of financial gain. The incentive for spam is still much lower than it was when Governance proposal weights were 20x. Two easy disincentives for spam include increases in proposal reject fees as well as people continuing to submit Register Known Neuron proposals (since they are legit Governance proposals). I provided additional feedback in this comment.
  2. I’m much more concerned about what happens when there are no proposals. The Exchange Rate proposal is the only reason we have been guaranteed voting rewards every day. I don’t currently know if the NNS already takes care of this in some way or if a new policy needs to be implemented if there are no proposals.
  3. The white box in your chart is a lot smaller today since Governance proposal weight is only 1x and there are very few Governance proposals. Hence, if this proposal does move forward, I would argue that the Governance proposal weight should revert back to 20x at the same time. The size of the white box would then be closer to accurate. I want there to be an increased incentive for active participation in governance like there was with the Governance proposal weight was higher, which will only occur if people are losing voting rewards by not voting. I fully agree that this proposal is a disincentive for spam, which means an increase of Governance proposal weight will not re-incentivize spam.
  4. I don’t believe we have an inflation problem and I don’t like the idea of burning voting rewards. I would rather they be redistributed to active participants in governance as they are today compared to burning voting rewards. However, I think building an NNS treasury (or whatever it should be called) is a very productive use of those voting rewards. I can envision many use cases, all of which needs a lot more discussion. For example, those rewards could be used to incentivize experts, incentivize named neurons, fund community driven proposals AND community driven implementation, fund R&D on the effectiveness of tokenomics as well as how to decentralize the IC, fund code bounties that are specifically related to governance and progress toward decentralization, fund new organizations so DFINITY is not the only major contributor to the Internet Computer blockchain, etc. I would rather see unclaimed voting rewards (from not voting) dedicated for this purpose instead of being redistributed to active participants in governance. I see this as a better use of these funds for the long term best interest of the IC and in line with the tokenomics purpose of incentivizing governance participation.
  5. I also agree this proposal is complimentary to periodic confirmation of followees, which I would still like to see implemented in due time.

I’d be happy to propose this as well if/when this proposal passes. We could make it part of this proposal as well, but I don’t know if that is a separate proposal type. We need an IFTTT for proposals. :slight_smile:

1 Like

I would like to propose a different approach that is passive but brings the rewards to those who are more active.

What if each proposal is active for 3 days so I can have a life and not have to login to the NNS every 2 hours but maybe daily and be able to vote on all proposals and not have to rush through these proposals and get to have the time to vote before time runs out.

Maybe then we will see that many neuron holders will reject spam as they will have the time to realize that a proposal is spam not as it is at the moment all spam is approved.

I notice that there are reject votes for the network upgrades this morning but why.

Just to repeat myself to be clear about why I think the NNS fails.

Everyday I feel I have to login to the NNS every couple of hours and if I see active proposals then I rush to vote before they disappear from my screen.

This I believe will reward those who are active and then those who follow have reduced rewards for following.

My reason for investing on the NNS is to receive rewards and NOT fund programmers and their projects. Over the years the funds that were invested early and bought ICP cheap is their reward and programmers and their projects have been given billions already.

So to be clear I say no to giving rewards to projects.


Agreed with every point, especially the second. Rewards from days with no proposals should be compounded and distributed eventually.


You don’t need to do that. The governance proposals that you need to follow are already 4 days long. For the others you can just follow DFINITY for…unless you’re wanting to reject them…then yeah…you have to be quick.

1 Like

Just to iterate from my side: I think this proposal would be a very practical & good solution (for the reasons outlined above) and thus I am supportive.

I have provided further details in the forum post which you linked. In particular for week-ends we would end up on a similar level of incentives (comparing gov weights=20 and exchange rate proposals vs gov weights=1 and no exchange rate proposals).

Functionality for this case is already implemented in the NNS. The reward pot on days without voting would be carried over to the following day.

Agreed. Aligned with the comment by @skilesare, we should consider increasing the reward weight for governance proposals. I would be in favour of that.

Yes, I also agree on that point. We should definitely consider establishing a NNS treasury, to which we could allocate for example the undistributed rewards. Given that this requires some discussion & design, this could be done in a second step.
In the meantime, we could track how much of the reward pot is not distributed.

Yes, probably the focus of periodic confirmation would shift. Instead of spam prevention it would be more about regular participation in governance.


Anything that does this directly will incentivize spam. Anything that does it indirectly by addition may. This proposal benefits indirectly, but by subtraction(inflation) and even that could incentivize spam a bit…for the really patient.

This is really good feedback. Thank you on all points!

I do see the issue with potential for spam on weekends. If there are no exchange rate proposals, no routine business proposals (e.g. subnet updates), and no register known neuron proposals, then there is likely an incentive for 1 spam proposal. TBH I think people will catch on pretty quickly that weekends are the time to submit register known neuron proposals, which will make it pointless to spam. I’d even offer to make the register known neuron proposals for anyone who wants to pursue it so we lower the barrier to entry on submitting that proposal. :grin:

@skilesare if I understand this correctly, with your proposal someone who votes by following receives less rewards than someone who votes manually.

Please could you confirm that?

If so, I think this has implications for named neurons.

For example, I have a named neuron that I only set up recently and only staked the reject cost of 10 ICP. I have a much older personal neuron with more staked which follows that so I only need to vote using the named neuron.

With your proposed changes, I think I would need to vote with my personal neuron in order to maximize rewards. In my case I could easily swap things around so that the newer named neuron follows the older personal neuron, and I vote with my personal neuron instead.

I’ve heard @Kyle_Langham say publicly that they do what I currently do, and that’s what inspired me to set things up the way I did.

However, the neuron they vote with is followed by ICPMN so if they wanted to swap things around then the ICPMN neuron would need to start following that instead.

Maybe making that change isn’t a big deal but I think people should at least be made aware of this otherwise they’d still be voting manually and not getting the appropriate rewards.

1 Like

I don’t interpret anything in @skilesare proposal that differentiates voting rewards between voting manually vs vote following. The only distinction is voting or not voting. If you vote on every proposal, no matter how your vote gets executed, you still maximize voting rewards.

Also for public named neurons, it doesn’t matter if you vote with your main private neuron that is followed by your public neuron or vice versa. Another method is to use hotkeys and cast both votes at the same time. Regardless, the only reason to create a new neuron to use as a public neuron is to prevent someone from linking it publicly to your main private neuron by tracing ledger transactions and stake amounts. This is best accomplished by funding your public neuron through an exchange (or Spinner Cash would work as well).

1 Like

I thought this terminology might imply voting by following vs. voting manually, which is why I asked.

I understand that this is the way it works now, but may not be how things work if this proposal was implemented (depending on the answer to my question)

1 Like

I think this points to a common misconception and I wonder if it’s because people view following a neuron as “passive”.

But it’s really the non-participants who don’t vote manual or follow a neuron on governance proposals that everyone is suggesting should get less rewards because their neuron is not voting at all on those proposals.

Maybe there’s a better term we all can use to define those who are not voting to replace “passive”?


I was about to ask you what terminology caused you to think it was about voting manually vs vote following. Thanks for sharing. I think @skileshare should clarify that language to avoid confusion.

1 Like

As it stands now, I think I would reject this proposal since it is currently scoped to reduce inflation by burning voting rewards. However, I think the proposal has a lot of potential if you give it some important tweaks. Hence, I propose that you modify your proposal in a few ways:

  1. remove language that uses inflation reduction as a driver
  2. add the concept of tracking undistributed maturity so it can be used in the future in ways that benefit governance and decentralization of the internet computer
  3. add that the Governance proposal weight will be immediately reverted back to 20x upon implementation of your proposal
  4. deleted as explained here
  5. add the clarification needed to address concerns expressed by @paulyoung

Of course, this is your proposal and your decision if and how to modify the proposal. I’m just offering my two cents on what I think would most benefit the IC ecosystem and increase the probability of passing. I appreciate you giving consideration to these proposed modifications.


That is 100% not the case. By “passive whale” I meant whales that have not bothered to follow someone other than dfinity for governance. I’ll clarify. I consider delegating one’s vote to someone more qualified the true power behind liquid democracy.


I agree with all of this in principal but I’m not sure if we can/should do all of that at one time *in practice *.

1.An NNS team member should tell us if any of those need to be separate to enact an on chain effect.
2. Adding anything about tracking burned tokens will complicate the code changes and delay the implementation. I think I’d rather use the reduction to light a fire behind the community to find a solution. To me it would seem that the worst that could happen is a reduction in sell pressure while we figure out what to do. But I’m open to other arguments or pull request that simplify the tracking.

1 Like

It might require a further clarification since there is a little more nuance. All neurons were originally configured to follow DFINITY for the All Topics catch all category. No neuron was originally configured to follow anyone for the Governance topic directly. Since the Governance topic was removed from the All Topics catch all, the neurons that receive voting rewards for Governance proposals are neurons that vote manually or have been configured to follow someone else for the Governance topic. Hence, your reference to passive whales really means any neuron that is still following only DFINITY for the All Topics Except Governance catch all category. Any neuron that is following DFINITY for Governance is active and voting.