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

Regarding the follow-up questions

  1. Tracking of un-allocated voting rewards: I agree that this would a sensible addition to the proposal and I will check with the dashboard team next week on their thoughts & potential effort. Aligned with @skilesare’s point, I think this could also be implemented slightly later, i.e., I do not see a hard dependency.
  2. Governance weights to 20: This also makes sense to me. I think this could be part of the motion proposal but the implementation could come slightly later. (The effort is not be big but requires as usual some sanity checks & testing).
  3. Rejection fee back to 1 ICP: I assume that this is obsolete given the latest developments discussed here.
1 Like

I agree with @bjoernek here

My point number 4 above should be deleted since this proposal does not eliminate the potential for spam for the purpose of advertisement.

Also, I see this proposal as a framework for a path forward, not the final solution that will be implemented as written. Hence, I would rather see some of these key elements incorporated into the proposal now even if implementation comes in stages. I don’t see a need for a rushed implementation of this proposal, especially when an increased proposal reject fee is a quicker and easier temporary solution to any increased risk of weekend spam when exchange rate proposals are removed from the NNS.

To me, this proposal is a very good way to build an NNS treasury that can fund a lot of efforts that drive governance participation and decentralization. I think this proposal and periodic confirmation of followees are two solutions to the spam problem (for financial gain) that each have a higher value use case beyond spam prevention. Hence, it’s not critical to sell this proposal as a spam prevention mechanism.

1 Like

I’m in line with all of this…I’ll put together some
More formal text on Monday and post it here for discussion.

As far as non-incentive based spam spam, I still think that Proposal to restrict rewards qualification to a threshold - #2 by wpb is the fastest path forward.


Gotcha I am sorry for everyone I diverted the topic from! I’m now understand the differences in proposals. I’m sorry about the confusion!

Thanks for being kind

1 Like

This is an elegant proposal which I heartily support. An independent, NNS controlled treasury is a great idea, for the reason @skilesare has mentioned and also as a possible source of funding for experts voting through the community neurons proposed by @lastmjs .

Updated Proposal Text - Please let me know if you think there should be any more changes:

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.

This will also allow us to move the governance weight back to 20 without incetivising spame. We propose this occur as part of this proposal.

A result of this proposal will be a reduction in total minted ICP due to the fact that some voters do not vote on all proposals or follow a voter for all proposals. In a follow-on proposal, the NNS can determine what to do with that “abandoned” ICP. We suggest an NNS treasury but will leave it to a future proposal to finalize that. The following illustration shows the handing out of rewards in the old vs new system.

NOTE: “Passive” here means someone who has not elected to follow anyone on the governance proposal topic and who does not manually vote. We do not consider people that pro-actively follow experts to be passive and appreciate the time and effort they take to find qualified voters.

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.

Vote Accept to:

  1. Convert from system-based rewards to voter-based rewards
  2. Change the weight of governance proposals back to 20.
  3. Keep track of “abandoned” ICP as a governance-tracked variable.

I know it’s technically not a part of this proposal but there should also be a note on implementing a system to track lost rewards from days with no proposals, I’m fine with not getting an higher APY especially if those tokens go in some kind of treasury, but getting a lower APY than the one displayed on the dashboard cause there are days without proposals kinda suck.

Someone already noted that rewards roll to the next day so there should not be any lost rewards due to no proposals.

1 Like

Oh ok that’s news to me, last time I talked to bjoernek about it I was under the impression that wasn’t the case

See the above post…

1 Like

I think this is a fantastic idea and kills many birds with one stone.

  1. It reduces the incentive for spam
  2. It increases the incentive for governance participation
  3. It reduces inflation
  4. It tees up the grounds for a NNS treasury proposal as we are will be tracking undisbursed maturity from non-voters

I think number 4) the NNS treasury proposal which is out of scope for this proposal should come swiftly after this proposal is approved. I believe the NNS treasury could be the biggest game changer for the future of ICP.

@skilesare at current rates do you have a way of doing a quick and dirty back of the envelope calculation as to how much undisbursed maturity could be generated at today’s rates (from non-governance voters) over the course of the next year and next couple years? If total market cap is $3.4BN and inflation is roughly 10% today, total maturity is $340M. If no-one voted, that is the theoretical annual limit for the NNS treasury at today’s prices. I am not sure what % votes but either way the NNS treasury could get absolutely enormous extremely quickly presenting us with incredible opportunities for decentralization.

