{"action":"created","issue":{"url":"https://api.github.com/repos/steemit/steem/issues/279","repository_url":"https://api.github.com/repos/steemit/steem","labels_url":"https://api.github.com/repos/steemit/steem/issues/279/labels{/name}","comments_url":"https://api.github.com/repos/steemit/steem/issues/279/comments","events_url":"https://api.github.com/repos/steemit/steem/issues/279/events","html_url":"https://github.com/steemit/steem/issues/279","id":171449120,"number":279,"title":"Add ability to Negate / Oppose another Voter","user":{"login":"bytemaster","id":347290,"avatar_url":"https://avatars.githubusercontent.com/u/347290?v=3","gravatar_id":"","url":"https://api.github.com/users/bytemaster","html_url":"https://github.com/bytemaster","followers_url":"https://api.github.com/users/bytemaster/followers","following_url":"https://api.github.com/users/bytemaster/following{/other_user}","gists_url":"https://api.github.com/users/bytemaster/gists{/gist_id}","starred_url":"https://api.github.com/users/bytemaster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bytemaster/subscriptions","organizations_url":"https://api.github.com/users/bytemaster/orgs","repos_url":"https://api.github.com/users/bytemaster/repos","events_url":"https://api.github.com/users/bytemaster/events{/privacy}","received_events_url":"https://api.github.com/users/bytemaster/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/steemit/steem/labels/enhancement","name":"enhancement","color":"84b6eb"},{"url":"https://api.github.com/repos/steemit/steem/labels/HARDFORK","name":"HARDFORK","color":"d93f0b"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/steemit/steem/milestones/9","html_url":"https://github.com/steemit/steem/milestones/Hardfork%2014","labels_url":"https://api.github.com/repos/steemit/steem/milestones/9/labels","id":1932760,"number":9,"title":"Hardfork 14","description":"","creator":{"login":"bytemaster","id":347290,"avatar_url":"https://avatars.githubusercontent.com/u/347290?v=3","gravatar_id":"","url":"https://api.github.com/users/bytemaster","html_url":"https://github.com/bytemaster","followers_url":"https://api.github.com/users/bytemaster/followers","following_url":"https://api.github.com/users/bytemaster/following{/other_user}","gists_url":"https://api.github.com/users/bytemaster/gists{/gist_id}","starred_url":"https://api.github.com/users/bytemaster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bytemaster/subscriptions","organizations_url":"https://api.github.com/users/bytemaster/orgs","repos_url":"https://api.github.com/users/bytemaster/repos","events_url":"https://api.github.com/users/bytemaster/events{/privacy}","received_events_url":"https://api.github.com/users/bytemaster/received_events","type":"User","site_admin":false},"open_issues":18,"closed_issues":1,"state":"open","created_at":"2016-08-09T16:29:10Z","updated_at":"2016-08-17T14:49:49Z","due_on":"2016-08-31T00:00:00Z","closed_at":null},"comments":33,"created_at":"2016-08-16T15:46:08Z","updated_at":"2016-08-17T17:38:13Z","closed_at":null,"body":"First Principles of Steem and Voting\r\n----------------------------\r\n- Every proposed change, payout, should be subject to a virtual YES / NO vote \r\n- If one user is able to vote YES, then another user should be able to counter it with a NO\r\n- In a perfectly expressive voting system two users with equal stake and perfectly opposite opinions could actively cancel each other's opinion (resulting in a tie).  Whenever there is a tie, the decision is left to the remaining voters.\r\n\r\nAvoid a Voting War \r\n----------------------\r\nRather than making everything subject to a YES / NO vote and starting a voting war which could be won by whoever has the most aggressive bot with the \"last say\", we can automate the process. Automating the process saves the network bandwidth, solves the \"last vote wins\" issue, and also solves problems caused by people being unable to perfectly counter someone else through limits in the normal voting pattern.\r\n\r\nCountering Upvotes\r\n-----------------------\r\nIt is currently impossible to counter the profits someone earns by upvoting without causing unwanted side effects.\r\n\r\nWitnesses Voting\r\n--------------------------\r\nIn an ideal world there would be no limit to the number of witnesses someone could approve.  This is the nature of approval voting.  Due to resource constraints each account is limited to approving 30 witnesses.  This limit makes it impossible to express an opinion of approving \"everyone but X\" which would normally be expressed by upvoting everyone but X.\r\n\r\nIt is currently impossible to counter someone voting for collusive and/or abusive witnesses while remaining neutral toward the remaining witnesses. \r\n\r\nCountering Vote Spam\r\n--------------------------\r\nVote spammers flood the network with low value practically meaningless votes.  These users are limited by bandwidth but still cause a net negative impact on the platform.  There is currently no way to prevent this spam short of censorship.\r\n\r\nImplementation Details\r\n---------------------------\r\nEvery account shall have the power to \"oppose\" another account with a certain number of VESTS via a new operation:\r\n```\r\noppose_account  account opposing_account weight_vests \r\n```\r\n\r\nThe impact of this operation is to temporarily reduce the number of VESTS **both accounts** can vote with by *weight_vests* for one week.  It can be renewed at any time to extend the period by 7 days from the time of transaction. \r\n\r\nAn account must have a positive number of votable VESTS in order to oppose another user.  This means that a user who abuses negative voting would be unable to renew their negative positions against other users while they have a negative votable VESTS balance.  \r\n\r\n### Limits on Number of accounts Opposed \r\n\r\nDue to resource constraints and to prevent a single whale from actively negating thousands of normal users, the **weight_vests** must be greater than the min account creation fee.  It must also be greater than 1/256 of the initiators VESTS.\r\n\r\nIn practice this means that a whale can oppose at most 256 people and that a minnow can only oppose a single minnow.  The number of people you can oppose grows linearly from 1 to 256 until your VESTS equal 256 times the account creation fee.\r\n\r\n## Rationale for 1 week period\r\n\r\nBy having a 1 week period it becomes possible to negate someone's negative vote against someone else.  In other words, you can force them to negate *you* rather than the person they are currently negating. \r\n\r\nWithout this maximum time, then applying a negative vote against someone else could not be countered or would require an unbounded amount of potentially ambiguous computation to recursively remove negative votes.\r\n\r\nIt is undesirable for people to be locked in opposition \"for ever\".  People should be given a chance to redeem themselves unless there is active intervention. It would take a dedicated villain to run a bot to automatically start abusing again after expiration or to automatically renew opposition against someone for no reason.\r\n\r\n## Additional Side Effects\r\nWith this feature it is possible for whales to \"agree not to vote\" and let the dolphins (who are greater in number) curate.  \r\n\r\n## Economic Analysis \r\nThere is a real opportunity cost associated with negative voting. Any whale engaged in such a practice is giving up the curation rewards they could be earning.  They would also be giving up their own positive influence. This means that there must be clear economic reasons to engage in negative voting which should minimize its abuse.\r\n"},"comment":{"url":"https://api.github.com/repos/steemit/steem/issues/comments/240487952","html_url":"https://github.com/steemit/steem/issues/279#issuecomment-240487952","issue_url":"https://api.github.com/repos/steemit/steem/issues/279","id":240487952,"user":{"login":"talerecursion","id":21085147,"avatar_url":"https://avatars.githubusercontent.com/u/21085147?v=3","gravatar_id":"","url":"https://api.github.com/users/talerecursion","html_url":"https://github.com/talerecursion","followers_url":"https://api.github.com/users/talerecursion/followers","following_url":"https://api.github.com/users/talerecursion/following{/other_user}","gists_url":"https://api.github.com/users/talerecursion/gists{/gist_id}","starred_url":"https://api.github.com/users/talerecursion/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/talerecursion/subscriptions","organizations_url":"https://api.github.com/users/talerecursion/orgs","repos_url":"https://api.github.com/users/talerecursion/repos","events_url":"https://api.github.com/users/talerecursion/events{/privacy}","received_events_url":"https://api.github.com/users/talerecursion/received_events","type":"User","site_admin":false},"created_at":"2016-08-17T17:38:13Z","updated_at":"2016-08-17T17:38:13Z","body":"I'm not. First it's not really abuse: they are entitled to vote as witness whoever they see fit, they have almost all the voting power anyway, and we have known that from the very beginning of this project. Second I don't think that facilitates anything. To kick a witness out of the list right now takes like a few cli_wallet commands to remove support, and if that's not enough, a few more to upvote a bit more every other witness + 1 backup witness. Either way, it's a trivial job. 5mn max. This commit changes nothing at all. Dan will save 5mn. Wow"}}
{"actor":{"display_login":"talerecursion"}}