NIP-81 ====== Relationship Status ------------------- `draft` `optional` This NIP defines two new event kinds (`30382` and `31382`) to document the relationship between two keys. Both kinds offer public and private tags to describe that relationship. Private tags are JSON Stringified, [NIP-44](44.md)-encrypted to the signer's keys and placed inside the `.content` of the event. ### Public Relationship Status Event kind `30382` is used when the relationship itself is public. The `d` tag contains the target public key in hex. ```js { "kind": 30382, "tags": [ ["d", "e88a691e98d9987c964521dff60025f60700378a4879180dcbbb4a5027850411"], ["n", "follow"], ["n", "bitcoiner"], ["n", "6064460175057025"] ], "content": nip44Encrypt(JSON.stringify([ ["petname", "NVK (Coldcard)"], ["summary", "Owes me a beer"] ])), // ...other fields } ``` `petname` SHOULD be rendered instead of the person's display name in all interfaces when the signer of this event is logged in. ### Relationship Categories Optional `n` tags `["n", ""]` add the target key to event sets. This allows clients to query by `n` and download all members of a set. Set `identifier` can be human readable and public or not. For private cases, a new event kind named "Event Set Names" (`kind:10008`) uses `map` tags to store the set name. Clients SHOULD display the `name` instead of the `identifier` if the `identifier` is present in this event. ```js { "kind": 10008, "content": nip44Encrypt(JSON.stringify([ ["map", "", ""], ["map", "bitcoiner", "bitcoiner"], ["map", "6064460175057025", "debtor"] ])), // ...other fields } ``` ### Private Relationship Status For relationships that must remain private (e.g private follows, client lists, etc), the event kind `31382` uses a similar structure but with a hashed `d` tag using [NIP-44](44.md)'s `hkdf` function. ```js { "kind": 31382, "tags": [ ["d", sha256(hkdf(private_key, salt: 'nip81') || "")], ["n", "6064460175057025"], ], "content": nip44Encrypt(JSON.stringify([ ["p", "", ""], ["n", "client-list"], ["petname", ""], ["summary", ""], ])), // ...other fields } ```