From b805093e5ca36ae9ac33bfcbf8daa61d1902e9c4 Mon Sep 17 00:00:00 2001 From: pablof7z Date: Mon, 16 Feb 2026 08:51:23 +0000 Subject: IP-C1: Collaborative Ownership --- C1.md | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 ++ 2 files changed, 115 insertions(+) create mode 100644 C1.md diff --git a/C1.md b/C1.md new file mode 100644 index 0000000..5e6ba71 --- /dev/null +++ b/C1.md @@ -0,0 +1,113 @@ +NIP-C1 +====== + +Collaborative Ownership +----------------------- + +`draft` `optional` + +This NIP defines a mechanism for multiple pubkeys to collaboratively maintain addressable events while preserving backwards compatibility. + +## Motivation + +Certain applications require shared ownership where: + +1. **Attribution matters**: Each collaborator signs with their own key +2. **Dynamic membership**: Owners can be added or removed +3. **Backwards compatibility**: Non-supporting clients see normal events + +## Specification + +### Collaborative Pointer Event + +A new addressable event kind `39382` serves as a pointer to collaboratively-owned content: + +```jsonc +{ + "kind": 39382, + "pubkey": "", + "tags": [ + ["d", ""], + ["k", ""], + ["p", ""], + ["p", ""], + ["p", ""] + ], + "content": "", + "created_at": 1234567890 +} +``` + +#### Tag Definitions + +| Tag | Required | Description | +|-----|----------|-------------| +| `d` | Yes | ` |` +| `k` | Yes | Target event kind | +| `p` | Yes | Owner pubkeys (one or more) | + +### Resolution Algorithm + +To resolve the current state of collaboratively-owned content: + +1. Parse the `39382` pointer event to extract owners (`p` tags) and target kind (`k` tag) +2. Extract the slug from the `d` tag (everything after the first `-`) +3. Query: `{"kinds": [], "authors": [], "#d": [""], "limit": 1}` + +### Back-Reference + +Target events MUST include an `a` tag pointing to the `39382` pointer: + +```jsonc +{ + "kind": 30023, + "tags": [ + ["d", "my-article"], + ["a", "39382::30023-my-article"] + ] +} +``` + +This allows clients to discover collaborative ownership from either direction: pointer → content or content → pointer. + +## Example + +### Pointer Event + +```jsonc +{ + "kind": 39382, + "pubkey": "alice-pubkey", + "tags": [ + ["d", "collaborative-guide"], + ["k", "30023"], + ["p", "alice-pubkey"], + ["p", "bob-pubkey"], + ["p", "carol-pubkey"] + ], + "content": "" +} +``` + +### Target Article (by any owner) + +```jsonc +{ + "kind": 30023, + "pubkey": "bob-pubkey", + "tags": [ + ["d", "collaborative-guide"], + ["title", "A Collaborative Guide"], + ["a", "39382:alice-pubkey:30023-collaborative-guide"] + ], + "content": "..." +} +``` + +### Client Resolution + +1. Client receives `naddr` for the `39382` pointer +2. Parses owners: `[alice, bob, carol]` +3. Queries: `{"kinds": [30023], "authors": ["alice", "bob", "carol"], "#d": ["collaborative-guide"], "limit": 1}` +4. Returns most recent version regardless of which owner published it + diff --git a/README.md b/README.md index c094d47..d9c889e 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos - [NIP-B7: Blossom](B7.md) - [NIP-BE: Nostr BLE Communications Protocol](BE.md) - [NIP-C0: Code Snippets](C0.md) +- [NIP-C1: Collaborative Ownership](C1.md) - [NIP-C7: Chats](C7.md) - [NIP-EE: E2EE Messaging using MLS Protocol](EE.md) --- **unrecommended**: superseded by the [Marmot Protocol](https://github.com/marmot-protocol/marmot) @@ -294,6 +295,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | `39000-9` | Group metadata events | [29](29.md) | | `39089` | Starter packs | [51](51.md) | | `39092` | Media starter packs | [51](51.md) | +| `39382` | Collaborative Pointer | [C1](C1.md) | | `39701` | Web bookmarks | [B0](B0.md) | [NUD: Custom Feeds]: https://wikifreedia.xyz/cip-01/ -- cgit v1.2.3