Add Trust Score

This commit is contained in:
arthurfranca 2024-06-20 13:25:01 -03:00
parent 1728f93d17
commit b437ff2d5e

85
64.md Normal file
View File

@ -0,0 +1,85 @@
NIP-64
======
Trust Score
-----------
A trust score is a public way to individually assign a quantifiable level of trust on specifc topics to a nostr identity.
Ranks can be used to discover trusted people on a common topic.
## Event Structure
The `kind:30382` is a NIP-61 ["Set Item Reference"](https://github.com/arthurfranca/nips/blob/bunch-of-events/61.md#tagging-into-event-sets) event used to assign public information about a pubkey (set to the `d` tag).
This NIP makes use of one or more trust scores added to such events as `T` tags using the following structure:
```js
[
"T",
"<integer_score_ranging_from_-3_to_3><colon_separator><topic_name>",
"<+_or_?_or_-><space_separator><review>" // optional and may appear many times
]
```
Topic names should be preferably in English, lower case and their words are dash separated.
Topic names are separated from the score by a colon (`:`).
Some topic names include a context prefix, also separated by a colon (`:`).
After the tag value, there may be any number of reviews, each one with a prefix followed by a space separator
and the actual review text.
The prefix denote a postive review (`+`), a negative review (`-`) or a neutral one (`?`).
The `?` prefix is usually assigned for free form user generated reviews. On the other hand, `+` and `-` are usually
related to clickable fixed options made available by a client.
Example:
```js
{
"kind": 30382,
"tags": [
["d", "<pubkey>"],
["T", "3:wiki:role-playing-video-game"], // has written a based wiki article about RPG
["T", "2:car:driver", "+ Skilled", "+ Polite", "- Talks too much", "? Likes to talk about movies."],
["T", "3:buyer", "? No problems when selling to this person"],
["T", "-2:seller", "? Had a bad experience when buying from this person."],
["T", "0:inn-host"], // This person hosted me but I assigned no trust score yet
["T", "3:inn-guest"] // I hosted this person and had no problem
],
// ...other fields
}
```
If a client doesn't recognize a topic name, it should leave the corresponding `T` tag untouched when editing other entry.
## Trust by Score
The below table is the default way of interpreting trust score numbers
but specific NIPs/NUDs using them may interpret them differently.
|trusted a lot|somewhat trusted|a bit trusted|neutral|a bit untrusted|somewhat untrusted|untrusted a lot|
|-|-|-|-|-|-|-|
|3|2|1|0|-1|-2|-3|
### Filtering
The reason why the rating score (integer value) has few possible values and is placed together with the topic name
is for letting clients filter on relays by both data to easily fetch good or bad users on specifc topcs.
Example filters:
- Good car drivers: `{ "kinds": [30382], "#T": ["3:car:driver", "2:car:driver", "1:car:driver"] }`
- Best merchants: `{ "kinds": [30382], "#T": ["3:seller"] }`
## Topic List
For interoperability, topic names should be listed here:
| Name | What it ranks | NIPs/NUDs |
|-|-|-|
| `buyer` | goods/services buyer | |
| `car:driver` | car driver | |
| `inn:host` | (inn, hotel, hostel, etc) host | |
| `inn:guest` | (inn, hotel, hostel, etc) guest | |
| `seller` | goods/services seller | |
| `wiki:<article-name>` | article author | [NIP-54](54.md) |