mirror of
https://github.com/nostr-protocol/nips.git
synced 2024-12-13 02:46:24 +00:00
Updating NIP-81 to add private and public statuses
This commit is contained in:
parent
0f4edef69f
commit
c31a5043a3
65
81.md
65
81.md
@ -1,18 +1,41 @@
|
|||||||
NIP-81
|
NIP-81
|
||||||
======
|
======
|
||||||
|
|
||||||
Private Relationship Status
|
Relationship Status
|
||||||
---------------------------
|
-------------------
|
||||||
|
|
||||||
`draft` `optional`
|
`draft` `optional`
|
||||||
|
|
||||||
A new `kind:30382` event documents a "Private Relationship Status" between two users of the network.
|
Event `kind:30382` documents a "Relationship Status" between two pubkeys and uses private and public tags to enhance the description of that relationship.
|
||||||
|
|
||||||
It is defined as a _parameterized replaceable event_ with a single `d` tag as a random UUID per pubkey. An optional `n` tag adds the target key to an unbound list.
|
Since statuses change over time, this event is defined as a _parameterized replaceable event_ with a single `d` tag as a random UUID per pubkey.
|
||||||
|
|
||||||
The other tags are stringified, NIP-44-encrypted and placed inside the `.content` of the event.
|
Optional `n` tags add the target key to an unbound list.
|
||||||
|
|
||||||
For example:
|
The private tags are stringified, NIP-44-encrypted and placed inside the `.content` of the event.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
Public Status
|
||||||
|
|
||||||
|
```js
|
||||||
|
{
|
||||||
|
"kind": 30382,
|
||||||
|
"tags": [
|
||||||
|
["d", "<randomUUID>"],
|
||||||
|
["n", "Clients"],
|
||||||
|
["n", "Developers"],
|
||||||
|
["p", "<pubkey>", "relay"],
|
||||||
|
["trust_level", "1"],
|
||||||
|
["nickname", "<My buddy>"],
|
||||||
|
["summary", "<Summary of the relationship>"]
|
||||||
|
],
|
||||||
|
"content": "",
|
||||||
|
// ...other fields
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Private Status
|
||||||
|
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
@ -21,12 +44,12 @@ For example:
|
|||||||
["d", "<randomUUID>"],
|
["d", "<randomUUID>"],
|
||||||
["n", "Clients"]
|
["n", "Clients"]
|
||||||
],
|
],
|
||||||
"content": "<NIP-44 encrypted Stringified TAG-List(
|
"content": nip44Encrypt(JSON.stringify([
|
||||||
["p", "<pubkey>", "relay"]
|
["p", "<pubkey>", "relay"]
|
||||||
["nickname", "<My buddy>"]
|
["nickname", "<My buddy>"]
|
||||||
["summary", "<Summary of the relationship>"],
|
["summary", "<Summary of the relationship>"],
|
||||||
["nip82secret", "<secret used to decrypt medical data for this pubkey>"]
|
["nip82secret", "<secret used to decrypt medical data for this pubkey>"]
|
||||||
)",
|
])),
|
||||||
...other fields
|
...other fields
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -36,3 +59,29 @@ For example:
|
|||||||
Profile screens MAY display the summary of the relationship and allow the user to change the tags of this event.
|
Profile screens MAY display the summary of the relationship and allow the user to change the tags of this event.
|
||||||
|
|
||||||
Clients MAY filter by `kind:30382`, with or without `n` tags, to determine how to assemble feeds, group messages, and when to display content.
|
Clients MAY filter by `kind:30382`, with or without `n` tags, to determine how to assemble feeds, group messages, and when to display content.
|
||||||
|
|
||||||
|
### Private `n`-tags
|
||||||
|
|
||||||
|
Clients MAY hide human readable `n`-tags behind a code and list their code maps in `kind:10007` using the `n_name` tag.
|
||||||
|
|
||||||
|
```js
|
||||||
|
{
|
||||||
|
"kind": 10007,
|
||||||
|
"content": nip44Encrypt(JSON.stringify([
|
||||||
|
["n_name", "<Code used in other events>", "<Name>"],
|
||||||
|
["n_name", "Clients", "Clients"] // public list of my Clients
|
||||||
|
["n_name", "6064460175057025", "Idiot"] // private list of idiots
|
||||||
|
])),
|
||||||
|
// ...other fields
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Deterministic `d`-Tag.
|
||||||
|
|
||||||
|
For private use cases that must contain deterministic d-Tags, the recommendation is to use NIP-44's `hkdf` function and use a hash between the user's private key and the pubkey of the `p` tag.
|
||||||
|
|
||||||
|
```
|
||||||
|
nip81_key = hkdf(private_key, salt: 'nip81')
|
||||||
|
bobs_tag = sha256(nip81_key || bobs_pub)
|
||||||
|
kates_tag = sha256(nip81_key || kates_pub)
|
||||||
|
```
|
Loading…
Reference in New Issue
Block a user