From f25c7e672c23ca5463fa5c0fcb5e5f424d956862 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Sun, 1 May 2022 07:48:57 -0300 Subject: migrate nips from main nostr repo. --- 02.md | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 02.md (limited to '02.md') diff --git a/02.md b/02.md new file mode 100644 index 0000000..ae3afb8 --- /dev/null +++ b/02.md @@ -0,0 +1,73 @@ +NIP-02 +====== + +Contact List and Petnames +------------------------- + +`draft` `optional` `author:fiatjaf` `author:arcbtc` + +A special event with kind `3`, meaning "contact list" is defined as having a list of `p` tags, one for each of the followed/known profiles one is following. + +Each tag entry should contain the key for the profile, a relay URL where events from that key can be found (can be set to `null` or a invalid string if not needed), and a local name (or "petname") for that profile (can also be set to `null`), i.e., `["p", <32-bytes hex key>,
, ]`. The `content` can be anything and should be ignored. + +For example: + +```json +{ + "kind": 3, + "tags": [ + ["p", "91cf9..4e5ca", "wss://alicerelay.com/", "alice"], + ["p", "14aeb..8dad4", "wss://bobrelay.com/nostr", "bob"], + ["p", "612ae..e610f", "ws://carolrelay.com/ws", "carol"] + ], + "content": "", + ...other fields +``` + +Every new contact list that gets published overwrites the past ones, so it should contain all entries. Relays and clients SHOULD delete past contact lists as soon as they receive a new one. + +## Uses + +### Contact list backup + +If one believes a relay will store their events for sufficient time, they can use this kind-3 event to backup their following list and recover on a different device. + +### Profile discovery and context augmentation + +A client may rely on the kind-3 event to display a list of followed people by profiles one is browsing; make lists of suggestions on who to follow based on the contact lists of other people one might be following or browsing; or show the data in other contexts. + +### Relay sharing + +A client may publish a full list of contacts with good relays for each of their contacts so other clients may use these to update their internal relay lists if needed, increasing censorship-resistant. + +### Petname scheme + +The data from these contact lists can be used by clients to construct local ["petname"](http://www.skyhunter.com/marcs/petnames/IntroPetNames.html) tables derived from other people's contact lists. This alleviates the need for global human-readable names. For example: + +A user has an internal contact list that says + +```json +[ + ["p", "21df6d143fb96c2ec9d63726bf9edc71", null, "erin"] +] +``` + +And receives two contact lists, one from `21df6d143fb96c2ec9d63726bf9edc71` that says + +```json +[ + ["p", "a8bb3d884d5d90b413d9891fe4c4e46d", null, "david"] +] +``` + +and another from `a8bb3d884d5d90b413d9891fe4c4e46d` that says + +```json +[ + ["p", "f57f54057d2a7af0efecc8b0b66f5708", null, "frank"] +] +``` + +When the user sees `21df6d143fb96c2ec9d63726bf9edc71` the client can show _erin_ instead; +When the user sees `a8bb3d884d5d90b413d9891fe4c4e46d` the client can show _david.erin_ instead; +When the user sees `f57f54057d2a7af0efecc8b0b66f5708` the client can show _frank.david.erin_ instead. -- cgit v1.2.3