add value_minimum attribute, poll_option syntax fix

This commit is contained in:
toadlyBroodle 2023-03-05 12:27:48 +09:00
parent 5d0ad89914
commit a2f6b39b90

9
69.md
View File

@ -2,7 +2,7 @@
`draft` `optional` `author:toadlyBroodle` `draft` `optional` `author:toadlyBroodle`
A poll note is a [nostr event](01.md) (kind `6969`) for conducting paid polls. A poll presents two or more voting options, which participants my vote on by sending regular [zap events](57.md) which include an additional `poll_option` vote tag. Poll results may be blinded, until after users have voted. Polls may specify a `closed_at` time, after which results should be unblinded, closed to new votes, and the tally considered final. Poll options may be tallied by either satoshi `value` or vote `count`. Polls may additionally specify a `consensus_threshold`. A poll note is a [nostr event](01.md) (kind `6969`) for conducting paid polls. A poll presents two or more voting options, which participants my vote on by sending regular [zap events](57.md) which include an additional `poll_option` vote tag. Poll results may be blinded, until after users have voted. Polls may specify a `closed_at` time, after which results should be unblinded, closed to new votes, and the tally considered final. Poll options may be tallied by either satoshi `value` or vote `count`. Polls may additionally specify a `value_minimum` to include votes in the tally and a `consensus_threshold` for assessing the state of consensus.
## Purpose ## Purpose
@ -17,6 +17,7 @@ A poll event:
* MUST specify a primary `tally_method`: either `value` OR `count` * MUST specify a primary `tally_method`: either `value` OR `count`
* SHOULD specify a `closed_at` time: * SHOULD specify a `closed_at` time:
* a `closed_at` value of less than or equal to the `created_at` field indicates a poll SHOULD NOT be closed. * a `closed_at` value of less than or equal to the `created_at` field indicates a poll SHOULD NOT be closed.
* MAY specify a `value_minimum` satoshi value for zapped votes to be included in the tally
* MAY include a `consensus_threshold` (0-100), representing a percentage threshold for any single vote option to achieve poll consensus * MAY include a `consensus_threshold` (0-100), representing a percentage threshold for any single vote option to achieve poll consensus
* a `consensus_threshold` of '0' indicates no threshold is specified. * a `consensus_threshold` of '0' indicates no threshold is specified.
@ -29,8 +30,9 @@ A poll event:
"tags": [ "tags": [
["e", <32-bytes hex of the id of another event>, <recommended relay URL>], ["e", <32-bytes hex of the id of another event>, <recommended relay URL>],
["p", <32-bytes hex of the key>, <recommended relay URL>], ["p", <32-bytes hex of the key>, <recommended relay URL>],
["poll_options": "[[0, 'poll option 0 description string'], [1, 'poll option 1 description string'], [<n>, 'poll option <n> description string']]"], ["poll_options", "[[0, 'poll option 0 description string'], [1, 'poll option 1 description string'], [<n>, 'poll option <n> description string']]"],
["tally_method", "value"||"count"], ["tally_method", "value"||"count"],
["value_minimum", "minimum zap value to vote"],
["consensus_threshold", "required percentage to attain consensus <0..100>"], ["consensus_threshold", "required percentage to attain consensus <0..100>"],
["closed_at", "unix timestamp in seconds"], ["closed_at", "unix timestamp in seconds"],
], ],
@ -60,6 +62,7 @@ The zap request event (kind `9734`):
To avoid ambiguity of results, strict adherence to the following rules is vital when tallying and rendering poll outcomes. To avoid ambiguity of results, strict adherence to the following rules is vital when tallying and rendering poll outcomes.
A tallying client: A tallying client:
* MUST clearly indicate the `tally_method` and `value_minimum` (if specified) to potential participants before vote submission
* MUST tally poll results according to the primary `tally_method` specified: * MUST tally poll results according to the primary `tally_method` specified:
* when tallying by `value`, clients: * when tallying by `value`, clients:
* MUST include full satoshi values from all relevant zap events * MUST include full satoshi values from all relevant zap events
@ -70,6 +73,8 @@ A tallying client:
* MUST NOT include zapped satoshi values in the tally * MUST NOT include zapped satoshi values in the tally
* MUST NOT count votes from anonymous users * MUST NOT count votes from anonymous users
* MUST treat the vote option with the most unique votes as the winning option * MUST treat the vote option with the most unique votes as the winning option
* if a `value_minimum` is specified, clients:
* MUST ONLY include zaps exceeding the satoshi `value_minimum` in the tally
* when a `closed_at` time is specified, clients: * when a `closed_at` time is specified, clients:
* MUST NOT include late votes received after `closed_at` time * MUST NOT include late votes received after `closed_at` time
* SHOULD publicly blind results until after a user's vote has been received * SHOULD publicly blind results until after a user's vote has been received