I assume you have received several good explanations by now, but in case you haven’t I wrote this almost 2 years ago:
How do we check “follower count” on nostr?
1. Your client sends a request to all your connected relays asking for contact lists that follow you
2. Relays answer back with the events requested
3. The client aggregates the event total, de-duplicates, and displays the count
Each relay has a set limit on how many stored events it will return per request. For some relays it’s 500, others 1000, some as high as 5000. Let’s say for simplicity that all your public relays you query use 500 as their limit. If you ask 10 relays for your followers the max possible answer you can get is 5000. In reality you won’t ever get 5000 unique responses, you’ll likely get something closer to the same 500 from each relays you query. That won’t change if you have 20,000 followers or 100,000 or if you query 100 relays instead of 10. You may get back a “different” 500-5000 each time, but you’ll still cap out at 5000 (non-unique) because that is the most events your client will receive.
Primal, nostr.band, and other aggregators that store counts in their own DB will always show different numbers than clients reading directly from relays. Generally speaking, neither number is correct! nostr:note1rg39c6hwy29eucrztq7hupd7gtvqjtfeansgsqresh9dx9jqt8gsklyq75
Small typo: tried to add the “or 100 relays” part but didn’t update the upper end of range (500-50000) instead of 5000, but the non-unique argument is the same.
if you add some time windows to those lists, starting from now and going backwards in small bits you probably can aggregate a much more complete list of what is available on the relay
the filter protocol has no pagination and the results limits are pretty skimpy, and follow lists themselves are absurdly large and there is a connection between why those limits are high and the size of those stupid snapshot style events... i'm sure some day it's eventually gonna be obvious it should be a CRDT with add and remove one by one, then these numbers would actually come out with much better confidence and easier to scale the time window to catch everything in between....
it's gonna take time for people to figure out how to do it and it's gonna take time for the telegram using inner circle of devs to finally concede they need to add a new follow/unfollow event
¿Por qué no logro saber cuantos followers tengo en Nostr?
Razón 👇
nostr:nevent1qvzqqqqqqypzq0vy9tlv6h3f8u5tvcnexdcy50acec2n42ga0y9tz8m2w5k5ffpdqqsg8xagd2aetra5jgzalflrc2fdq8cpqqjn6cxlud45k0zj4e36l4cu2y52y
What about the people you follow? Would it also limit that? (As I follow more than 5000 people on Twitter over the years, so would that be an issues or would I have to start running my own relay to definitely save who I follow?)
Slightly different problem but also a problem. There are two different issues here. First is the absolute size of your follow list. If it exceeds the max event size of a relay then your full follow list will be rejected and you won’t be able to “update” your list anymore. It happens to people today on most relays between 1500-2000 follows.
The second is how your client queries for events from people you follow. In this case most clients tries to stuff all the pubkeys you in to one request filter from your relay(s). If the request filter is larger than X (relay operator chosen limit) the relay will simply close your REQ without responding and you won’t see any events.
Instead, clients will need to (some already do) split your follows up in to smaller chunks and send multiple requests. The second problem is considerably easier to solve than the first.
Ah, so (ex):
- my follow list: 10,000
- I check my feed
- relay checks and sends events from my follow list, but executes 10 sends instead of 1, where it sends x number of posts/events per follow per timestamp for the first 1,000 in my follow list, then the next (til 10k).
@3xethical another great explanation about follower count.