Conversation
|
Ok reposting here as asked: @motorina0 very clever math. Maybe I misunderstood but isn't this creating a system where only rich people ratings matter? Unless when I buy an item or use some service, the store/service provider use part of the money to buy me a rating mass tree leaf/root registration. But yet how do we stop a rich person from buying many rating mass tree root registrations and creating fake positive ratings to his crappy product or fake negative ratings to a good competitor product? |
|
Payments complement nostr, but should not be hard dependencies. This should be implemented using NIP 13's proof of work specification, or orthogonal to use case (i.e. an additional tag that can be attached to any event, and includes a proof of payment). Web of trust is a better solution for sybil resistance anyway. |
Exactly what I was thinking. Also, there's no inventive for others to pay to rate a Nostr profile. Except for the profile owner themselves to pay to rate themselves. And for products and services, the ratings can be gamed in a system like by the established player, which is a terrible thing for new entrants isn't it? |
This is a very good point, someone with a high budget can indeed buy a large It is important to remember that each The service that computes the ratings (based on mass and value) is not necessarily a "dumb" aggregator. It can implement some heuristics to eliminate/reduce bad actors. This service can be on the client side or on a 3rd party server side. Some basic heuristic examples:
The spammer can either:
This solution is not a silver bullet, but it can slow down spammers and make it more risky to get in the business. |
|
I had a similar idea about 8 months ago, just before I heard about Nostr. I wrote the following whitepaper that describes my idea tweethash.pdf. I did not publish my whitepaper, because I later discovered a vulnerability in it (and also because I found about nostr). However, I notarized the sha256 of that pdf on the Bitcoin blockchain, see transaction 97b977431657acf9eb91f1852bdea263a0359e6ffa3956064e037bbbd42eeddd The vulnerability I discovered is that miners can trivially cheat the system, by notarizing very large trees for free. The only solution I found to avoid that is to burn the coins in the OP_RETURN output, instead of paying mining fees. However, that makes the whole thing unpractical, since one also needs to pay mining fees. |
Some problems with
Some problems with
|
|
|
In my proposal, this cost is small compared to the actual mining fee (see section 'overpaying the miners').
Exactly the same idea, see page 3: "the trees created by notaries are not balanced" |
|
If this is useful (I can't tell if it works or not), could it be generalized to cover all note types, rather than just ratings? It seems like it would be nice to be able to prove payment for regular notes, DMs, etc as well. |
The Other event types (non NIP-33) would allow the |
An established player is an existing product company in the market with enormous capital accumulated over the years, this person have the money to spam new entrants in the market with bad reviews. |
OK, then the answer is the same as in this comment |
|
I don't like pinning the weight of a rating to ones ability to pay. I would like to see the weight of a rating a function of the network graph of an npub. |
Assume
How many |
|
I see no reason why a simple web of trust tree using kind 3 follower sets and inverse squared social distance as a proxy for mass isn't superior to this proposal it solves all of the problems you listed in the comments, without any tie-ins to purchasing reputation |
Here are some reasons: Too much dataIt is just too much data. Here is a back-of-the-napkin computation (I might be wrong, please correct me):
Bots can be friends
Excludes valid
|
yes, this is why we run a service that can compute weight-on-request for mobile clients. it maintains a social graph for "everyone", and then can reply quickly when someone wants to know the aggregate scores for a set of events.
yes, however every node should have equal weight at its point in the tree. having a billion followers at a distance 2 is the same as having one. a single bot friend can only contribute singly. it will be one friend out of many and its recommendation weight cannot be higher
imo. this is desirable. there can be no meaningful difference between a fully unknown npub and spam, however "paid for". i suspect there's also no such thing as a disconnected real person. we're all 6 degrees of separation from each other. add some more friends to get a better score.
this is literally what we're using it for. it's perfect. incredibly useful to take marketplace NIP-32 scores and aggregate them in this way |
Let me give you and example of how the
Maybe there are not so many orders from my country, or maybe I have few friends, but I challenge you to check your last 5 products purchased online and try to manually build a PS: what market are you building? |
yes we will probably have a free in-app version that goes 3 levels deep and charge for "deeper", more comprehensive ratings (but still based on your graph)
only stuff that's been rated via NIP-32 or stuff sold by someone with an NPUB key
yes, we can have different scores for popularity, versus trust. as a marketplace, we're primarily concerned with trust.
no, because there's far more profit to be made fake-rating things than truth-rating things. the incentive model "pay to rate" is totally broken. you get nothing if you're honest, and you make $$$ if you lie.
we're not using nip15. we're using a social-chat/telegram-style market: this is outdated, but the basic idea is "anyone can post something for sale" using structured tags in the post: there are no "stalls or stores", just people and channels
agreed, we are too, and i acknowledge there can be isues
but you cannot test 7 levels deep. because it's too difficult. but our server goes 7 levels now using nostr's existing graphs. and i see very few isolated graphs. and the ones that are are almost all based on language, region... or are isolated by bots & spam. (at 7 levels you basically have 100% coverage).
well, my wife has a massive social footprint, and she does all the shopping, and uses instagram a lot, so it's probably not a fair comparison. maybe it will work better for some that others. i think if there's no connection, we should look for highly trusted nodes that are adjacent to your network, and then recommend them as "possible follows" when you start the app. so you can bootstrap into a better network. |
|
nostronaut
left a comment
There was a problem hiding this comment.
The problem of subjective reputation is stated, as bots sybil-attacking with a very large number of accounts and overtaking the reputation system
The solution proposed involves creating a scarce resource from mining fees (an external resource), that can be used to weight the vote (rating mass) and then on a second layer have the vote itself (rating value) (both rating mass and rating value are subjective and picked by the user, and besides of semantics, its not clear why they need to be separate)
again, an external resource, here bitcoin, needs to be spent in order to buy the rating votes, that can be later dispersed. This makes the proposed protocol strongly coupled with bitcoin for a highly specific, non-generic, usecase, and that typically is not so good. Composing the rating vote proposal with the zap protocol would be a more typical solution.
|
Below is an alternate way of looking into the reputation problem. our assumption is: the native asset of a social network is the reputation of its users itself, that is decorrelated, non-sybil accounts monitoring and interacting with each other over large periods of time staking reputation as a scarce resource may be a better fit for this problem, as it is the native asset of a social network then the issue is how to bootstrap reputation in order to stake it to create such a system. we have a rough sketch of such a proposal on issue #419 it makes each user behave like a signing oracle with a single, linear history that they stake over time, similar to how a blockchain does |
The protocol assumes:
Therefore "strongly coupled" with bitcoin is not an issue.
|


Problem
Ratings give the reputation for a person, service or product. They are important for creating an open and free-market.
It helps participants make decisions based on what their peers previously experienced with that person, services or product.
Having a rating system in an open and decentralized system (like
nostr) is hard because anyone can join and give ratings.Thus bots will be created to overtake the honest human's votes.
Some solutions have been proposed for this problem, but none of them is satisfactory (see first comment).
Suggested Solution
In order to avoid spam, each rating must have associated with it the proof that a tiny fee has been paid. The fee should not be paid to a centralized service that can cheat (see first comment), but to an impartial, decentralized system (like the bitcoin blockchain).
Rating Mass
A user can register its
public keyin a Merkle tree and the root of the tree is then persisted (by a specialized service) on the bitcoin blockchain using theOP_RETURNoperator (thus paying a fee). Similarly with what open-timestamps does.If the
public keyis registered as the root of the tree then therating massis1, if it is registered on the second level then therating massis1/2(there can be two leaves). The lower one goes in the tree, the more leaves it can register, but also the less each leaf is worth (rating massis1/2nwherenis the depth - starting at0).The properties of the tree are:
[<tree-level>, <leaf-index>, <public-key>].Highlighted in the image is the path to leaf
[4, 0, a728...]which is composed of4elements:[hash([4,1,a728...]), H2, H7, H9]. This path has arating massof1/4.For the above example (image), the public key
a728...(yellow rectangles) has purchased9 rating optionswith a total mass of0.8125(2 * 1/22+2 * 1/24+4 * 1/25), whereas public key1acf...(purple rectangles) has purchased3 rating optionswith a mass of0.1875(3 * 1/24). The total mass of the tree will always be1(eg:0.8125 + 0.1875), because everybody knows that1+2+4+⋯+2𝑛=2𝑛+1- 1.Rating Mass is not the Rating Value
The
rating valuecan be an integer between1 and 5, or it can be a float between0 and 1(see this NIP-32 PR), or any other rating system.The
rating massrepresents the importance or intensity that a user gives to a particular rating. It also guarantees that the rating is not spam.For example I might dislike a film and give it a
rating valueof2 starsand arating massof0.03125(consume a leaf on level5of the tree:1/25). Or I might dislike that the Uber driver just dropped me off in a bad neighborhood and give it arating valueof2 stars, but arating massof0.5(consume a leaf on level1of the tree:1/21, more intense).Using Rating Mass in Nostr
Ratings in
nostrcan be achieved by publishing a particular event (see this NIP-32 PR to get an idea of how the event could look like) and attaching arating massto the event.This rating event should be a Parameterized Replaceable Events (NIP-33) and have these additional tags representing the
rating mass:{ "kind": 30030, "pubkey": <public key of the event creator>, "tags": [ ["tx-id", <id of the transaction where the `OP_RETURN` was included>], ["output-index", <index of the `OP_RETURN` output>], ["leaf", <tree-level>, <leaf-index>, <public-key of the event creator>], ["leaf-path", <hash1>, <hash2>, ...], ["d", <hash(tx-id, output-index, <tree-level>, <leaf-index>, <public-key>, <hash1>, <hash2>, ...)>], ... ], "content": "...", ... }The
dtag is the most important one because it aggregates all the other values and because it is the one used to replace the NIP-33 event. This means that the sameleafcannot be used in two different rating events. Trying to reuse theleafwill simply replace the previous rating event. On the other hand, if I have "consumed" one of my ratings for liking a song that I later discover it was plagiarised then I can take that rating back and reuse it one something else.Next Steps
detailed doc for the tree structures
create a services that allows users to buy
rating masscreate a service that computes ratings based on the
rating massassigned to each rating eventintegrate with social media clients, market clients, etc