-
Notifications
You must be signed in to change notification settings - Fork 673
Polls RFC 69 #320
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Polls RFC 69 #320
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do these changes resolve your review @Semisol?
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. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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. |
Recent addition of zap forwarding should help mitigate poll authors' ability to self-zap.
Yes this may eventually be needed. |
Yes, but why is this PR editing 22 files? |
CRLF probably. Fucking Windows. |
ah good ol' CRLF, sorry, didn't catch that. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll review this more later.
57.md
Outdated
@@ -37,6 +37,7 @@ In addition, the event MAY include the following tags: | |||
|
|||
- `e` is an optional hex-encoded event id. Clients MUST include this if zapping an event rather than a person. | |||
- `a` is an optional NIP-33 event coordinate that allows tipping parameterized replaceable events such as NIP-23 long-form notes. | |||
- `poll_option` is a tag used for voting by [zap poll events](69.md). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No reason to modify NIP-57 for this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is under optional MAY conditional list, for documentation purposes. It is a required field for zap-poll event zap requests: which is why it's included here. Still want it removed?
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