mirror of
https://github.com/nostr-protocol/nips.git
synced 2025-12-11 17:48:50 +00:00
Compare commits
8 Commits
nip29-prot
...
nip17-seen
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d76da368e | ||
|
|
1afb6da049 | ||
|
|
d306f6b3f8 | ||
|
|
82fffa0580 | ||
|
|
477e3dfd4d | ||
|
|
9afca6c4dc | ||
|
|
4eed6e8368 | ||
|
|
db3e3bddbe |
5
01.md
5
01.md
@@ -85,7 +85,7 @@ As a convention, all single-letter (only english alphabet letters: a-z, A-Z) key
|
|||||||
|
|
||||||
### Kinds
|
### Kinds
|
||||||
|
|
||||||
Kinds specify how clients should interpret the meaning of each event and the other fields of each event (e.g. an `"r"` tag may have a meaning in an event of kind 1 and an entirely different meaning in an event of kind 10002). Each NIP may define the meaning of a set of kinds that weren't defined elsewhere. [NIP-10](10.md), for instance, specifies the `kind:1` text note for social media applications.
|
Kinds specify how clients should interpret the meaning of each event and the other fields of each event (e.g. an `"r"` tag may have a meaning in an event of kind 1 and an entirely different meaning in an event of kind 10002). Each NIP may define the meaning of a set of kinds that weren't defined elsewhere. [NIP-10](10.md), for instance, specifies the `kind:1` text note for social media applications.
|
||||||
|
|
||||||
This NIP defines one basic kind:
|
This NIP defines one basic kind:
|
||||||
|
|
||||||
@@ -170,8 +170,9 @@ This NIP defines no rules for how `NOTICE` messages should be sent or treated.
|
|||||||
* `["OK", "b1a649ebe8...", false, "pow: difficulty 26 is less than 30"]`
|
* `["OK", "b1a649ebe8...", false, "pow: difficulty 26 is less than 30"]`
|
||||||
* `["OK", "b1a649ebe8...", false, "restricted: not allowed to write."]`
|
* `["OK", "b1a649ebe8...", false, "restricted: not allowed to write."]`
|
||||||
* `["OK", "b1a649ebe8...", false, "error: could not connect to the database"]`
|
* `["OK", "b1a649ebe8...", false, "error: could not connect to the database"]`
|
||||||
|
* `["OK", "b1a649ebe8...", false, "mute: no one was listening to your ephemeral event and it wasn't handled in any way, it was ignored"]`
|
||||||
- `CLOSED` messages MUST be sent in response to a `REQ` when the relay refuses to fulfill it. It can also be sent when a relay decides to kill a subscription on its side before a client has disconnected or sent a `CLOSE`. This message uses the same pattern of `OK` messages with the machine-readable prefix and human-readable message. Some examples:
|
- `CLOSED` messages MUST be sent in response to a `REQ` when the relay refuses to fulfill it. It can also be sent when a relay decides to kill a subscription on its side before a client has disconnected or sent a `CLOSE`. This message uses the same pattern of `OK` messages with the machine-readable prefix and human-readable message. Some examples:
|
||||||
* `["CLOSED", "sub1", "unsupported: filter contains unknown elements"]`
|
* `["CLOSED", "sub1", "unsupported: filter contains unknown elements"]`
|
||||||
* `["CLOSED", "sub1", "error: could not connect to the database"]`
|
* `["CLOSED", "sub1", "error: could not connect to the database"]`
|
||||||
* `["CLOSED", "sub1", "error: shutting down idle subscription"]`
|
* `["CLOSED", "sub1", "error: shutting down idle subscription"]`
|
||||||
- The standardized machine-readable prefixes for `OK` and `CLOSED` are: `duplicate`, `pow`, `blocked`, `rate-limited`, `invalid`, `restricted`, and `error` for when none of that fits.
|
- The standardized machine-readable prefixes for `OK` and `CLOSED` are: `duplicate`, `pow`, `blocked`, `rate-limited`, `invalid`, `restricted`, `mute` and `error` for when none of that fits.
|
||||||
|
|||||||
51
17.md
51
17.md
@@ -8,7 +8,11 @@ Private Direct Messages
|
|||||||
|
|
||||||
This NIP defines an encrypted direct messaging scheme using [NIP-44](44.md) encryption and [NIP-59](59.md) seals and gift wraps.
|
This NIP defines an encrypted direct messaging scheme using [NIP-44](44.md) encryption and [NIP-59](59.md) seals and gift wraps.
|
||||||
|
|
||||||
## Direct Message Kind
|
## Message kinds
|
||||||
|
|
||||||
|
Each of these message kinds can be gift-wrapped as described afterwards. Clients have to first unwrap them to then see their kinds.
|
||||||
|
|
||||||
|
### Direct Message Kind
|
||||||
|
|
||||||
Kind `14` is a chat message. `p` tags identify one or more receivers of the message.
|
Kind `14` is a chat message. `p` tags identify one or more receivers of the message.
|
||||||
|
|
||||||
@@ -31,7 +35,7 @@ Kind `14` is a chat message. `p` tags identify one or more receivers of the mess
|
|||||||
|
|
||||||
`.content` MUST be plain text. Fields `id` and `created_at` are required.
|
`.content` MUST be plain text. Fields `id` and `created_at` are required.
|
||||||
|
|
||||||
An `e` tag denotes the direct parent message this post is replying to.
|
An `e` tag denotes the direct parent message this post is replying to.
|
||||||
|
|
||||||
`q` tags MAY be used when citing events in the `.content` with [NIP-21](21.md).
|
`q` tags MAY be used when citing events in the `.content` with [NIP-21](21.md).
|
||||||
|
|
||||||
@@ -41,7 +45,7 @@ An `e` tag denotes the direct parent message this post is replying to.
|
|||||||
|
|
||||||
Kind `14`s MUST never be signed. If it is signed, the message might leak to relays and become **fully public**.
|
Kind `14`s MUST never be signed. If it is signed, the message might leak to relays and become **fully public**.
|
||||||
|
|
||||||
## File Message Kind
|
### File Message Kind
|
||||||
|
|
||||||
```jsonc
|
```jsonc
|
||||||
{
|
{
|
||||||
@@ -59,7 +63,6 @@ Kind `14`s MUST never be signed. If it is signed, the message might leak to rela
|
|||||||
["decryption-key", "<decryption-key>"],
|
["decryption-key", "<decryption-key>"],
|
||||||
["decryption-nonce", "<decryption-nonce>"],
|
["decryption-nonce", "<decryption-nonce>"],
|
||||||
["x", "<the SHA-256 hexencoded string of the file>"],
|
["x", "<the SHA-256 hexencoded string of the file>"],
|
||||||
// rest of tags...
|
|
||||||
],
|
],
|
||||||
"content": "<file-url>"
|
"content": "<file-url>"
|
||||||
}
|
}
|
||||||
@@ -82,6 +85,46 @@ Kind `15` is used for sending encrypted file event messages:
|
|||||||
|
|
||||||
Just like kind `14`, kind `15`s MUST never be signed.
|
Just like kind `14`, kind `15`s MUST never be signed.
|
||||||
|
|
||||||
|
### "Seen" event
|
||||||
|
|
||||||
|
An event of kind `30016` that CAN be emitted automatically by a client whenever a chat window is displayed to the user, even if the user hasn't acted on it.
|
||||||
|
|
||||||
|
```jsonc
|
||||||
|
{
|
||||||
|
"id": "<usual hash>",
|
||||||
|
"pubkey": "<sender-pubkey>",
|
||||||
|
"created_at": "<current-time>",
|
||||||
|
"kind": 30016,
|
||||||
|
"tags": [
|
||||||
|
["d", "<subject>"],
|
||||||
|
["seen", "<latest_message_id>", "<previous_id>", "<...>"]
|
||||||
|
],
|
||||||
|
"content": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- `d` must be set to the conversation subject, or it can be empty or omitted in the most common case of a `<subject>` not existing.
|
||||||
|
- `seen` must be set to the id of the last messages seen. It can contain any number of ids, ordered from the newest to the oldest.
|
||||||
|
|
||||||
|
This event SHOULD be discarded whenever a new event is received for the same conversation.
|
||||||
|
|
||||||
|
Any messages with timestamp before the last item in the `seen` array are assumed to have been seen.
|
||||||
|
|
||||||
|
If there is a gap in the `seen` array that indicates a message may have been missed for whatever reason.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- `alice` sends message `aaaa`
|
||||||
|
- `alice` sends message `bbbb`
|
||||||
|
- `alice` sends message `cccc`
|
||||||
|
- `bob` sends event with `["seen", "bbbb", "aaaa"]`
|
||||||
|
- at this point `alice`'s client should display `aaaa` and `bbbb` as seen, `cccc` as unseen
|
||||||
|
- `alice` sends message `dddd`
|
||||||
|
- `alice` sends message `eeee`, which is lost due to relay malfunction
|
||||||
|
- `alice` sends message `ffff`
|
||||||
|
- `bob` sends event with `["seen", "ffff", "dddd", "cccc"]`
|
||||||
|
- at this point `alice`'s client should display all messages as seen, except for `eeee` which should be displayed with an error indicator
|
||||||
|
|
||||||
## Chat Rooms
|
## Chat Rooms
|
||||||
|
|
||||||
The set of `pubkey` + `p` tags defines a chat room. If a new `p` tag is added or a current one is removed, a new room is created with a clean message history.
|
The set of `pubkey` + `p` tags defines a chat room. If a new `p` tag is added or a current one is removed, a new room is created with a clean message history.
|
||||||
|
|||||||
2
34.md
2
34.md
@@ -163,7 +163,7 @@ Root Patches and Issues have a Status that defaults to 'Open' and can be set by
|
|||||||
|
|
||||||
The most recent Status event (by `created_at` date) from either the issue/patch author or a maintainer is considered valid.
|
The most recent Status event (by `created_at` date) from either the issue/patch author or a maintainer is considered valid.
|
||||||
|
|
||||||
The Status of a patch-revision defaults to either that of the root-patch, or `1632` (_Closed_) if the root-patch's Status is `1631` (_Applied/Merged_) and the patch-revision isn't tagged in the `1631` (_Applied/Merged_) event.
|
The Status of a patch-revision is to either that of the root-patch, or `1632` (_Closed_) if the root-patch's Status is `1631` (_Applied/Merged_) and the patch-revision isn't tagged in the `1631` (_Applied/Merged_) event.
|
||||||
|
|
||||||
|
|
||||||
## Possible things to be added later
|
## Possible things to be added later
|
||||||
|
|||||||
2
51.md
2
51.md
@@ -32,7 +32,7 @@ For example, _mute list_ can contain the public keys of spammers and bad actors
|
|||||||
| Blocked relays | 10006 | relays clients should never connect to | `"relay"` (relay URLs) |
|
| Blocked relays | 10006 | relays clients should never connect to | `"relay"` (relay URLs) |
|
||||||
| Search relays | 10007 | relays clients should use when performing search queries | `"relay"` (relay URLs) |
|
| Search relays | 10007 | relays clients should use when performing search queries | `"relay"` (relay URLs) |
|
||||||
| Simple groups | 10009 | [NIP-29](29.md) groups the user is in | `"group"` ([NIP-29](29.md) group id + relay URL + optional group name), `"r"` for each relay in use |
|
| Simple groups | 10009 | [NIP-29](29.md) groups the user is in | `"group"` ([NIP-29](29.md) group id + relay URL + optional group name), `"r"` for each relay in use |
|
||||||
| Favorite relays | 10012 | user favorite relays and pointers to relay sets | `"relay"` (relay URLs) and `"a"` (kind:30002 relay set) |
|
| Relay feeds | 10012 | user favorite browsable relays (and relay sets) | `"relay"` (relay URLs) and `"a"` (kind:30002 relay set) |
|
||||||
| Interests | 10015 | topics a user may be interested in and pointers | `"t"` (hashtags) and `"a"` (kind:30015 interest set) |
|
| Interests | 10015 | topics a user may be interested in and pointers | `"t"` (hashtags) and `"a"` (kind:30015 interest set) |
|
||||||
| Media follows | 10020 | multimedia (photos, short video) follow list | `"p"` (pubkeys -- with optional relay hint and petname) |
|
| Media follows | 10020 | multimedia (photos, short video) follow list | `"p"` (pubkeys -- with optional relay hint and petname) |
|
||||||
| Emojis | 10030 | user preferred emojis and pointers to emoji sets | `"emoji"` (see [NIP-30](30.md)) and `"a"` (kind:30030 emoji set) |
|
| Emojis | 10030 | user preferred emojis and pointers to emoji sets | `"emoji"` (see [NIP-30](30.md)) and `"a"` (kind:30030 emoji set) |
|
||||||
|
|||||||
1
69.md
1
69.md
@@ -80,6 +80,7 @@ Currently implemented on the following platforms:
|
|||||||
- [Mostro](https://github.com/MostroP2P/mostro)
|
- [Mostro](https://github.com/MostroP2P/mostro)
|
||||||
- [@lnp2pBot](https://github.com/lnp2pBot/bot)
|
- [@lnp2pBot](https://github.com/lnp2pBot/bot)
|
||||||
- [Robosats](https://github.com/RoboSats/robosats/pull/1362)
|
- [Robosats](https://github.com/RoboSats/robosats/pull/1362)
|
||||||
|
- [Peach Bitcoin](https://github.com/Peach2Peach/peach-nostr-announcer-bot)
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
||||||
|
|||||||
44
72.md
44
72.md
@@ -41,19 +41,55 @@ The goal of this NIP is to enable public communities. It defines the replaceable
|
|||||||
|
|
||||||
# Posting to a community
|
# Posting to a community
|
||||||
|
|
||||||
Any Nostr event can be posted to a community. Clients MUST add one or more community `a` tags, each with a recommended relay.
|
[NIP-22](NIP-22) kind 1111 events SHOULD be used for text notes posted to a community, with the `A` tag always scoped to the community definition.
|
||||||
|
|
||||||
|
## Top-level posts
|
||||||
|
|
||||||
|
For top-level posts, the uppercase and lowercase NIP-22 tags should both refer to the community definition itself.
|
||||||
|
|
||||||
```jsonc
|
```jsonc
|
||||||
{
|
{
|
||||||
"kind": 1,
|
"kind": 1111,
|
||||||
"tags": [
|
"tags": [
|
||||||
["a", "34550:<community event author pubkey>:<community-d-identifier>", "<optional-relay-url>"],
|
["A", "34550:<community-author-pubkey>:<community-d-identifier>", "<optional-relay-url>"],
|
||||||
|
["a", "34550:<community-author-pubkey>:<community-d-identifier>", "<optional-relay-url>"],
|
||||||
|
["P", "<community-author-pubkey>", "<optional-relay-url>"],
|
||||||
|
["p", "<community-author-pubkey>", "<optional-relay-url>"],
|
||||||
|
["K", "34550"],
|
||||||
|
["k", "34550"],
|
||||||
],
|
],
|
||||||
"content": "hello world",
|
"content": "Hi everyone. It's great to be here!",
|
||||||
// other fields...
|
// other fields...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Nested replies
|
||||||
|
|
||||||
|
For nested replies, the uppercase tags should still refer to the community definition, while the lowercase tags should refer to the parent post or reply.
|
||||||
|
|
||||||
|
```jsonc
|
||||||
|
{
|
||||||
|
"kind": 1111,
|
||||||
|
"tags": [
|
||||||
|
// community definition itself
|
||||||
|
["A", "34550:<community-author-pubkey>:<community-d-identifier>", "<optional-relay-url>"],
|
||||||
|
["P", "<community-author-pubkey>", "<optional-relay-url>"],
|
||||||
|
["K", "34550"],
|
||||||
|
|
||||||
|
// parent post or reply
|
||||||
|
["e", "<parent-event-id>", "<optional-relay-url>"],
|
||||||
|
["p", "<parent-event-author-pubkey>", "<optional-relay-url>"],
|
||||||
|
["k", "<parent-event-kind>"] // most likely "1111"
|
||||||
|
],
|
||||||
|
"content": "Agreed! Welcome everyone!",
|
||||||
|
// other fields...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Backwards compatibility note
|
||||||
|
|
||||||
|
Previously kind 1 events were used for posts in communities, with an "a" tag pointing to the community. For backwards compatibility, clients MAY still query for kind 1 events, but SHOULD NOT use them for new posts. Instead, clients SHOULD use kind 1111 events with the `A` and `a` tags as described above.
|
||||||
|
|
||||||
# Moderation
|
# Moderation
|
||||||
|
|
||||||
Anyone may issue an approval event to express their opinion that a post is appropriate for a community. Clients MAY choose which approval events to honor, but SHOULD at least use ones published by the group's defined moderators.
|
Anyone may issue an approval event to express their opinion that a post is appropriate for a community. Clients MAY choose which approval events to honor, but SHOULD at least use ones published by the group's defined moderators.
|
||||||
|
|||||||
142
87.md
Normal file
142
87.md
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
NIP-87
|
||||||
|
======
|
||||||
|
|
||||||
|
Ecash Mint Discoverability
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
`draft` `optional`
|
||||||
|
|
||||||
|
This NIP describes `kind:38173`, `kind:38172` and `kind:38000`: a way to discover ecash mints, their capabilities, and people who recommend them.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Nostr's discoverability and transparent event interaction is one of its most interesting/novel mechanics.
|
||||||
|
This NIP provides a simple way for users to discover ecash mints recommended by other users and to interact with them.
|
||||||
|
|
||||||
|
### Parties involved
|
||||||
|
|
||||||
|
There are three actors to this workflow:
|
||||||
|
|
||||||
|
* An ecash mint operator, announces their mint and its capabilities.
|
||||||
|
* Publishes `kind:38173` or `kind:38172`, detailing how to connect to it and its capabilities.
|
||||||
|
* user A, who recommends an ecash mint
|
||||||
|
* Publishes `kind:38000`
|
||||||
|
* user B, who seeks a recommendation for an ecash mint
|
||||||
|
* Queries for `kind:38000` and, based on results, queries for `kind:38173`/`kind:38172`
|
||||||
|
|
||||||
|
## Events
|
||||||
|
|
||||||
|
### Recommendation event
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"kind": 38000,
|
||||||
|
"pubkey": <recommender-user-pubkey>,
|
||||||
|
"tags": [
|
||||||
|
["k", "38173"],
|
||||||
|
["d", "<d-identifier>"],
|
||||||
|
["u", <recommended-fedimint-invite-code>],
|
||||||
|
["a", "38173:fedimint-pubkey:<d-identifier>", "wss://relay1"]
|
||||||
|
],
|
||||||
|
"content": "I trust this mint with my life"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The recommendation event is a parameterized-replacable event so that a user can change edit their recommendation without creating a new event.
|
||||||
|
|
||||||
|
The `d` tag in `kind:38000` is the `kind:38173`/`kind:38172` event identifier this event is recommending, if no event exists, the `d` tag can still be calculated from the mint's pubkey/id.
|
||||||
|
The `k` tag is the kind number that corresponds to the event kind that the user is recommending, in this case `kind:38173` for fedimints and `kind:38172` for cashu mints.
|
||||||
|
|
||||||
|
Optional `u` tags can be added to give a recommend way to connect to the mint.
|
||||||
|
The value of the tag is the URL or invite code of the ecash mint.
|
||||||
|
Multiple `u` tags can appear on the same `kind:38000`.
|
||||||
|
|
||||||
|
`a` tags are used to point to the `kind:38173`/`kind:38172` event of the ecash mint.
|
||||||
|
The first value of the tag is the `kind:38173`/`kind:38172` event identifier, the second value of the tag is a relay hint.
|
||||||
|
This is used to correctly point to the mint's `kind:38173`/`kind:38172` event in case there are duplicates claiming to be the same mint.
|
||||||
|
|
||||||
|
The content can be used to give a review.
|
||||||
|
|
||||||
|
## Ecash Mint Information
|
||||||
|
|
||||||
|
Cashu mints SHOULD publish `kind:38172` events to announce their capabilities and how to connect to them.
|
||||||
|
|
||||||
|
For cashu mints, the `u` tag SHOULD be the URL to the cashu mint and it should list the nuts that the cashu mint supports.
|
||||||
|
|
||||||
|
The `d` tag SHOULD be the mint's pubkey (found when querying `/v1/info`), this way users can query by pubkey and find the mint announcement.
|
||||||
|
|
||||||
|
An `n` tag SHOULD be added to signify the network the cashu mint is on (either `mainnet`, `testnet`, `signet`, or `regtest`)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"kind": 38172,
|
||||||
|
"pubkey": "<application-pubkey>",
|
||||||
|
"content": "<optional-kind:0-style-metadata>",
|
||||||
|
"tags": [
|
||||||
|
["d", <cashu mint pubkey>],
|
||||||
|
["u", "https://cashu.example.com"],
|
||||||
|
["nuts", "1,2,3,4,5,6,7"],
|
||||||
|
["n", "mainnet"]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Fedimints SHOULD publish `kind:38173` events to announce their capabilities and how to connect to them.
|
||||||
|
|
||||||
|
For fedimints, it should list all known fedimint invite codes in `u` tags and it should list the modules it supports.
|
||||||
|
|
||||||
|
The `d` tag SHOULD be the federation id, this way users can query by federation id and find the fedimint announcement.
|
||||||
|
|
||||||
|
An `n` tag SHOULD be added to signify the network the fedimint is on (either `mainnet`, `testnet`, `signet`, or `regtest`)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"kind": 38173,
|
||||||
|
"pubkey": "<application-pubkey>",
|
||||||
|
"content": "<optional-kind:0-style-metadata>",
|
||||||
|
"tags": [
|
||||||
|
["d", <federation-id>],
|
||||||
|
["u", "fed11abc.."],
|
||||||
|
["u", "fed11xyz.."],
|
||||||
|
["modules", "lightning,wallet,mint"],
|
||||||
|
["n", "signet"]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
* `content` is an optional `metadata`-like stringified JSON object, as described in NIP-01. This content is useful when the pubkey creating the `kind:38173` is not a normal user. If `content` is empty, the `kind:0` of the pubkey should be used to display mint information (e.g. name, picture, web, LUD16, etc.)
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
### User A recommends some mints
|
||||||
|
User A might be a user of a cashu mint. Using a client, user A publishes an event recommending the cashu mint they use.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"kind": 38000,
|
||||||
|
"tags": [
|
||||||
|
["u", "fed11abc..", "fedimint"],
|
||||||
|
["u", "https://cashu.example.com", "cashu"],
|
||||||
|
["a", "38173:fedimint-pubkey:<d-identifier>", "wss://relay1", "fedimint"],
|
||||||
|
["a", "38172:cashu-mint-pubkey:<d-identifier>", "wss://relay2", "cashu"]
|
||||||
|
],
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### User B finds a mint
|
||||||
|
User B wants to use an ecash wallet, they need to find a mint.
|
||||||
|
|
||||||
|
User B's wallet client queries for `kind:38000` events, looking for recommendations for ecash mints.
|
||||||
|
|
||||||
|
```json
|
||||||
|
["REQ", <id>, [{ "kinds": [38000], "authors": [<user>, <users-contact-list>], "#k": ["38173"] }]]
|
||||||
|
```
|
||||||
|
|
||||||
|
User B, who follows User A, sees that `kind:38000` event and tries to connect to the corresponding mints.
|
||||||
|
|
||||||
|
### Alternative query bypassing `kind:38000`
|
||||||
|
Alternatively, users might choose to query directly for `kind:38173` for an event kind. Clients SHOULD be careful doing this and use spam-prevention mechanisms or querying high-quality restricted relays to avoid directing users to malicious handlers.
|
||||||
|
|
||||||
|
```json
|
||||||
|
["REQ", <id>, [{ "kinds": [38173], "authors": [...] }]]
|
||||||
|
```
|
||||||
2
99.md
2
99.md
@@ -8,7 +8,7 @@ Classified Listings
|
|||||||
|
|
||||||
This NIP defines `kind:30402`: an addressable event to describe classified listings that list any arbitrary product, service, or other thing for sale or offer and includes enough structured metadata to make them useful.
|
This NIP defines `kind:30402`: an addressable event to describe classified listings that list any arbitrary product, service, or other thing for sale or offer and includes enough structured metadata to make them useful.
|
||||||
|
|
||||||
The category of classifieds includes a very broad range of physical goods, services, work opportunities, rentals, free giveaways, personals, etc. and is distinct from the more strictly structured marketplaces defined in [NIP-15](15.md) that often sell many units of specific products through very specific channels.
|
The specification supports a broad range of use cases physical goods, services, work opportunities, rentals, free giveaways, personals, etc. To promote interoperability between clients implementing NIP-99 for e-commerce, you can find the extension proposal [here](https://github.com/GammaMarkets/market-spec/blob/main/spec.md) which standardizes the e-commerce use case while maintaining the specification's lightweight and flexible nature. While [NIP-15](15.md) provides a strictly structured marketplace specification, NIP-99 has emerged as a simpler and more flexible alternative.
|
||||||
|
|
||||||
The structure of these events is very similar to [NIP-23](23.md) long-form content events.
|
The structure of these events is very similar to [NIP-23](23.md) long-form content events.
|
||||||
|
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
|
|||||||
- [NIP-7D: Threads](7D.md)
|
- [NIP-7D: Threads](7D.md)
|
||||||
- [NIP-84: Highlights](84.md)
|
- [NIP-84: Highlights](84.md)
|
||||||
- [NIP-86: Relay Management API](86.md)
|
- [NIP-86: Relay Management API](86.md)
|
||||||
|
- [NIP-87: Ecash Mint Discoverability](87.md)
|
||||||
- [NIP-88: Polls](88.md)
|
- [NIP-88: Polls](88.md)
|
||||||
- [NIP-89: Recommended Application Handlers](89.md)
|
- [NIP-89: Recommended Application Handlers](89.md)
|
||||||
- [NIP-90: Data Vending Machines](90.md)
|
- [NIP-90: Data Vending Machines](90.md)
|
||||||
@@ -107,7 +108,6 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
|
|||||||
- [NIP-C7: Chats](C7.md)
|
- [NIP-C7: Chats](C7.md)
|
||||||
|
|
||||||
## Event Kinds
|
## Event Kinds
|
||||||
|
|
||||||
| kind | description | NIP |
|
| kind | description | NIP |
|
||||||
| ------------- | ------------------------------- | -------------------------------------- |
|
| ------------- | ------------------------------- | -------------------------------------- |
|
||||||
| `0` | User Metadata | [01](01.md) |
|
| `0` | User Metadata | [01](01.md) |
|
||||||
@@ -200,6 +200,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
|
|||||||
| `10166` | Relay Monitor Announcement | [66](66.md) |
|
| `10166` | Relay Monitor Announcement | [66](66.md) |
|
||||||
| `13194` | Wallet Info | [47](47.md) |
|
| `13194` | Wallet Info | [47](47.md) |
|
||||||
| `17375` | Cashu Wallet Event | [60](60.md) |
|
| `17375` | Cashu Wallet Event | [60](60.md) |
|
||||||
|
| `17375` | Ecash Mint Recommendation | [87](87.md) |
|
||||||
| `21000` | Lightning Pub RPC | [Lightning.Pub][lnpub] |
|
| `21000` | Lightning Pub RPC | [Lightning.Pub][lnpub] |
|
||||||
| `22242` | Client Authentication | [42](42.md) |
|
| `22242` | Client Authentication | [42](42.md) |
|
||||||
| `23194` | Wallet Request | [47](47.md) |
|
| `23194` | Wallet Request | [47](47.md) |
|
||||||
@@ -247,9 +248,11 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
|
|||||||
| `31924` | Calendar | [52](52.md) |
|
| `31924` | Calendar | [52](52.md) |
|
||||||
| `31925` | Calendar Event RSVP | [52](52.md) |
|
| `31925` | Calendar Event RSVP | [52](52.md) |
|
||||||
| `31989` | Handler recommendation | [89](89.md) |
|
| `31989` | Handler recommendation | [89](89.md) |
|
||||||
| `31990` | Handler information | [89](89.md) | |
|
| `31990` | Handler information | [89](89.md) |
|
||||||
| `32267` | Software Application | | |
|
| `32267` | Software Application | |
|
||||||
| `34550` | Community Definition | [72](72.md) |
|
| `34550` | Community Definition | [72](72.md) |
|
||||||
|
| `38172` | Cashu Mint Announcement | [87](87.md) |
|
||||||
|
| `38173` | Fedimint Announcement | [87](87.md) |
|
||||||
| `38383` | Peer-to-peer Order events | [69](69.md) |
|
| `38383` | Peer-to-peer Order events | [69](69.md) |
|
||||||
| `39000-9` | Group metadata events | [29](29.md) |
|
| `39000-9` | Group metadata events | [29](29.md) |
|
||||||
| `39089` | Starter packs | [51](51.md) |
|
| `39089` | Starter packs | [51](51.md) |
|
||||||
|
|||||||
Reference in New Issue
Block a user