Imagine if we had sister foundations popping up globally to support the future of ICP in every which way imaginable. It is truly amazing to consider the possibilities that a NNS treasury could create. Dfinity could have guaranteed funding. We could have multiple contributors to the replica code and multiple parties turning ICP into the future of the internet. There is simply no other blockchain that has anything like it. Money makes the world go around and ICP is too complicated to rely exclusively on Dfinity.

Over and above the stated benefits, an NNS treasury funded from undisbursed maturity of non-voters would not negatively impact voters. No one would cry out against taxation because it would be easy to not be taxed by participating in governance.

@skilesare @wpb if you’d like to discuss the NNS treasury idea offline I’d love to get your thoughts on it. All that said above, the idea of hundreds of millions floating around in a NNS treasury does strike me as risky too and rife with potentials for abuse and scams. So I agree it should be its own proposal that is properly considered rather than lumped in with this one.


Please reach out. I think @Kyle_Langham said there would be almost 250,000 ICP a day that was not distributed…but I’ll let him confirm because that seems absurdly high and I may be misremembering.

I’ve mentioned elsewhere…and I have no expectation of anything like this happening…but as a real example I’ll state that about a week and a half of that going into an #8yeargang neuron benefiting ICDevs would permanently endow almost all of what I wanted to do with the organization. So I think you’re right and there are a ton of things we can do all across the landscape with those funds. One caveat is that we don’t want it to go on forever…ultimately full participation and decentralization is the goal.


Based on the analysis on which Kyle & me worked on, it is currently approx 250k of maturity per week which would not be allocated. This analysis is using the same assumptions as the spam analysis here, i.e., assuming on average approx 0.5 governance and 6 non-governance proposal per day (in addition to 144 exchange rate proposals).

1 Like

Thanks. 250,000 ICP per week at $7 per ICP is close to $2M a week (with a little bit of rounding up). $2M a week = $100M a year. Now that’s a pretty penny. And we all hope to revisit a world soon in the next 5 years of a $100+ ICP token.

And that’s just one year. We could easily have a treasury of over a billion dollars. That’s a big opportunity and a big responsibility. The community can discuss it but honestly @bjoernek when talking about those kinds of sums I think Dfinity should really have a heavy hand in thinking through how this should work.

Now, @Kyle_Langham time for you to confirm the numbers!


Yup, 250k ICP a week is correct (based on historic data). @bjoernek did some phenomenal work in running scenarios and compiling data. His analyses are very strong.

That number will drift lower with each passing week as (a) the inflation rate of ICP decreases and (b) voting participation increases. So it might be good to move sooner rather than later to ensure the treasury is well funded long term.

Given that an NNS treasury would provide the Internet Computer community options to change the protocol and advertise the IC outside of DFINITY, I would recommend the community have a heady hand in creating the framework of the treasury :slight_smile:


That’s fair. Ok will have a think about how to best deliberate on it. Perhaps a community driven working group makes sense.

Feels like a big responsibility.

1 Like

I agree/ will vote yes on this proposal. I am especially grateful for the note mentioned above. Thank you for the clarification.

1 Like

I am all for it to fund projects as long as the project present a credible revenue plan and show it will be profitable at some point. We need to understand all the treasory, soon as distributed to support a project, will come back on the market and put pressure down on ICP price. Some project may easily abuse and create themselves good paying jobs without any intention of results.

We already have community funds for new projects. I would only not mint any of these extra tokens and reduce inflation. By increasing ICP price, the community fund create extra value as well.

I like the proposal especially the NNS treasury part, It’s very important to incentive people involve governance.

People’s participation in NNS governance is now suppressed since there is no reward but punishment(currently is 10 ICP, maybe be increased in future).

Based on fairness, the initiating neuron whose NNS proposal is approved should receive reward from the NNS treasury.

Yes, fully agree. Designing and implementing such a treasury would be a big undertaking. As far as this proposal goes and as highlighted by @skilesare the first step would be to track how many voting rewards are allocated vs not-allocated.