-
Notifications
You must be signed in to change notification settings - Fork 578
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
nip45: add hyperloglog relay response #1561
Open
fiatjaf
wants to merge
4
commits into
master
Choose a base branch
from
hyperloglog
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+40
−4
Open
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
1b6516a
nip45: add hyperloglog relay response.
fiatjaf 15d83fd
nip45: negate pow attacks on hyperloglog using a stupid hack.
fiatjaf d6d3650
nip45: mention hyperloglog attack and its solution.
fiatjaf 3cdfe30
nip45: a mike dilger fix and a change inspired by a mike dilger fix.
fiatjaf File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Why all this complexity?
SipHash is a really fast and simple algorithm for use cases like this: collision resistant when the key is not known.
A new extension can be added to the
COUNT
filter that allows specifying a key for SipHash. Then, you could calculateSipHash(id, key)
and use the bits for selecting the registers and counting.This also means you could send different REQ filters to relay and still be able to aggregate, or other things that you may need to aggregate multiple filters 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.
"Why all this complexity?"
"A new extension can be added..."
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.
Except one is unnecessary (processing filters to find an index) and one is easy to implement and reduces inaccuracies at lower counts.
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.
The way I would do it if the user provides a some random data in the new or modified COUNT command is to hash (or just xor) that data with the resultant event pubkey and start from bit 0 (no offset). BUT this eliminates the possibility of the relay caching the result.
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 believe that relay caching is of pretty insignificant value, and adds complexity. Caching of certain "note clusters" derived from REQs in general (such as, all reactions/renotes to notes, all notes from who someone follows, etc) is a better strategy than caching COUNTs, as some clients will want all reactions either way.
There's also the likelyhood clients may want to only query reactions by their follows, for example, which diminishes the benefit of caching COUNTs more.