My WoT network has just under 160k pubkeys and goes as far out as 8 hops away:

Reply to this note

Please Login to reply.

Discussion

So you're saying that Nostr has about 160k users?

Yup, with caveats: my existing backend database is probably incomplete and is not actively scraping new kind 3 and 10000 notes. Once I get the next iteration running (with neo4j) and actively scraping data, we’ll have a better picture.

And of course, my data only includes pubkeys connected to me. I have no idea (but am very curious to know) whether there are other disconnected nostr networks of significance — small towns in China, for example?

176473 users.

But what if one of these accidentally follows a bot, then that bot follows 10000 other bots, will the number of "users connected to me" grow by 10000?

What is a minimum viable "influence score" to filter out bots and other crap?

Filtering by minimum of 0.1 gives me 65839 users.

Probably the best way to define your WoT network will be to set some low influence score threshold - maybe 0.1, maybe even lower. Something we can play with. The bots like in your hypothetical probably have a score much less than 0.1 although I won’t know for sure until my next iteration which I hope will be much more performant than what you see now.

The GrapeRank algorithm is kinda like PageRank, except that the PageRank score has no upper limit, whereas GrapeRank produces a score that maxes out at 1. Imagine mapping PageRank from the interval [0, infinity) to the interval [0,1] where it approaches 1 asymptotically.

The advantage of the Grapevine WoT score is that it is ideally suited to be used as a weight in calculations like weighted averages or voting. This is not true of the PageRank score.

My current roadmap:

Product 1. “Google for nostr; PageRank for pubkeys.” Similar in some ways to nostr:npub1xdtducdnjerex88gkg2qk2atsdlqsyxqaag4h05jmcpyspqt30wscmntxy ‘s nostr.band’s keyword search. Maintains a centralized nostr cache that uses neo4j (a FOSS graph database) and calculates personalized PageRank scores, GrapeRank scores, and DoS scores.

Product 2. Personalized Grapevine WoT relay. Alternative to nostr:npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8 ‘s WoT relay, except that the WoT network is defined using the GrapeRank algo, ie: your network = all pubkeys with influence score above 0.01 or whatever threshold works for you. Will use #neo4j and will borrow a lot of code from Product 1. Two options: 1. Fork nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6 ‘s relay written in go (which is what utxo did I think) or 2. make a plugin for strfry. (Maybe try both?)

Product(s) 3. Make tools to make it easy for devs to crank out new interpretation protocols and craft new Worldviews, as presented here: https://grapevine-brainstorm.vercel.app/#/worldviews

#wot

#grapevine

Products 2 and 3 are FOSS and all-out full-blown cypherpunk, imho. But VCs will support them because from a VC perspective:

Product 1 is a centralized service and will be how the VC makes money.

Products 2 and 3 will add value to nostr and increase the nostr user base, thus increasing revenue from product 1.

You don't have to fork khatru, you use it as a library that does the annoying plumbing and you just sprinkle in your magic querying on top to build custom relays.

You could probably do in 5 min what would take me a month 😅

I'm also interested in using grapevine in some experiments here. I'll try to implement it myself soon.

I would love to see that! lmk what I can do to help 💜 🍇

lmk if you have questions about how the GrapeRank algo works.

Lately I’ve been thinking that a potentially faster way to calculate something similar to GrapeRank would be:

1. Calculate PageRank

2. Map the PageRank score from [0, infinity) to [0, 1) — see the graph in my habla article below.

I don’t think that would be identical to my existing GrapeRank algo, but it would probably be a good approximation. Haven’t thought it all the way through. This would be easier to implement if you’re already familiar with PageRank and have access to software that implements it; and may be computationally faster too, since GrapeRank is iterative.

https://habla.news/a/naddr1qvzqqqr4gupzq576k3ee24ptfhuun4dn9y6yqwm4ru9gstnfhwxa3fnqmuaftupdqqxnzdes8q6rwv3hxs6rjvpe2k4lwm

You speak as if I knew how to calculate PageRank and that was supposedly easier than Grapevine.

In my understanding you can calculate Grapevine by just iterating through Nostr connections sequentially through levels, right? Meanwhile PageRank involves some advanced matrix math I don't understand.

GrapeRank requires calculations that are about the same level of complexity as PageRank.

There are several ways to implement PageRank, one of which uses matrix algebra. The conceptually easier (but less computationally efficient — which doesn’t really matter for our purposes) doesn’t require any advanced math, although it is tedious to code.

The way I currently calculate GrapeRank is the same: tedious to code but nothing more mathematically complex or advanced than weighted averages.

And you’re correct: to calculate GrapeRank, you just do lots and lots of iterations. For each iteration, you calculate the GrapeRank score of one pubkey. You have to iterate through every pubkey multiple times until the scores don’t change, or the changes are below some threshold (I think 10 or 12 iterations was enough in my most recent implementation).

nostr:npub1xdtducdnjerex88gkg2qk2atsdlqsyxqaag4h05jmcpyspqt30wscmntxy uses something very much like PageRank to stratify search results for nostr.band, and it works pretty well imho, as he discusses here:

https://trust.nostr.band/

I’m not aware of anyone else using PageRank in nostr. (Although surely there’s gotta be someone?)

maybe even iris, https://graph.iris.to/

another interesting thing

https://koteitan.github.io/nostr-tsne/

Cool, ty for the links.

Although those don’t use PageRank, do they? Unless I just missed it …

I don't know enough to understand all this fully, but it sounds like another way to explain the cool new thing about your WoT implementation is: more user control

Correct?

Exactly. It’s giving you more control over your own online experience.