{"action":"created","comment":{"url":"https://api.github.com/repos/CounterpartyXCP/cips/pulls/comments/60577876","id":60577876,"diff_hunk":"@@ -0,0 +1,81 @@\n+<pre>\n+  CIP: 5\n+  Title: Voting Meta Protocol through Broadcasts\n+  Authors: Ruben de Vries\n+  Discussions-To: https://counterpartytalk.org/t/cip-proposal-voting-meta-protocol-through-broadcasts/1926\n+  Status: Draft\n+  Type: Standards\n+  Created: 2016-03-21\n+</pre>\n+\n+## Abstract ##\n+\n+Any user should be able to initiate a vote for all holders of a Counterparty asset.\n+Holders of the asset can broadcast their vote and all Counterparty nodes can tally the votes.\n+\n+## Motivation ##\n+\n+With the lack of PoW 'voting' by miners there's no good way to reach / poll for consensus on changes to the protocol\n+that aren't completely uncontroversial.\n+Using this proposed protocol, Counterparty developers can initiate a vote to all XCP holders to learn the will of the community.\n+\n+## Rationale ##\n+\n+Being able to let all XCP owners vote on a particular issue can be very useful to poll the consensus / desire of the community.\n+\n+The votes done in this way is not part of this CIP and the initial intention is not to have any protocol changes activate automatically based on these votes,\n+though that could be a future CIP if there's a desire to do so.\n+\n+As discussed in the community, to avoid making anyone have more power within the protocol, we won't be using tokens\n+but will instead use a meta protocol with messages encoded in broadcast messages.\n+\n+This also makes this easily usable for other assets.\n+\n+We'll add the code to track votes to counterparty-lib/client so that anyone can easily track ongoing votes without requiring extra scripts.\n+We'll also add code to counterwallet to easily cast votes, this should cover a big part of the XCP holders.\n+\n+## Specification ##\n+\n+There will be 2 types of 'special' broadcast messages that are used for this; `INITVOTE` and `CASTVOTE`.\n+\n+#### `INITVOTE`\n+```INITVOTE <VOTENAME> <ASSET> <DEADLINE> (<STAKEHEIGHT>)? OPTS <OPTION_1> <OPTION_N>```\n+ - `VOTENAME`: any sequence of non-space characters used as label for the vote, must be unique across the network.\n+ - `ASSET`: the asset for which the olders can vote.\n+ - `DEADLINE`: the deadline (block height or timestamp of block, see below) for the voting period (int).\n+ - `STAKEHEIGHT`: the height at which to take the balances of `ASSET` to use to weight the votes.\n+   if `STAKEHEIGHT` is ommitted then the block in which the `INITVOTE` broadcast is confirmed is used.\n+ - `OPTS`, followed by 2+ options, ie; `OPTS TRUE FALSE`.\n+   options are seperated by a space, any other characters are allowed by for simplicity only using alphanumeric chars is recommended.","path":"cip-0005.md","position":49,"original_position":49,"commit_id":"c7a6085d9f01ce1f31e1d61042f1b0b6cabc1cac","original_commit_id":"c7a6085d9f01ce1f31e1d61042f1b0b6cabc1cac","user":{"login":"robby-dermody","id":6189538,"avatar_url":"https://avatars.githubusercontent.com/u/6189538?v=3","gravatar_id":"","url":"https://api.github.com/users/robby-dermody","html_url":"https://github.com/robby-dermody","followers_url":"https://api.github.com/users/robby-dermody/followers","following_url":"https://api.github.com/users/robby-dermody/following{/other_user}","gists_url":"https://api.github.com/users/robby-dermody/gists{/gist_id}","starred_url":"https://api.github.com/users/robby-dermody/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/robby-dermody/subscriptions","organizations_url":"https://api.github.com/users/robby-dermody/orgs","repos_url":"https://api.github.com/users/robby-dermody/repos","events_url":"https://api.github.com/users/robby-dermody/events{/privacy}","received_events_url":"https://api.github.com/users/robby-dermody/received_events","type":"User","site_admin":false},"body":"let's nail this down some more. recommend -> required, or come up with an exact character set that we specify here","created_at":"2016-04-21T13:22:29Z","updated_at":"2016-04-21T13:22:29Z","html_url":"https://github.com/CounterpartyXCP/cips/pull/7#discussion_r60577876","pull_request_url":"https://api.github.com/repos/CounterpartyXCP/cips/pulls/7","_links":{"self":{"href":"https://api.github.com/repos/CounterpartyXCP/cips/pulls/comments/60577876"},"html":{"href":"https://github.com/CounterpartyXCP/cips/pull/7#discussion_r60577876"},"pull_request":{"href":"https://api.github.com/repos/CounterpartyXCP/cips/pulls/7"}}},"pull_request":{"url":"https://api.github.com/repos/CounterpartyXCP/cips/pulls/7","id":66336832,"html_url":"https://github.com/CounterpartyXCP/cips/pull/7","diff_url":"https://github.com/CounterpartyXCP/cips/pull/7.diff","patch_url":"https://github.com/CounterpartyXCP/cips/pull/7.patch","issue_url":"https://api.github.com/repos/CounterpartyXCP/cips/issues/7","number":7,"state":"open","locked":false,"title":"CIP-0005; Voting Meta Protocol through Broadcasts","user":{"login":"rubensayshi","id":649160,"avatar_url":"https://avatars.githubusercontent.com/u/649160?v=3","gravatar_id":"","url":"https://api.github.com/users/rubensayshi","html_url":"https://github.com/rubensayshi","followers_url":"https://api.github.com/users/rubensayshi/followers","following_url":"https://api.github.com/users/rubensayshi/following{/other_user}","gists_url":"https://api.github.com/users/rubensayshi/gists{/gist_id}","starred_url":"https://api.github.com/users/rubensayshi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rubensayshi/subscriptions","organizations_url":"https://api.github.com/users/rubensayshi/orgs","repos_url":"https://api.github.com/users/rubensayshi/repos","events_url":"https://api.github.com/users/rubensayshi/events{/privacy}","received_events_url":"https://api.github.com/users/rubensayshi/received_events","type":"User","site_admin":false},"body":"see prior discussion: https://counterpartytalk.org/t/cip-proposal-voting-meta-protocol-through-broadcasts/1926","created_at":"2016-04-13T15:02:53Z","updated_at":"2016-04-21T13:22:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/CounterpartyXCP/cips/pulls/7/commits","review_comments_url":"https://api.github.com/repos/CounterpartyXCP/cips/pulls/7/comments","review_comment_url":"https://api.github.com/repos/CounterpartyXCP/cips/pulls/comments{/number}","comments_url":"https://api.github.com/repos/CounterpartyXCP/cips/issues/7/comments","statuses_url":"https://api.github.com/repos/CounterpartyXCP/cips/statuses/c7a6085d9f01ce1f31e1d61042f1b0b6cabc1cac","head":{"label":"rubensayshi:cip-0005","ref":"cip-0005","sha":"c7a6085d9f01ce1f31e1d61042f1b0b6cabc1cac","user":{"login":"rubensayshi","id":649160,"avatar_url":"https://avatars.githubusercontent.com/u/649160?v=3","gravatar_id":"","url":"https://api.github.com/users/rubensayshi","html_url":"https://github.com/rubensayshi","followers_url":"https://api.github.com/users/rubensayshi/followers","following_url":"https://api.github.com/users/rubensayshi/following{/other_user}","gists_url":"https://api.github.com/users/rubensayshi/gists{/gist_id}","starred_url":"https://api.github.com/users/rubensayshi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rubensayshi/subscriptions","organizations_url":"https://api.github.com/users/rubensayshi/orgs","repos_url":"https://api.github.com/users/rubensayshi/repos","events_url":"https://api.github.com/users/rubensayshi/events{/privacy}","received_events_url":"https://api.github.com/users/rubensayshi/received_events","type":"User","site_admin":false},"repo":{"id":54033190,"name":"cips","full_name":"rubensayshi/cips","owner":{"login":"rubensayshi","id":649160,"avatar_url":"https://avatars.githubusercontent.com/u/649160?v=3","gravatar_id":"","url":"https://api.github.com/users/rubensayshi","html_url":"https://github.com/rubensayshi","followers_url":"https://api.github.com/users/rubensayshi/followers","following_url":"https://api.github.com/users/rubensayshi/following{/other_user}","gists_url":"https://api.github.com/users/rubensayshi/gists{/gist_id}","starred_url":"https://api.github.com/users/rubensayshi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rubensayshi/subscriptions","organizations_url":"https://api.github.com/users/rubensayshi/orgs","repos_url":"https://api.github.com/users/rubensayshi/repos","events_url":"https://api.github.com/users/rubensayshi/events{/privacy}","received_events_url":"https://api.github.com/users/rubensayshi/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rubensayshi/cips","description":"Counterparty Improvement Proposals","fork":true,"url":"https://api.github.com/repos/rubensayshi/cips","forks_url":"https://api.github.com/repos/rubensayshi/cips/forks","keys_url":"https://api.github.com/repos/rubensayshi/cips/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rubensayshi/cips/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rubensayshi/cips/teams","hooks_url":"https://api.github.com/repos/rubensayshi/cips/hooks","issue_events_url":"https://api.github.com/repos/rubensayshi/cips/issues/events{/number}","events_url":"https://api.github.com/repos/rubensayshi/cips/events","assignees_url":"https://api.github.com/repos/rubensayshi/cips/assignees{/user}","branches_url":"https://api.github.com/repos/rubensayshi/cips/branches{/branch}","tags_url":"https://api.github.com/repos/rubensayshi/cips/tags","blobs_url":"https://api.github.com/repos/rubensayshi/cips/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rubensayshi/cips/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rubensayshi/cips/git/refs{/sha}","trees_url":"https://api.github.com/repos/rubensayshi/cips/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rubensayshi/cips/statuses/{sha}","languages_url":"https://api.github.com/repos/rubensayshi/cips/languages","stargazers_url":"https://api.github.com/repos/rubensayshi/cips/stargazers","contributors_url":"https://api.github.com/repos/rubensayshi/cips/contributors","subscribers_url":"https://api.github.com/repos/rubensayshi/cips/subscribers","subscription_url":"https://api.github.com/repos/rubensayshi/cips/subscription","commits_url":"https://api.github.com/repos/rubensayshi/cips/commits{/sha}","git_commits_url":"https://api.github.com/repos/rubensayshi/cips/git/commits{/sha}","comments_url":"https://api.github.com/repos/rubensayshi/cips/comments{/number}","issue_comment_url":"https://api.github.com/repos/rubensayshi/cips/issues/comments{/number}","contents_url":"https://api.github.com/repos/rubensayshi/cips/contents/{+path}","compare_url":"https://api.github.com/repos/rubensayshi/cips/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rubensayshi/cips/merges","archive_url":"https://api.github.com/repos/rubensayshi/cips/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rubensayshi/cips/downloads","issues_url":"https://api.github.com/repos/rubensayshi/cips/issues{/number}","pulls_url":"https://api.github.com/repos/rubensayshi/cips/pulls{/number}","milestones_url":"https://api.github.com/repos/rubensayshi/cips/milestones{/number}","notifications_url":"https://api.github.com/repos/rubensayshi/cips/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rubensayshi/cips/labels{/name}","releases_url":"https://api.github.com/repos/rubensayshi/cips/releases{/id}","deployments_url":"https://api.github.com/repos/rubensayshi/cips/deployments","created_at":"2016-03-16T13:14:51Z","updated_at":"2015-10-27T17:48:13Z","pushed_at":"2016-04-15T10:40:59Z","git_url":"git://github.com/rubensayshi/cips.git","ssh_url":"git@github.com:rubensayshi/cips.git","clone_url":"https://github.com/rubensayshi/cips.git","svn_url":"https://github.com/rubensayshi/cips","homepage":null,"size":50,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"CounterpartyXCP:master","ref":"master","sha":"782a12e6aca0d9174ac66a098cc5303aa15c848a","user":{"login":"CounterpartyXCP","id":7490848,"avatar_url":"https://avatars.githubusercontent.com/u/7490848?v=3","gravatar_id":"","url":"https://api.github.com/users/CounterpartyXCP","html_url":"https://github.com/CounterpartyXCP","followers_url":"https://api.github.com/users/CounterpartyXCP/followers","following_url":"https://api.github.com/users/CounterpartyXCP/following{/other_user}","gists_url":"https://api.github.com/users/CounterpartyXCP/gists{/gist_id}","starred_url":"https://api.github.com/users/CounterpartyXCP/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CounterpartyXCP/subscriptions","organizations_url":"https://api.github.com/users/CounterpartyXCP/orgs","repos_url":"https://api.github.com/users/CounterpartyXCP/repos","events_url":"https://api.github.com/users/CounterpartyXCP/events{/privacy}","received_events_url":"https://api.github.com/users/CounterpartyXCP/received_events","type":"Organization","site_admin":false},"repo":{"id":45059196,"name":"cips","full_name":"CounterpartyXCP/cips","owner":{"login":"CounterpartyXCP","id":7490848,"avatar_url":"https://avatars.githubusercontent.com/u/7490848?v=3","gravatar_id":"","url":"https://api.github.com/users/CounterpartyXCP","html_url":"https://github.com/CounterpartyXCP","followers_url":"https://api.github.com/users/CounterpartyXCP/followers","following_url":"https://api.github.com/users/CounterpartyXCP/following{/other_user}","gists_url":"https://api.github.com/users/CounterpartyXCP/gists{/gist_id}","starred_url":"https://api.github.com/users/CounterpartyXCP/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CounterpartyXCP/subscriptions","organizations_url":"https://api.github.com/users/CounterpartyXCP/orgs","repos_url":"https://api.github.com/users/CounterpartyXCP/repos","events_url":"https://api.github.com/users/CounterpartyXCP/events{/privacy}","received_events_url":"https://api.github.com/users/CounterpartyXCP/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/CounterpartyXCP/cips","description":"Counterparty Improvement Proposals","fork":false,"url":"https://api.github.com/repos/CounterpartyXCP/cips","forks_url":"https://api.github.com/repos/CounterpartyXCP/cips/forks","keys_url":"https://api.github.com/repos/CounterpartyXCP/cips/keys{/key_id}","collaborators_url":"https://api.github.com/repos/CounterpartyXCP/cips/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/CounterpartyXCP/cips/teams","hooks_url":"https://api.github.com/repos/CounterpartyXCP/cips/hooks","issue_events_url":"https://api.github.com/repos/CounterpartyXCP/cips/issues/events{/number}","events_url":"https://api.github.com/repos/CounterpartyXCP/cips/events","assignees_url":"https://api.github.com/repos/CounterpartyXCP/cips/assignees{/user}","branches_url":"https://api.github.com/repos/CounterpartyXCP/cips/branches{/branch}","tags_url":"https://api.github.com/repos/CounterpartyXCP/cips/tags","blobs_url":"https://api.github.com/repos/CounterpartyXCP/cips/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/CounterpartyXCP/cips/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/CounterpartyXCP/cips/git/refs{/sha}","trees_url":"https://api.github.com/repos/CounterpartyXCP/cips/git/trees{/sha}","statuses_url":"https://api.github.com/repos/CounterpartyXCP/cips/statuses/{sha}","languages_url":"https://api.github.com/repos/CounterpartyXCP/cips/languages","stargazers_url":"https://api.github.com/repos/CounterpartyXCP/cips/stargazers","contributors_url":"https://api.github.com/repos/CounterpartyXCP/cips/contributors","subscribers_url":"https://api.github.com/repos/CounterpartyXCP/cips/subscribers","subscription_url":"https://api.github.com/repos/CounterpartyXCP/cips/subscription","commits_url":"https://api.github.com/repos/CounterpartyXCP/cips/commits{/sha}","git_commits_url":"https://api.github.com/repos/CounterpartyXCP/cips/git/commits{/sha}","comments_url":"https://api.github.com/repos/CounterpartyXCP/cips/comments{/number}","issue_comment_url":"https://api.github.com/repos/CounterpartyXCP/cips/issues/comments{/number}","contents_url":"https://api.github.com/repos/CounterpartyXCP/cips/contents/{+path}","compare_url":"https://api.github.com/repos/CounterpartyXCP/cips/compare/{base}...{head}","merges_url":"https://api.github.com/repos/CounterpartyXCP/cips/merges","archive_url":"https://api.github.com/repos/CounterpartyXCP/cips/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/CounterpartyXCP/cips/downloads","issues_url":"https://api.github.com/repos/CounterpartyXCP/cips/issues{/number}","pulls_url":"https://api.github.com/repos/CounterpartyXCP/cips/pulls{/number}","milestones_url":"https://api.github.com/repos/CounterpartyXCP/cips/milestones{/number}","notifications_url":"https://api.github.com/repos/CounterpartyXCP/cips/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/CounterpartyXCP/cips/labels{/name}","releases_url":"https://api.github.com/repos/CounterpartyXCP/cips/releases{/id}","deployments_url":"https://api.github.com/repos/CounterpartyXCP/cips/deployments","created_at":"2015-10-27T17:48:13Z","updated_at":"2016-04-04T12:08:21Z","pushed_at":"2016-04-15T10:40:59Z","git_url":"git://github.com/CounterpartyXCP/cips.git","ssh_url":"git@github.com:CounterpartyXCP/cips.git","clone_url":"https://github.com/CounterpartyXCP/cips.git","svn_url":"https://github.com/CounterpartyXCP/cips","homepage":null,"size":50,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"open_issues_count":2,"forks":7,"open_issues":2,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/CounterpartyXCP/cips/pulls/7"},"html":{"href":"https://github.com/CounterpartyXCP/cips/pull/7"},"issue":{"href":"https://api.github.com/repos/CounterpartyXCP/cips/issues/7"},"comments":{"href":"https://api.github.com/repos/CounterpartyXCP/cips/issues/7/comments"},"review_comments":{"href":"https://api.github.com/repos/CounterpartyXCP/cips/pulls/7/comments"},"review_comment":{"href":"https://api.github.com/repos/CounterpartyXCP/cips/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/CounterpartyXCP/cips/pulls/7/commits"},"statuses":{"href":"https://api.github.com/repos/CounterpartyXCP/cips/statuses/c7a6085d9f01ce1f31e1d61042f1b0b6cabc1cac"}}}}