2.4 KiB
NIP-81
Relationship Status
draft
optional
Event kind:30382
documents a "Relationship Status" between two pubkeys and uses private and public tags to enhance the description of that relationship. Since statuses change over time, this event is defined as a parameterized replaceable event with a single d
tag that identifies each pair of keys.
Optional n
tags add the target key to unbound lists.
The private tags are JSON Stringified, NIP-44-encrypted and placed inside the .content
of the event.
Example of public Status
{
"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
}
Example of private Status
{
"kind": 30382,
"tags": [
["d", "<randomUUID>"],
["n", "Clients"],
["n", "6064460175057025"], // see private n-tags below
],
"content": nip44Encrypt(JSON.stringify([
["p", "<pubkey>", "relay"]
["nickname", "<My buddy>"]
["summary", "<Summary of the relationship>"],
["nip82secret", "<secret used to decrypt medical data for this pubkey>"]
])),
...other fields
}
nickname
SHOULD be used instead of the person's display name in all interfaces
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.
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.
{
"kind": 10007,
"content": nip44Encrypt(JSON.stringify([
["n_name", "<Code used in other events>", "<Human readable name>"],
["n_name", "Clients", "Clients"] // public list of my Clients
["n_name", "6064460175057025", "Idiots"] // private list of idiots
])),
// ...other fields
}
Deterministic d
-Tags.
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_d_tag = sha256(nip81_key || bobs_pub)
kates_d_tag = sha256(nip81_key || kates_pub)