Files
nips/C1.md
T

3.0 KiB

NIP-C1

Collaborative Ownership

draft optional

This NIP defines a mechanism for multiple pubkeys to collaboratively maintain events.

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

An addressable event kind 39382 serves as a pointer to collaboratively-owned content:

{
  "kind": 39382,
  "pubkey": "<creator-pubkey>",
  "tags": [
    ["d", "<identifier>"],
    ["k", "<target-kind>"],
    ["p", "<owner-1-pubkey>"],
    ["p", "<owner-2-pubkey>"],
    ["p", "<owner-3-pubkey>"]
  ],
  "content": "",
  "created_at": 1234567890
}

Tag Definitions

Tag Required Description
d Yes Shared identifier for the collaborative content
k Yes Target event kind (any kind)
p Yes Owner pubkeys (one or more)

The creator's pubkey is implicitly an owner.

Target Events

Any event kind MAY be a target of collaborative ownership. All target events:

  • MUST include a d tag matching the pointer's d tag
  • MUST include an a tag referencing the 39382 pointer event
{
  "kind": <target-kind>,
  "pubkey": "<owner-pubkey>",
  "tags": [
    ["d", "<identifier>"],
    ["a", "39382:<pointer-creator-pubkey>:<identifier>"]
  ],
  "content": "..."
}

Resolution Algorithm

To resolve the current state of collaboratively-owned content:

  1. Collect owners from the 39382 pointer's p tags (plus the pointer's pubkey)
  2. Query: {"kinds": [<target-kind>], "authors": [<all-owners>], "#d": ["<identifier>"], "limit": 1}
  3. Return the most recent event

Client Behavior

Co-Author Attribution

Clients SHOULD NOT display co-author attribution for a target event unless:

  1. The event contains an a tag referencing a 39382 pointer event, and
  2. The event's author pubkey appears in that pointer's p tags (or is the pointer's creator)

An event without a verifiable a tag backlink to a 39382 pointer MUST NOT be presented as collaboratively authored. This prevents spoofed co-authorship claims.

Example

Pointer Event

{
  "kind": 39382,
  "pubkey": "alice-pubkey",
  "tags": [
    ["d", "collaborative-guide"],
    ["k", "30023"],
    ["p", "bob-pubkey"],
    ["p", "carol-pubkey"]
  ],
  "content": ""
}

Target Event (by any owner)

{
  "kind": 30023,
  "pubkey": "bob-pubkey",
  "tags": [
    ["d", "collaborative-guide"],
    ["title", "A Collaborative Guide"],
    ["a", "39382:alice-pubkey:collaborative-guide"]
  ],
  "content": "..."
}

Client Resolution

  1. Client receives the 39382 pointer
  2. Owners: [alice, bob, carol], target kind: 30023
  3. Queries: {"kinds": [30023], "authors": ["alice", "bob", "carol"], "#d": ["collaborative-guide"], "limit": 1}