Much of this is taken from [Proposal] Introduce an incubation period and minimum support threshold for governance proposals which I like, but consider to be too complex and involve too many moving parts in the short term. I’m putting this forward because I think it could be implemented quickly by DFINITY. Thanks for the format @justmythoughts
Objectives
- Decrease incentives to submit 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).
- Protect NNS voters from governance proposal 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 app to not show proposals that have not at least met the 3%(or modified) threshold of Yes votes required to pass.
- Update the NNS canister to skip rewarding proposals that have not received at least 3%(or modified) threshold of Yes votes.
- Update the NNS canister to extend the end date to match the initial voting period when the proposal passes the 3%(or modified) 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 >= 0.3 and oldYeRation <0.3){proposal. deadline_timestamp_seconds = deadline_timestamp_seconds + (now() - proposal.proposal_time_stamp_seonds);
After line 158(nns-dapp/Proposals.svelte at e9dd304d8aaa96f82e91936f23d1bf0c781ae9c5 · dfinity/nns-dapp · GitHub), wrap line 159 in:
{if proposalInfo.tally.yes/ [propsalInfo.tally.no](http://propsalInfo.tally.no) < ($UserConfiguredMinYesThreshold | 0.3)}
Line 159
{/if}
The NNS front app team will need to add a widget to allow for changing the UserConfiguredMinYesThreshold and storing the preferred value in webStorage.
How does this affects me as an NNS voter?
- Voters have no obligation to vote on a proposal until it reaches a 3% threshold of yes votes.
- Once the 3% yes threshold is reached, voters should vote or follow a voter to claim rewards(No change)
Why this proposal works
- NNS Participants only view and vote on spam proposals because they are required to. Not voting results in lost governance rewards, which are then directly split amongst those who do vote on the spam proposal. Introducing an incubation period and minimum support threshold removes the requirement to view and vote on each and every proposal that hits the NNS.
- Since NNS Voters are no longer required to vote for proposals that can’t meet the threshold, each proposal must reach the 3% yes minimum support threshold on its own merits and value proposition in order to receive attention from the whole community.
- This proposal does not increase the proposal creation or rejection cost, and therefore does not impose a greater financial burden on NNS Proposal Creators.
- Extending the time period at the point of crossing the 3% threshold keeps the consideration time the same.
Additional Benefits of this proposal
- Adding a minimum support threshold allows governance proposals to be visible on the NNS for a longer period of time, ensuring that less active NNS voters have the opportunity to vote for incubated proposals they support.
- Adding a minimum support threshold encourages NNS proposal creators to advertise, receive feedback, and iterate upon their proposals before submitting in order to ensure they will pass the 3% support threshold and proceed to a live vote on the NNS.
NNS App UI Changes
- Add a slider to let users that want to see votes under the threshold if they want to.
- Make sure a proposer create can hotlink directly to a vote so they have something to use when they promote their proposal.(I think you can already do this…ie Internet Computer Content Validation Bootstrap, but if you are not authorized you lose your redirect…I think this is an easy fix)
Arguments Against/Potential Issues
- This will not stop the current spammer from submitting NNS Proposals.
Rebuttal to (1) : Looking at one of the recent spam proposals by @ysyms, Internet Computer Network Status, we can see that only 0.2% of the total voting power is voting to accept these NNS proposals. This means that this would never be shown to most people, the vote would fail and the spammer would be charged their 1 ICP. It would not affect rewards
Keep in mind that even for some of the spam NNS proposals that garnered more than 3% of the vote, many of these votes were novelty votes that were only cast because the item was visible. If the proposer had been forced to garner social momentum the likely would not have reached the threshold
- It may be possible that more than 3% of the overall NNS voting power would be interested in continuing spam proposals for financial benefit.
Rebuttal to (2) : If more than 3% of the overall NNS voting power support a spam attack, increasing the proposal cost would have little to no effect. There are two potential solutions in this scenario.
- Further raise the minimum support threshold for governance proposals
- Fix the amount of governance rewards disbursed to be on a weekly basis, as mentioned in solution 3 of Community Discussion: Revise Governance Voting Rewards to Fix Proposal Spamming Rewards Exploit
- As an NNS Proposal submitter, I feel like this minimum support threshold places an additional financial burden on me to submit proposals to the NNS.
Rebuttal to (3) : The proposed solution does not change proposal submission costs for NNS creators. If one is submitting a proposal that they do not feel will receive the minimum support threshold by a voluntary vote, then they should advertise their proposal and timeline on the forums and social media (Twitter, DSCVR, Distrikt) to garner the necessary support before submitting a proposal to the NNS. If a proposal cannot reach 3% voluntary support, it’s unlikely that proposal will achieve a majority of voting power and pass when it goes live.
Discussion Lead
Thanks to @justmythoughts for doing all the work here on the formatting. I think that proposal is a great long term proposal as an incubation period is great for discussion, etc…but they could be spammy as well and now we have to look at them for 2 weeks.