Starting to play with decentralized trust ranking in Spring v0.12. You can estimate, adjust and publish trust scores for other users - these are estimated from your recent interactions. https://void.cat/d/T5HriPK2C8QSd7cGsoJVL6.webp @rabble has been advocating the TrustNet as a web of trust implementation, useful for spam filtering etc. The algorithm has two steps - first, each user publishes 'trust assignments' - that's trust scores your can now publish with Spring. These are published as 10629 replaceable events with a list of 'p' tags and a score, typical size will probably be ~100 pubkeys. We provide an estimate based on past interactions, but it can't be precise - you may and should adjust it to match your actual relationships. The second step is that apps can download trust assignments of users close to your network (contacts, people you like/zap a lot etc) and run a calculation akin to PageRank, but it's not global - it's local to your network. The result will be several thousand pubkeys with non-zero trust ranks - a much wider network of users who could be trusted. This way the trust ranking is a) based on everyone's actual relationships, because you can adjust the trust scores you're publishing, and b) efficient and can be used by any app - it just needs to download several hundred trust score lists and run the trustnet algo periodically and store results in local cache. Spring only does step one at the moment. When enough people publish their trust assignments we will add the second step and let you calculate your own trust ranks. Spring will show the trust ranks under profiles, and will use it for spam filtering later. Other apps will probably find other uses for it. More on TrustNet here: https://cblgh.org/trustnet/
what's the complexity of running the algorithm? I would love to have a call with you to talk about algorithms next week. We are architecting similar things and I think we can join our efforts.
The underlying algo is Appleseed, it's an old 'peer-reviewed' thing https://github.com/cblgh/appleseed-metric It runs in several iterations until the trust ranks converge, each iteration should be around n^2, number of iterations will probably be around several dozen in our cases. All that doesn't matter much as we aren't trying to calculate the global ranks - several thousand trust assignments for local ranks will be trivial to handle by any client on any device. Honestly, I'd prefer public discussions here, but if it matters you can hit me on telegram @nostrband
I’m excited for this! Let me know how I can help test, although my Android device is out of commission at the moment. Also if you want to get in touch with cblgh I’m happy to make an introduction.
Nice idea of auto-estimatimg trust and then let the user refine. 🚀 nostr:nevent1qqsgkq467qd5letjzs0n37p4gksusmxnkmpjrvqjal548qfyr8fdq7qpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsygpn2m0xrvukg7f3e69jzs9jh2ur0cypps8029dmayk7qfyqgzutm5psgqqqqqqstmu8jr
Recommend not a total sliding scale, what is 47 vs 46?? Make it seven notches (choices), which is a known format for surveys (Liekert scale)
You can read the trustnet paper about the trust assignment ranges. I will look into Liekert scale
I like the 5 stars rating - well know system online and maps to the 1-5 likert scale.
No need for something like that. The Trustnet paper already provides human-meaningful labels. Brugeman, any plans to implement those labels to make ranking easier?
Sure - looks like a 5 point scale Trust weight (t) Semantic Human-meaningful label ---------------------------------------------------------- t == 0 no trust New person 0 < t < 0.25 low trust Acquaintance 0.25 >= t < 0.75 medium trust Friend 0.75 >= t < 1.0 high trust Peer t == 1 complete trust Partner
@brugeman check this out for social weight. I've already implemented it https://github.com/ArcadeLabsInc/arcade/wiki/ArcadeSocial#social-graph-reputation https://github.com/ArcadeLabsInc/arclib/blob/main/src/social.ts
It's there the Friend labels on the screenshot. Also on the 5-star ratings nostr:naddr1qq25gnzpveay5jns29z9xdrkdgehw5mvv46k6q3qarkn0xxxll4llgy9qxkrncn3vc4l69s0dz8ef3zadykcwe7ax3dqxpqqqp65wuucp8v
I see, but is it a drop-down menu i can choose from? Or does it just update the label when I slide the number? Could use more visual reflection in the bar too. Seeing those better reflected would help me a lot. Maybe others too
Those update as you move the slider. Maybe #nostrdesign team has any ideas?
Which labels were you referring to?
There are labels to the right of the profile name - Friend/Peer/Partner/Acquaintance/New person, it changes if you're dragging the slider (on the screenshot above). People questioned whether it's intuitive... I'd say never mind, the issue is too minor without the actual use or feedback atm.
I’m thinking about actual use fwiw. I remember @Martti Malmi had this in Iris version 0.1 and it was overkill. So he switched to just “friend or not friend” and when you follow someone it just assigns the friend for you. Maybe there is a happy middle ground though. Can I just select what they are without thinking about numbers? Remember MySpace “Top Friends”? Analysis paralysis haha
New user here, hopefully this will help new folks get into the flow?
Unfortunately new users are very hard to onboard until they are well connected. This is one of the areas where nostr really struggles atm
If you can estimate these ratings based on public behaviour, why not publish them anyway and let users adapt them if they like?
FORGIVE MY RANT … but I see TrustNet as little more than a glorified popularity contest. A less qualitative (measurable and meaningful) ranking system may actually be more valuable. Here are some random thoughts: On qualifying relationships: - people don’t want to rank the “quality” of their relationships. ITS HARD!! - people especially don’t want to come back AGAIN to update these scores (or even add scores for new friends). It will NEVER happen on a regular basis!! (Srsly?) - Qualitative scores reflecting the “depth” of ones relationship (acquaintance, friend, peer, partner) by definition need to be updated as one’s “perception” of the relationship changes. - If keeping these qualitative scores updated is required for the success of this trust ranking system, IT WILL FAIL to hold value for its intended purpose. On trust as a numeric scale : - The descrete 100 value scale underpinning this “qualitative” score is not only ridiculous (nobody knows or cares about a 100 value scale) and meaningless (the increments as applied will still be arbitrary) it could also be detrimental for a trust ranking system. - Trustworthiness is not a scalar value. Humans don’t have “more” or “less” trust for each other. We either “do” or “do not” trust each other in specific cases. Because of this, ranking on a scale is prone to misinterpretation. - What translates well to a scale is popularity. “If my friends trust X (or if X has a bigger voice and reach) then I will give X a higher trust score.” Problem with this is that the value no longer represents individual trustworthiness. On quantifiable measures of trust : - Quantitative measures can be used to determine trust. They don’t ALL have to be algorithmically derived. A mix of Hand reported and computer generated data may work best. - Digital identities may have “layers” of trust (distinct from physical interactions) that may be applied “each on their own” (in no particular order) to determine trustworthiness for specific interactions. - One layer of digital trust may be verification of personhood. For some transactions, a real person is required. - Another layer of digital trust may be verifying asset ownership. Is this the same entity that “owns” X, Y, or Z known digital assets? - Another layer of digital trust may be verifying originality. Does this account pretend to be somebody else and if so is it obviously a spoof? (This may be accomplished best by actual humans) - Other layers of trust may exist, may be discovered, and may be applicable for web of trust implementations. For this reason, any NIP developed should be open to expansion. - Web of trust COULD be determined by discrete “flags” being applied (by humans and by algorithms) to a profile. Each verifies a specific known and measurable quantity. Together they “add up to” an overall “verified” or “trusted” visible mark (one or three different marks?) applied to profiles. TBD. We really should be discussing this in earnest (openly, but in a dedicated format). Decentralized WOT implementation will NOT ONLY be a prime differentiator for Nostr from other socials, but will ALSO be essential for Nostr’s success as a social network that is NOT overrun by bots and bad actors. Thanks. #rantover
Uh @ManiMe, TrustNet is a decentralized subjective WoT system. The numbers only make sense from the perspective of one user towards the network of their contacts.
Thanks. With respect, I do understand. As it should be, trust is relative. Rankings in “my” web of trust will be different than rankings in yours. We can talk about how this should be implemented (I’d be honored to be included) but this doesn’t change my base arguments: 1: “quality of relationship” is HARD and (at best) will not be updated by people. Certainly not en mass. 2: “trust as a numeric scale” will likely NOT reflect an individuals “trustworthiness”, and may in fact be misleading if presented as such. 3: quantifiable (even if some are relative to each user) and non linear (discrete variables that stand on their own) measures of trust can be used to achieve our goal. They might be numerous (and some undefined as yet) but they can be “easily understood” and because of this can be “trusted” by everybody to mean what they promise to mean. Forgive my random thoughts. Wd love to converse more formally in this topic. How Nostr implements WOT may in fact be its downfall or it’s saving grace. Thank you.
@rabble @brugeman Here is a simple idea that could incorporate TrustNet and other WOT filter implementations. As per my rant above, I believe a “parent NIP” that defines an consistent UX and API (of sorts) for WOT filters (in clients) would be the best choice moving fwd. here’s a “top view” of how that could play out: nostr:note1za8gapacw9l2r6eqxljpx478r8vgfsd3uxe3qkh7k424sc9nekssyevl7p
We're starting to play with client-side trust ranking nostr:note13vpt4uqmfljhy9ql8rur23dpepkd8dkryxcp9mlf2wqjgxwj6puqnj3n6j
With an approach of 'each client publishes trust assignments then clients calculate trust ranks' private follows can be handled - your trust assignments would give non-zero values to privately followed users (if you so wish) and then others would use that info. Ofc if you want to keep your trust assignments 'private' that won't help. Onboarding for new users is already a problem and requires some input from them - 'topics' etc, some seed from which we could work. Any seed will inevitably lead to some 'preferred' profiles, whose trust assignments can be used to calc trust ranks for this new user and show them something 'trustworthy'. As for bootstrapping trust for new users - this has always happened naturally, through friend (someone invited you to join right?) or through genuine organic interactions (new user interacts with others and they reply and some trust is passed). But organic interactions take time, and also on Nostr it might simply be too costly to organically outpace bots that will try to gain trust the same way. That's the only place where I think PoW makes sense, also trust-bootstrapping services, or OpenTimestamp (onchain tx) with non-trivial fees spent (or a burn - but that's wasteful). Link to trust assignments note: nostr:note13vpt4uqmfljhy9ql8rur23dpepkd8dkryxcp9mlf2wqjgxwj6puqnj3n6j