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 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 C1.md (limited to '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 + -- cgit v1.2.3