mirror of
https://github.com/nostr-protocol/nips.git
synced 2026-08-12 00:47:39 +00:00
3.0 KiB
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:
- Attribution matters: Each collaborator signs with their own key
- Dynamic membership: Owners can be added or removed
- 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
dtag matching the pointer'sdtag - MUST include an
atag referencing the39382pointer 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:
- Collect owners from the
39382pointer'sptags (plus the pointer's pubkey) - Query:
{"kinds": [<target-kind>], "authors": [<all-owners>], "#d": ["<identifier>"], "limit": 1} - Return the most recent event
Client Behavior
Co-Author Attribution
Clients SHOULD NOT display co-author attribution for a target event unless:
- The event contains an
atag referencing a39382pointer event, and - The event's author pubkey appears in that pointer's
ptags (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
- Client receives the
39382pointer - Owners:
[alice, bob, carol], target kind:30023 - Queries:
{"kinds": [30023], "authors": ["alice", "bob", "carol"], "#d": ["collaborative-guide"], "limit": 1}