Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Relationship status #761

Draft
wants to merge 32 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
a3292f4
First Draft
vitorpamplona Sep 4, 2023
b7aa64d
Quick adjustments
vitorpamplona Sep 4, 2023
0006b13
adds privately
vitorpamplona Sep 4, 2023
5cc0c93
correct typo
sudocarlos Sep 4, 2023
fe00ddd
Merge pull request #1 from sudocarlos/patch-1
vitorpamplona Sep 6, 2023
dc4af5d
Refines proposal to make relationships private.
vitorpamplona Feb 7, 2024
bd1755f
Improves formatting
vitorpamplona Feb 7, 2024
73a2aab
Optional n tag
vitorpamplona Feb 7, 2024
225be8a
correcting the example
vitorpamplona Feb 7, 2024
0f4edef
Switch to random UUID for better security.
vitorpamplona Feb 7, 2024
c31a504
Updating NIP-81 to add private and public statuses
vitorpamplona Feb 12, 2024
6868e02
formatting
vitorpamplona Feb 12, 2024
ee6d4e6
enhancing the example with private ntags
vitorpamplona Feb 12, 2024
1bcbd31
wording
vitorpamplona Feb 12, 2024
df362d1
formatting
vitorpamplona Feb 12, 2024
873569c
formatting
vitorpamplona Feb 12, 2024
fbb5aba
Merge remote-tracking branch 'upstream/master' into relationship-status
vitorpamplona Feb 12, 2024
1e7da2b
Moves to 10008 kind for name maps
vitorpamplona Feb 12, 2024
3ff65d1
Adds edge cases
vitorpamplona Feb 12, 2024
a401682
renames nicknames to petnames
vitorpamplona Feb 14, 2024
61898c0
Simplifying statuses
vitorpamplona Mar 19, 2024
4482a41
Creating two event kinds.
vitorpamplona Mar 19, 2024
a3a6784
Update 81.md
vitorpamplona May 10, 2024
08d8b1e
Update 81.md
vitorpamplona May 10, 2024
a5ff486
Update 81.md
vitorpamplona May 10, 2024
89e8124
Merge remote-tracking branch 'upstream/master' into relationship-status
vitorpamplona May 10, 2024
bae459a
Updates relationship status to use event sets.
vitorpamplona May 11, 2024
a8c573f
adds public relationship status to the readme
vitorpamplona May 11, 2024
4e0b5fa
Aligning the Private Relationship status Kind with the other PRs
vitorpamplona Jun 20, 2024
3ba8526
Fixing kind numbers
vitorpamplona Jun 20, 2024
8cb2ebc
Merge remote-tracking branch 'upstream/master' into relationship-status
vitorpamplona Oct 11, 2024
8dafaf8
moves event set names to the right position on readme
vitorpamplona Oct 11, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions 81.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
NIP-81
======

Relationship Status
-------------------

`draft` `optional`

This NIP defines two new event kinds (`30382` and `30383`) 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, with the `d` tag receiving the public key each target key.

```js
{
"kind": 30382,
"tags": [
["d", "e88a691e98d9987c964521dff60025f60700378a4879180dcbbb4a5027850411"],
["n", "Follows"],
["n", "Bitcoiners"],
vitorpamplona marked this conversation as resolved.
Show resolved Hide resolved
["n", "6064460175057025"]
],
"content": nip44Encrypt(JSON.stringify([
["petname", "NVK (Coldcard)"],
["summary", "Owes me a beer"]
])),
// ...other fields
}
```

`petname` SHOULD be used instead of the person's display name in all interfaces.

### Relationship Categories

Optional `n` tags `["n", "<list code>"]` add the target key to unbound lists. This allows clients to query by `n` and download all members of a list.

List `codes` can be human readable or not. A new event kind named "Unbound List Names" (`kind:10008`) uses `map` tags to display the list name. Clients SHOULD display the `name` instead of the `code` if the `code` is present in this list.

```js
{
"kind": 10008,
"content": nip44Encrypt(JSON.stringify([
["map", "<code>", "<name>"],
["map", "Bitcoiners", "Bitcoiners"],
["map", "6064460175057025", "Debtors"]
vitorpamplona marked this conversation as resolved.
Show resolved Hide resolved
])),
// ...other fields
}
```

### Private Relationship Status

For relationships that MUST remain private, Event kind `30383` uses a similar structure but with a hashed `d` tag using [NIP-44](44.md)'s `hkdf` function.

```js
{
"kind": 30383,
"tags": [
["d", sha256(hkdf(private_key, salt: 'nip81') || "<pubkey>")],
["n", "6064460175057025"],
],
"content": nip44Encrypt(JSON.stringify([
["p", "<pubkey>", "relay"],
["n", "Clients List"],
vitorpamplona marked this conversation as resolved.
Show resolved Hide resolved
["petname", "<My buddy>"],
["summary", "<Summary of the relationship>"],
])),
// ...other fields
}
```
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
- [NIP-72: Moderated Communities](72.md)
- [NIP-75: Zap Goals](75.md)
- [NIP-78: Application-specific data](78.md)
- [NIP-81: Relationship Status](81.md)
- [NIP-84: Highlights](84.md)
- [NIP-89: Recommended Application Handlers](89.md)
- [NIP-90: Data Vending Machines](90.md)
Expand Down Expand Up @@ -123,6 +124,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
| `10005` | Public chats list | [51](51.md) |
| `10006` | Blocked relays list | [51](51.md) |
| `10007` | Search relays list | [51](51.md) |
| `10008` | Unbound List Names | [81](81.md) |
| `10015` | Interests list | [51](51.md) |
| `10030` | User emoji list | [51](51.md) |
| `10096` | File storage server list | [96](96.md) |
Expand Down Expand Up @@ -151,6 +153,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
| `30078` | Application-specific Data | [78](78.md) |
| `30311` | Live Event | [53](53.md) |
| `30315` | User Statuses | [38](38.md) |
| `30382` | Relationship Status | [81](81.md) |
| `30402` | Classified Listing | [99](99.md) |
| `30403` | Draft Classified Listing | [99](99.md) |
| `31922` | Date-Based Calendar Event | [52](52.md) |
Expand Down