Add Tradeoffs

This commit is contained in:
abhay-raizada 2024-06-14 13:52:19 +05:30 committed by Abhay Raizada
parent 588070774a
commit 22c700c944

42
101.md
View File

@ -2,7 +2,7 @@
`draft` `optional` `author:abhay-raizada` `draft` `optional` `author:abhay-raizada`
The nip provides a way for users to create form templates on nostr, and for other users to be able to fill them. The nip provides a way to implement a feedback mechanism(forms) on nostr.
## Form Template - Public ## Form Template - Public
@ -107,7 +107,7 @@ for option fields, the response is the id of the option selected. In case of mul
} }
``` ```
## Editable Responses ## Response Editability
if the form setting allows for editable responses. The latest timestamp event should be used to render the response. if the form setting allows for editable responses. The latest timestamp event should be used to render the response.
@ -154,6 +154,14 @@ The kind `1059` event also works similar to as described in [[59.md]] except tha
**formId** - d-tag of the event **formId** - d-tag of the event
**userPub** - pubkey to recepient being given the access. **userPub** - pubkey to recepient being given the access.
code for alias generation
```ts
import {bytesToHex } from "@noble/hashes/utils"
import { sha256 } from "@noble/hashes/sha256"
let aliasPubKey = bytesToHex(sha256(`${30168}:${formAuthor}:${formId}:${userPub}`));
```
### Keys ### Keys
The "key" tag in the `kind:18` rumor is represented as: The "key" tag in the `kind:18` rumor is represented as:
@ -165,13 +173,17 @@ The "key" tag in the `kind:18` rumor is represented as:
- **Voter Key** - A key used to submit a response to the form in a poll-like scenario. - **Voter Key** - A key used to submit a response to the form in a poll-like scenario.
### Submit Access.
p-tags of the selected participants must be added to the form tags, and only query the responses from the p-tags mentioned in the form.
### Encrypted Responses. ### Encrypted Responses.
Response tags are added to the `.content` field of the event and encrypted as per the spec in [nip-44](./44.md) by the responders private key and the form authors public key. Response tags are added to the `.content` field of the event and encrypted as per the spec in [nip-44](./44.md) by the responders private key and the form authors public key.
### Private Forms only viewable by a group. ### Private Forms only viewable by a group.
Form fields and settings should be ommitted from the tags array and placed in the `.content` key, nip-44 encrypted by the corresponding public key of the view-key, and the signing key. The selected responders can decrypt the form using the view key. The `tags` array is used to keep track of the allowed-responders identities. Form fields and settings should be ommitted from the tags array and placed in the `.content` key, nip-44 encrypted by the corresponding public key of the view-key, and the signing key as private key. The selected responders can decrypt the form using the view key. The `tags` array is used to keep track of the allowed-responders identities.
```js ```js
let encryptionKey = nip44.v2.utils.getConversationKey( let encryptionKey = nip44.v2.utils.getConversationKey(
@ -189,13 +201,15 @@ There are some important parts for a form(general feedback mechanism) to become
1. Only elligeble candidates must be allowed to vote. 1. Only elligeble candidates must be allowed to vote.
2. Participants shouldn't be able to associate a response to another participant. 2. Participants shouldn't be able to associate a response to another participant.
3. Participants should be a ble to verify their response is counted. 3. Participants should be able to verify that their response is counted.
All of these conditions can be met by establishing a "Voter Key". The Voter Key is a private key generated by someone with edit access to the form (Issuer). All of these conditions can be met by establishing a "Voter Key". The Voter Key is a private key generated by someone with edit access to the form (Issuer).
The Issuer must then add a "v" tag to the form event, followed by a pubkey corresponding to the voterId. The Issuer must then add a "p" tag to the form event, followed by a pubkey corresponding to the voterId.
The v tag is used to query eligible votes. The voter must sign their responses with the issued voter key.
The p tag is used to query eligible votes.
Example form with a voter id. Example form with a voter id.
@ -212,8 +226,8 @@ Example form with a voter id.
["name", "This is the title of your form! Tap to edit."], ["name", "This is the title of your form! Tap to edit."],
["field", "egtD6v", "option", "What is the best breakfast?", "[[\"2KJ6h4\",\"Omelette\"],[\"1m3a5q\",\"Pancakes\"]]", "{\"renderElement\":\"radioButton\"}" ["field", "egtD6v", "option", "What is the best breakfast?", "[[\"2KJ6h4\",\"Omelette\"],[\"1m3a5q\",\"Pancakes\"]]", "{\"renderElement\":\"radioButton\"}"
] ]
["v", "fb740690af9329e25b0a3c1f6ce6a24c4ff98dcba56d3579381ee340ea0350d4"], ["p", "fb740690af9329e25b0a3c1f6ce6a24c4ff98dcba56d3579381ee340ea0350d4"],
["v", "6b557be286b13d7a85b3823c630050db043c9a28bf606aa49c65b3db0c3208b6"] ["p", "6b557be286b13d7a85b3823c630050db043c9a28bf606aa49c65b3db0c3208b6"]
] ]
} }
``` ```
@ -240,4 +254,14 @@ const filter: Filter = {
if (allowedPubkeys) filter.authors = allowedPubkeys; if (allowedPubkeys) filter.authors = allowedPubkeys;
``` ```
Polls responses need to be queried by authors mentioned in the forms v-tag ## Requesting Acces
<TBD>
## Tradeoffs
- Alias pubkey on gift wrap means that there is no notification mechanism for the user, unless the user is expecting access to an event.
- Alias pubkey also means that it can be checked that a particular user received a gift wrap for a form event, but it cannot be directly determined who all received the gift wraps, it also makes it easier in disambiguating between event kinds.
- Voter Key might make it anoymous to other participants, but the issuer can still know who a particular user voted for. In this implementation, the issuer is to be "trusted", but there may be out of band ways of having a "trustless" issuer. For example distrubiting voter Id chits in a physical meetup.