Conversation
Semisol
left a comment
There was a problem hiding this comment.
this looks great, but needs some changes. also, in the future, we may need polls that count people that fall under specific criteria, having a NIP-05, 2 degrees of separation from the user that does the poll, ... but that can be left for later
|
I would break poll by value and by amount into separate event kinds. In that way:
|
|
There have been some concerns raised during private conversations that I think are important to be part of the public review process here. They may be largely summarized as pointing to two different attack vectors for potential poll manipulations: 1) single whale votes discrediting many shrimp participants' votes 2) fake/bot accounts swaying outcomes via vote flooding. To address both attack vectors, I have eliminated the Additionally this resolves @vitorpamplona's suggestion, while significantly simplifying the standard, and allowing for the maximum freedom in poll design. I've included further details in the revised specification and added the relevant |
|
Should there be a max number of choices (in zap polls for Damus story I suggested four (4) max; this is the expected pattern from cagedbird)? I can imagine e.g. 100 choices being unwieldy for a mobile client. Is ten (10) too many? Is five (5)? "_ MAY include a "MAY specify a value_minimum satoshi value for zapped votes to be included in the tally" Is there a minimum hard-coded for If poll votes take place with zaps, is there a list of voters displayed? Is there an option for a non-zap poll vote? |
@alltheseas I've attempted to specify the least restrictive rule set here to ensure polling functions correctly and fairly, while allowing devs the greatest freedom to implement other non-critical details as they see fit. A large number of
Lightning wallets impose their own limits on minimum payment amounts. Don't think it's necessary to re-iterate here that values need be a 'positive decimal integer', as anything else will fail to be sent by wallets. By definition, zaps are not free. Certainly free polls are possible, but this NIP defines paid polls.
Clients can display any additional event information they choose.
No. |
Thanks @Semisol. Do the changes since your last review adequately address your concerns? I think specifying |
|
here is a draft for surveys/polls #111 that defines a survey/poll by using tags instead of a new kind Why don't we decorate kind 1 with tags indicating that we want to start a survey/poll? |
@fernandolguevara zap poll events are a significant departure from kind |
|
Thanks @toadlyBroodle, you answered my questions. One more question for you: does the current structure of zap polls as you have written it preclude an anonymous zap from a poll taker? |
|
My two cents is that I'd like to see a way to vote "other" with a custom value. It's already commonly done, and when it's not, polls almost always shoehorn you into a false dichotomy. I like zaps for polls, and given the choice between zap-only and non-zap-only polls I'd prefer the former. But a solution that accepts both based on a required level of participation set by the poll author might be a good thing. |
|
To think about:
|
@staab Poll makers are free to include an 'other' poll_option, users may include comments in zap 'content' field, and clients can choose how to render these comments. |
|
@vitorpamplona excellent feedback on some key omissions!
Great point, added requirement for primary relay inclusion.
Absolutely! This got me thinking of how to solve both problems at once: allowing for distribution of funds across predetermined public-keys. This way pollers can design more authentic/legitimate polls by allowing voters a choice for where they send their funds. This also addresses @alltheseas's last question, and enables distribution of funds functionality that was of importance to @StackSats.IO.
Great catch of a glaring omission on my part and excellent suggestion for a fix. Added requirement for |
|
Considering that a zap receipt is not a proof of payment, the poll results can be manipulated to achieve any preferred poll result. From NIP-57:
|
Yes, this is a known issue that applies to all zaps, not just polls. A solution will hopefully emerge soon. |
toadlyBroodle
left a comment
There was a problem hiding this comment.
Moved poll_options tag from 9735->9734
|
Is this implemented somewhere? I saw some poll things on Amethyst. Is it ready to merge? Can we rename it to "Zap Polls" or something like that? Just to differentiate it from non-paid polls that could be done in some other NIP later? |
Yes, it's already released in Amethyst v0.32+
Yeah absolutely. |
|
Can you fix the conflicts? |
|
I don't think we implement this spec as described though, there is some reference to e/p tags and that was just ignored, idk if you want to update the NIP to reflect this or we should discuss with @vitorpamplona why he implemented it like this |
Most of the spec is implemented as described (except additional recipients and ots), however @vitorpamplona wanted to disable all optional features for first release. Once it's proven stable, I'm sure we'll start rolling out the extra features: min/max values, consensus, closing time, etc.
|
|
IMHO min/max values, consensus, and closing time are too complicated for an average user that just want to do a weak poll. We will probably have a default setting for them and some semi-hidden way to customize: a fixed zap amount for the communists out there (lol), closing time of 24 hours (similar to Twitter to simplify), and a default consensus number based on the number of options. |
|
I don't think Zaps are solving the Sybil-attack issue, even if it was a proof-of-payment; though it certainly doesn't help. I think a solution to that is to only consider poll results from those that you follow, everything else is ignored. This could be done with another Poll specification or with this one. If kept with zaps, I agree with @fiatjaf to rename to "Zap Polls". |
|
I agree with @braydonf that zaps don't provide sibyl-resistance, my preference is to only trust poll votes from relays that offer sibyl-resistance, but I didn't want to disrupt this NIP. |
|
Yes, but why is this PR editing 22 files? |
CRLF probably. Fucking Windows. |
|
ah good ol' CRLF, sorry, didn't catch that. |
toadlyBroodle
left a comment
There was a problem hiding this comment.
Reverted unnecessarily changed files with CRLFs, added poll_option references to 57.md examples
|
Can we merge this? Amethyst and Snort implement this NIP and has been working well. |
|
I haven't merged it yet because it is breaking the README and I haven't had time for or remembered fixing it myself. |
|
I realize this ship has already sailed, but NACK on making zaps a hard dependency of other nostr features. Payment proof should be open ended and optional. |
|
Agreed @staab. We will need a different type of poll to bridge polls from ActivityPub. |
|
@staab @alexgleason I don't see this as the only poll implementation in Nostr and I generally agree that the dependency on zaps is not good. However, I do think for those using zaps, this is already good enough. |
I think we can make this better, Dependency on zaps sucks... |
Fixed |
|
I am coming here again asking to merge this. Let's move on. |
|
Consensus seems to be that dependency on zaps is bad. I vote against this PR. |
Can't we merge and if somebody has a good non-zap implementation they can just update this NIP? By not merging, we are essentially blocking all potential changes from the community. |
|
There have been 3-4 other poll implementations. We could vote on those or someone could make a new NIP. I'd rather not merge for no reason and make a bad idea a standard. Do we have a tally of how many implementations each one has? We've had polls in various places for over a year, I remember some in branle. |
That's a bit too much. Not having a non-zap version doesn't make this a bad idea. The procedure is sound as a polling option. If people want to offer polls with zaps, this is it. We can tweak things around to make it better, but it works well. Then somebody else will need to create a different procedure for polling without zaps that hopefully have similar protections against spam. |
I've yet to see a single other NIP that comes anywhere close to as comprehensive as this one. Afterall, NIP69 was paid out @NVK and @StackSatsIO bounty. |
Semisol
left a comment
There was a problem hiding this comment.
I'll review this more later.
Reopens the original NIP-69 (PR nostr-protocol#320) as NIP-103 with the following changes: - Renumbered to NIP-103 (next available NIP number) - Changed kind from 6969 to 1069 (6969 conflicts with NIP-90's reserved 6000-6999 range; 1069 sits naturally next to NIP-88's kind 1068) - Added "Relationship to NIP-88" section documenting how zap polls complement NIP-88's free polls - Added required `k` tag to zap vote format per current NIP-57 convention - Removed non-standard top-level `ots` field from event JSON examples (NIP-03 now uses separate kind 1040 events for OpenTimestamps proofs) - Removed self-referencing `e` tag from poll event example; clarified `e` tag is for replying to or referencing another event - Fixed typos ("polle" -> "poll", "my vote" -> "may vote", "results be" -> "results are") - Rebased cleanly on current upstream master (no NIP-57 modifications beyond the poll_option tag documentation)
Reopens the original NIP-69 (PR nostr-protocol#320) as NIP-B9 with the following changes: - Renumbered to NIP-B9 (hex code, per current nips repo convention) - Kept original kind 6969 (existing implementations in Amethyst et al.) - Added "Relationship to NIP-88" section documenting how zap polls complement NIP-88's free polls - Added required `k` tag to zap vote format per current NIP-57 convention - Removed non-standard top-level `ots` field from event JSON examples (NIP-03 now uses separate kind 1040 events for OpenTimestamps proofs) - Removed self-referencing `e` tag from poll event example; clarified `e` tag is for replying to or referencing another event - Fixed typos ("polle" -> "poll", "my vote" -> "may vote", "results be" -> "results are") - Rebased cleanly on current upstream master (no NIP-57 modifications beyond the poll_option tag documentation)
Request for Comment on new Poll event (kind #6969)
-Poll notes are paid poll events on nostr used to conduct quantitative opinion polls that users can vote on with zaps