upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorabhay-raizada <toabhayraizada@gmail.com>2024-07-05 08:07:13 +0530
committerabhay-raizada <toabhayraizada@gmail.com>2024-07-05 08:28:13 +0530
commit21587e236785616b6c0ca796c03a29a3ad5e69ea (patch)
treec258b512972454962b0a46cd95dbb2ac970626ad
parent70f1be5866a69768e4cc63447e2268a15e70ad3f (diff)
Finalize Draft
-rw-r--r--118.md83
1 files changed, 68 insertions, 15 deletions
diff --git a/118.md b/118.md
index 86201c6..15bc730 100644
--- a/118.md
+++ b/118.md
@@ -4,33 +4,86 @@
4 4
5`draft` `optional` 5`draft` `optional`
6 6
7The purpose of this nip is to create a mechanism for polling on nostr. 7This NIP defines the event scheme that describe Polls on nostr.
8The NIP aims to have the following properties.
9 8
101. Provide a method for gauging eligibility. Only eligible votes should be counted. 9The NIP makes the following tradeoffs.
112. Provide a method for maintaining anonymity. Participants should be able to not reveal their identities to everyone, yet their votes should be counted. 10
123. Provide a mechanism for verifiability. Participants should be able to verify that their votes have been counted, under an eligibility criteria. 111. All votes are public.
122. All responses are editable (latest by timestamp considered last response)
13 13
14## Events 14## Events
15 15
16### Poll Content 16### Poll Content
17 17
18The poll event is defined as a `kind:1068` event. This event carries over the `name` , `description` and `field` tags as defined in [nip-101](https://github.com/nostr-protocol/nips/pull/1190/files). 18The poll event is defined as a `kind:1068` event. Major tags in the poll event are:
19This event has no other tags and completely defines the poll content, which is uneditable. 19
20- **label**: The accompanying text of the poll.
21- **option**: The option tags contain an OptionId(any alphanumeric) field, followed by an option label field.
22- **relays**: Set of relays that the poll is expecting respondents to respond on.
23- **settings**: A JSON stringified object that may hold poll level configs and client specific configs.
24
25Example Event
26
27```json
28{
29 "content": "",
30 "created_at": 1719888496,
31 "id": "9d1b6b9562e66f2ecf35eb0a3c2decc736c47fddb13d6fb8f87185a153ea3634",
32 "kind": 1068,
33 "pubkey": "dee45a23c4f1d93f3a2043650c5081e4ac14a778e0acbef03de3768e4f81ac7b",
34 "sig": "7fa93bf3c430eaef784b0dacc217d3cd5eff1c520e7ef5d961381bc0f014dde6286618048d924808e54d1be03f2f2c2f0f8b5c9c2082a4480caf45a565ca9797",
35 "tags": [
36 ["label", "Pineapple on Pizza"],
37 ["option", "qj518h583", "Yay"],
38 ["option", "gga6cdnqj", "Nay"],
39 ["relays", "<relay1 url>", "<relay 2 url>"],
40 ["settings", "{\"PollType\": \"singlechoice\" }"]
41 ]
42}
43```
20 44
21### Responses 45### Responses
22 46
23The response event is the same as the one on [nip-101](https://github.com/nostr-protocol/nips/pull/1190/files) 47The response event is a `kind:1018` event. It contains an e tag referencing the poll event it is referencing, followed by one or more response tags.
48
49- **response** : The tag contains "response" as it's first positional argument followed by the option Id selected.
50
51Example Response Event
52
53```json
54{
55 "content": "",
56 "created_at": 1720097117,
57 "id": "60a005e32e9596c3f544a841a9bc4e46d3020ca3650d6a739c95c1568e33f6d8",
58 "kind": 1018,
59 "pubkey": "1bc70a0148b3f316da33fe7e89f23e3e71ac4ff998027ec712b905cd24f6a411",
60 "sig": "30071a633c65db8f3a075c7a8de757fbd8ce65e3607f4ba287fe6d7fbf839a380f94ff4e826fbba593f6faaa13683b7ea9114ade140720ecf4927010ebf3e44f",
61 "tags": [
62 ["e", "1fc80cf813f1af33d5a435862b7ef7fb96b47e68a48f1abcadf8081f5a545550"],
63 ["response", "gga6cdnqj"]
64 ]
65}
66```
67
68### Poll Types
69
70Poll Types can be configured in the settings object of the poll, the setting dictates how multiple response tags are handled in the `kind:1018` event.
71
72- **PollType: singlechoice**: The first response tag is to be considered the actual response.
73- **PollType: multiplechoice**: The first response tag pointing to each id is considered the actual response, without considering the order.
74- **PollType: rankedchoice**: The first response tag pointing to each id is the considered the actual response, while also taking into account the order of the response tags.
24 75
25### Eligibilty 76### Counting Results
26 77
27Eligibility to a vote is determined by another `kind:30180` event that can be created by anyone and is essentially a reference to a list of pubkeys, the author of the eligibility event is interested in. The eligibility event MUST contain an "e" tag to the poll event, and 78Results can be queried by fetching `kind:1018` events from the relays specified in the poll.
28"list" tags which references either a `kind:3` (contact list) or a `kind:30000`(follow sets) containing a list of "p" tags. 79The results displayed should only be 1 vote per pubkey.
80In case of multiple events for a pubkey, the event with the largest timestamp should be considered.
29 81
30### Counting Results. 82### Curation
31 83
32Results can be counted for different eligibility events, by querying for `kind:1069` events only authored by the pubkeys mentioned in the eligibility event. 84The clients may configure fetching results by specific people. This can be achieved by creating `kind:30000` follow sets, and fetching results only from the follow set.
85Clients can also employ other curation algorithms, like Proof Of Work and Web of Trust scores for result curations.
33 86
34### Anonymous Voting 87### Private Polls
35 88
36For people that wish to maintain anonymity, while still having their votes counted can do so by signing the response event with a random private key and sending over the corresponding pubkey to the author of a `kind:30180` eligibility event. The author of the eligibility event may demand "proofs of eligibility" before adding the pubkey in any of the lists. 89This nip does not cover private polling, Clients may follow [forms nip](https://github.com/nostr-protocol/nips/pull/1190) for private polling.