diff options
| -rw-r--r-- | 01.md | 2 | ||||
| -rw-r--r-- | 56.md | 27 | ||||
| -rw-r--r-- | 60.md | 27 | ||||
| -rw-r--r-- | 92.md | 4 | ||||
| -rw-r--r-- | BREAKING.md | 32 | ||||
| -rw-r--r-- | README.md | 7 |
6 files changed, 61 insertions, 38 deletions
| @@ -89,7 +89,7 @@ Kinds specify how clients should interpret the meaning of each event and the oth | |||
| 89 | 89 | ||
| 90 | This NIP defines one basic kind: | 90 | This NIP defines one basic kind: |
| 91 | 91 | ||
| 92 | - `0`: **user metadata**: the `content` is set to a stringified JSON object `{name: <username>, about: <string>, picture: <url, string>}` describing the user who created the event. [Extra metadata fields](24.md#kind-0) may be set. A relay may delete older events once it gets a new one for the same pubkey. | 92 | - `0`: **user metadata**: the `content` is set to a stringified JSON object `{name: <nickname or full name>, about: <short bio>, picture: <url of the image>}` describing the user who created the event. [Extra metadata fields](24.md#kind-0) may be set. A relay may delete older events once it gets a new one for the same pubkey. |
| 93 | 93 | ||
| 94 | And also a convention for kind ranges that allow for easier experimentation and flexibility of relay implementation: | 94 | And also a convention for kind ranges that allow for easier experimentation and flexibility of relay implementation: |
| 95 | 95 | ||
| @@ -22,7 +22,7 @@ are reporting. | |||
| 22 | 22 | ||
| 23 | If reporting a note, an `e` tag MUST also be included referencing the note id. | 23 | If reporting a note, an `e` tag MUST also be included referencing the note id. |
| 24 | 24 | ||
| 25 | A `report type` string MUST be included as the 3rd entry to the `e` or `p` tag | 25 | A `report type` string MUST be included as the 3rd entry to the `e`, `p` or `x` tag |
| 26 | being reported, which consists of the following report types: | 26 | being reported, which consists of the following report types: |
| 27 | 27 | ||
| 28 | - `nudity` - depictions of nudity, porn, etc. | 28 | - `nudity` - depictions of nudity, porn, etc. |
| @@ -33,7 +33,9 @@ being reported, which consists of the following report types: | |||
| 33 | - `impersonation` - someone pretending to be someone else | 33 | - `impersonation` - someone pretending to be someone else |
| 34 | - `other` - for reports that don't fit in the above categories | 34 | - `other` - for reports that don't fit in the above categories |
| 35 | 35 | ||
| 36 | Some report tags only make sense for profile reports, such as `impersonation` | 36 | Some report tags only make sense for profile reports, such as `impersonation`. |
| 37 | |||
| 38 | - `x` tags SHOULD be info hash of a blob which is intended to be report. when the `x` tag is represented client MUST include an `e` tag which is the id of the event that contains the mentioned blob. also, additionally these events can contain a `server` tag to point to media servers which may contain the mentioned media. | ||
| 37 | 39 | ||
| 38 | `l` and `L` tags MAY be also be used as defined in [NIP-32](32.md) to support | 40 | `l` and `L` tags MAY be also be used as defined in [NIP-32](32.md) to support |
| 39 | further qualification and querying. | 41 | further qualification and querying. |
| @@ -45,7 +47,7 @@ Example events | |||
| 45 | { | 47 | { |
| 46 | "kind": 1984, | 48 | "kind": 1984, |
| 47 | "tags": [ | 49 | "tags": [ |
| 48 | ["p", <pubkey>, "nudity"], | 50 | ["p", "<pubkey>", "nudity"], |
| 49 | ["L", "social.nos.ontology"], | 51 | ["L", "social.nos.ontology"], |
| 50 | ["l", "NS-nud", "social.nos.ontology"] | 52 | ["l", "NS-nud", "social.nos.ontology"] |
| 51 | ], | 53 | ], |
| @@ -58,8 +60,8 @@ Example events | |||
| 58 | { | 60 | { |
| 59 | "kind": 1984, | 61 | "kind": 1984, |
| 60 | "tags": [ | 62 | "tags": [ |
| 61 | ["e", <eventId>, "illegal"], | 63 | ["e", "<eventId>", "illegal"], |
| 62 | ["p", <pubkey>] | 64 | ["p", "<pubkey>"] |
| 63 | ], | 65 | ], |
| 64 | "content": "He's insulting the king!", | 66 | "content": "He's insulting the king!", |
| 65 | // other fields... | 67 | // other fields... |
| @@ -70,13 +72,26 @@ Example events | |||
| 70 | { | 72 | { |
| 71 | "kind": 1984, | 73 | "kind": 1984, |
| 72 | "tags": [ | 74 | "tags": [ |
| 73 | ["p", <impersonator pubkey>, "impersonation"] | 75 | ["p", "<impersonator pubkey>", "impersonation"] |
| 74 | ], | 76 | ], |
| 75 | "content": "Profile is impersonating nostr:<victim bech32 pubkey>", | 77 | "content": "Profile is impersonating nostr:<victim bech32 pubkey>", |
| 76 | // other fields... | 78 | // other fields... |
| 77 | } | 79 | } |
| 78 | ``` | 80 | ``` |
| 79 | 81 | ||
| 82 | ```jsonc | ||
| 83 | { | ||
| 84 | "kind": 1984, | ||
| 85 | "tags": [ | ||
| 86 | ["x", "<blob hash>", "malware"], | ||
| 87 | ["e", "<event id which contains the blob on x tag>", "malware"], | ||
| 88 | ["server", "https://you-may-find-the-blob-here.com/path-to-url.ext"] | ||
| 89 | ], | ||
| 90 | "content": "This file contains malware software in it.", | ||
| 91 | // other fields... | ||
| 92 | } | ||
| 93 | ``` | ||
| 94 | |||
| 80 | Client behavior | 95 | Client behavior |
| 81 | --------------- | 96 | --------------- |
| 82 | 97 | ||
| @@ -39,7 +39,7 @@ This NIP doesn't deal with users' *receiving* money from someone else, it's just | |||
| 39 | } | 39 | } |
| 40 | ``` | 40 | ``` |
| 41 | 41 | ||
| 42 | The wallet event is a parameterized replaceable event `kind:37375`. | 42 | The wallet event is an addressable event `kind:37375`. |
| 43 | 43 | ||
| 44 | Tags: | 44 | Tags: |
| 45 | * `d` - wallet ID. | 45 | * `d` - wallet ID. |
| @@ -57,7 +57,7 @@ Any tag, other than the `d` tag, can be [[NIP-44]] encrypted into the `.content` | |||
| 57 | Due to addressable event being hard to delete, if a user wants to delete a wallet, they should empty the event and keep just the `d` identifier and add a `deleted` tag. | 57 | Due to addressable event being hard to delete, if a user wants to delete a wallet, they should empty the event and keep just the `d` identifier and add a `deleted` tag. |
| 58 | 58 | ||
| 59 | ## Token Event | 59 | ## Token Event |
| 60 | Token events are used to record the unspent proofs that come from the mint. | 60 | Token events are used to record unspent proofs. |
| 61 | 61 | ||
| 62 | There can be multiple `kind:7375` events for the same mint, and multiple proofs inside each `kind:7375` event. | 62 | There can be multiple `kind:7375` events for the same mint, and multiple proofs inside each `kind:7375` event. |
| 63 | 63 | ||
| @@ -73,7 +73,9 @@ There can be multiple `kind:7375` events for the same mint, and multiple proofs | |||
| 73 | "secret": "z+zyxAVLRqN9lEjxuNPSyRJzEstbl69Jc1vtimvtkPg=", | 73 | "secret": "z+zyxAVLRqN9lEjxuNPSyRJzEstbl69Jc1vtimvtkPg=", |
| 74 | "C": "0241d98a8197ef238a192d47edf191a9de78b657308937b4f7dd0aa53beae72c46" | 74 | "C": "0241d98a8197ef238a192d47edf191a9de78b657308937b4f7dd0aa53beae72c46" |
| 75 | } | 75 | } |
| 76 | ] | 76 | ], |
| 77 | // tokens that were destroyed in the creation of this token | ||
| 78 | "del": [ "token-id-1" ] | ||
| 77 | }), | 79 | }), |
| 78 | "tags": [ | 80 | "tags": [ |
| 79 | [ "a", "37375:<pubkey>:my-wallet" ] | 81 | [ "a", "37375:<pubkey>:my-wallet" ] |
| @@ -81,8 +83,11 @@ There can be multiple `kind:7375` events for the same mint, and multiple proofs | |||
| 81 | } | 83 | } |
| 82 | ``` | 84 | ``` |
| 83 | 85 | ||
| 84 | `.content` is a [[NIP-44]] encrypted payload storing the mint and the unencoded proofs. | 86 | * `a` an optional tag linking the token to a specific wallet. |
| 85 | * `a` an optional tag linking the token to a specific wallet. | 87 | * `.content` is a [[NIP-44]] encrypted payload: |
| 88 | * `mint`: The mint the proofs belong to. | ||
| 89 | * `proofs`: unecoded proofs | ||
| 90 | * `del`: token-ids that were destroyed by the creation of this token. This assists with state transitions. | ||
| 86 | 91 | ||
| 87 | ### Spending proofs | 92 | ### Spending proofs |
| 88 | When one or more proofs of a token are spent, the token event should be [[NIP-09]]-deleted and, if some proofs are unspent from the same token event, a new token event should be created rolling over the unspent proofs and adding any change outputs to the new token event. | 93 | When one or more proofs of a token are spent, the token event should be [[NIP-09]]-deleted and, if some proofs are unspent from the same token event, a new token event should be created rolling over the unspent proofs and adding any change outputs to the new token event. |
| @@ -96,7 +101,7 @@ Clients SHOULD publish `kind:7376` events to create a transaction history when t | |||
| 96 | "content": nip44_encrypt([ | 101 | "content": nip44_encrypt([ |
| 97 | [ "direction", "in" ], // in = received, out = sent | 102 | [ "direction", "in" ], // in = received, out = sent |
| 98 | [ "amount", "1", "sat" ], | 103 | [ "amount", "1", "sat" ], |
| 99 | [ "e", "<event-id-of-spent-token>", "<relay-hint>", "created" ], | 104 | [ "e", "<event-id-of-created-token>", "<relay-hint>", "created" ], |
| 100 | ]), | 105 | ]), |
| 101 | "tags": [ | 106 | "tags": [ |
| 102 | [ "a", "37375:<pubkey>:my-wallet" ], | 107 | [ "a", "37375:<pubkey>:my-wallet" ], |
| @@ -129,7 +134,7 @@ While the client is fetching (and perhaps validating) proofs it can use the opti | |||
| 129 | 134 | ||
| 130 | ## Spending token | 135 | ## Spending token |
| 131 | If Alice spends 4 sats from this token event | 136 | If Alice spends 4 sats from this token event |
| 132 | ```jsonconc | 137 | ```jsonc |
| 133 | { | 138 | { |
| 134 | "kind": 7375, | 139 | "kind": 7375, |
| 135 | "id": "event-id-1", | 140 | "id": "event-id-1", |
| @@ -150,7 +155,7 @@ If Alice spends 4 sats from this token event | |||
| 150 | 155 | ||
| 151 | Her client: | 156 | Her client: |
| 152 | * MUST roll over the unspent proofs: | 157 | * MUST roll over the unspent proofs: |
| 153 | ```jsonconc | 158 | ```jsonc |
| 154 | { | 159 | { |
| 155 | "kind": 7375, | 160 | "kind": 7375, |
| 156 | "id": "event-id-2", | 161 | "id": "event-id-2", |
| @@ -160,7 +165,8 @@ Her client: | |||
| 160 | { "id": "1", "amount": 1 }, | 165 | { "id": "1", "amount": 1 }, |
| 161 | { "id": "2", "amount": 2 }, | 166 | { "id": "2", "amount": 2 }, |
| 162 | { "id": "4", "amount": 8 }, | 167 | { "id": "4", "amount": 8 }, |
| 163 | ] | 168 | ], |
| 169 | "del": [ "event-id-1" ] | ||
| 164 | }), | 170 | }), |
| 165 | "tags": [ | 171 | "tags": [ |
| 166 | [ "a", "37375:<pubkey>:my-wallet" ] | 172 | [ "a", "37375:<pubkey>:my-wallet" ] |
| @@ -168,8 +174,9 @@ Her client: | |||
| 168 | } | 174 | } |
| 169 | ``` | 175 | ``` |
| 170 | * MUST delete event `event-id-1` | 176 | * MUST delete event `event-id-1` |
| 177 | * SHOULD add the `event-id-1` to the `del` array of deleted token-ids. | ||
| 171 | * SHOULD create a `kind:7376` event to record the spend | 178 | * SHOULD create a `kind:7376` event to record the spend |
| 172 | ```jsonconc | 179 | ```jsonc |
| 173 | { | 180 | { |
| 174 | "kind": 7376, | 181 | "kind": 7376, |
| 175 | "content": nip44_encrypt([ | 182 | "content": nip44_encrypt([ |
| @@ -6,10 +6,10 @@ Media Attachments | |||
| 6 | 6 | ||
| 7 | Media attachments (images, videos, and other files) may be added to events by including a URL in the event content, along with a matching `imeta` tag. | 7 | Media attachments (images, videos, and other files) may be added to events by including a URL in the event content, along with a matching `imeta` tag. |
| 8 | 8 | ||
| 9 | `imeta` ("inline metadata") tags add information about media URLs in the event's content. Each `imeta` tag SHOULD match a URL in the event content. Clients may replace imeta URLs with rich previews. | 9 | `imeta` ("inline metadata") tags MAY add information about media URLs in the event's content. Each `imeta` tag SHOULD match a URL in the event content. Clients MAY replace imeta URLs with rich previews. |
| 10 | 10 | ||
| 11 | The `imeta` tag is variadic, and each entry is a space-delimited key/value pair. | 11 | The `imeta` tag is variadic, and each entry is a space-delimited key/value pair. |
| 12 | Each `imeta` tag MUST have a `url`, and at least one other field. `imeta` may include | 12 | Each `imeta` tag MUST have a `url`, and at least one other field. `imeta` MAY include |
| 13 | any field specified by [NIP 94](./94.md). There SHOULD be only one `imeta` tag per URL. | 13 | any field specified by [NIP 94](./94.md). There SHOULD be only one `imeta` tag per URL. |
| 14 | 14 | ||
| 15 | ## Example | 15 | ## Example |
diff --git a/BREAKING.md b/BREAKING.md index 77900d3..66f1a9f 100644 --- a/BREAKING.md +++ b/BREAKING.md | |||
| @@ -21,37 +21,37 @@ reverse chronological order. | |||
| 21 | | 2024-07-23 | [0227a2cd](https://github.com/nostr-protocol/nips/commit/0227a2cd) | [01](01.md) | events should be sorted by id after created_at | | 21 | | 2024-07-23 | [0227a2cd](https://github.com/nostr-protocol/nips/commit/0227a2cd) | [01](01.md) | events should be sorted by id after created_at | |
| 22 | | 2024-06-06 | [58e94b20](https://github.com/nostr-protocol/nips/commit/58e94b20) | [25](25.md) | [8073c848](https://github.com/nostr-protocol/nips/commit/8073c848) was reverted | | 22 | | 2024-06-06 | [58e94b20](https://github.com/nostr-protocol/nips/commit/58e94b20) | [25](25.md) | [8073c848](https://github.com/nostr-protocol/nips/commit/8073c848) was reverted | |
| 23 | | 2024-06-06 | [a6dfc7b5](https://github.com/nostr-protocol/nips/commit/a6dfc7b5) | [55](55.md) | NIP number was changed | | 23 | | 2024-06-06 | [a6dfc7b5](https://github.com/nostr-protocol/nips/commit/a6dfc7b5) | [55](55.md) | NIP number was changed | |
| 24 | | 2024-05-25 | [5d1d1c17](https://github.com/nostr-protocol/nips/commit/5d1d1c17) | [71](71.md) | 'aes-256-gcm' tag was removed | | 24 | | 2024-05-25 | [5d1d1c17](https://github.com/nostr-protocol/nips/commit/5d1d1c17) | [71](71.md) | `aes-256-gcm` tag was removed | |
| 25 | | 2024-05-07 | [8073c848](https://github.com/nostr-protocol/nips/commit/8073c848) | [25](25.md) | e-tags were changed to not include entire thread | | 25 | | 2024-05-07 | [8073c848](https://github.com/nostr-protocol/nips/commit/8073c848) | [25](25.md) | e-tags were changed to not include entire thread | |
| 26 | | 2024-04-30 | [bad88262](https://github.com/nostr-protocol/nips/commit/bad88262) | [34](34.md) | 'earliest-unique-commit' tag was removed (use 'r' tag instead) | | 26 | | 2024-04-30 | [bad88262](https://github.com/nostr-protocol/nips/commit/bad88262) | [34](34.md) | `earliest-unique-commit` tag was removed (use `r` tag instead) | |
| 27 | | 2024-02-25 | [4a171cb0](https://github.com/nostr-protocol/nips/commit/4a171cb0) | [18](18.md) | quote repost should use `q` tag | | 27 | | 2024-02-25 | [4a171cb0](https://github.com/nostr-protocol/nips/commit/4a171cb0) | [18](18.md) | quote repost should use `q` tag | |
| 28 | | 2024-02-21 | [c6cd655c](https://github.com/nostr-protocol/nips/commit/c6cd655c) | [46](46.md) | Params were stringified | | 28 | | 2024-02-21 | [c6cd655c](https://github.com/nostr-protocol/nips/commit/c6cd655c) | [46](46.md) | Params were stringified | |
| 29 | | 2024-02-16 | [cbec02ab](https://github.com/nostr-protocol/nips/commit/cbec02ab) | [49](49.md) | Password first normalized to NFKC | | 29 | | 2024-02-16 | [cbec02ab](https://github.com/nostr-protocol/nips/commit/cbec02ab) | [49](49.md) | Password first normalized to NFKC | |
| 30 | | 2024-02-15 | [afbb8dd0](https://github.com/nostr-protocol/nips/commit/afbb8dd0) | [39](39.md) | PGP identity was removed | | 30 | | 2024-02-15 | [afbb8dd0](https://github.com/nostr-protocol/nips/commit/afbb8dd0) | [39](39.md) | PGP identity was removed | |
| 31 | | 2024-02-07 | [d3dad114](https://github.com/nostr-protocol/nips/commit/d3dad114) | [46](46.md) | Connection token format was changed | | 31 | | 2024-02-07 | [d3dad114](https://github.com/nostr-protocol/nips/commit/d3dad114) | [46](46.md) | Connection token format was changed | |
| 32 | | 2024-01-30 | [1a2b21b6](https://github.com/nostr-protocol/nips/commit/1a2b21b6) | [59](59.md) | 'p' tag became optional | | 32 | | 2024-01-30 | [1a2b21b6](https://github.com/nostr-protocol/nips/commit/1a2b21b6) | [59](59.md) | `p` tag became optional | |
| 33 | | 2023-01-27 | [c2f34817](https://github.com/nostr-protocol/nips/commit/c2f34817) | [47](47.md) | optional expiration tag should be honored | | 33 | | 2023-01-27 | [c2f34817](https://github.com/nostr-protocol/nips/commit/c2f34817) | [47](47.md) | optional expiration tag should be honored | |
| 34 | | 2024-01-10 | [3d8652ea](https://github.com/nostr-protocol/nips/commit/3d8652ea) | [02](02.md), [51](51.md) | list entries should be chronological | | 34 | | 2024-01-10 | [3d8652ea](https://github.com/nostr-protocol/nips/commit/3d8652ea) | [02](02.md), [51](51.md) | list entries should be chronological | |
| 35 | | 2023-12-30 | [29869821](https://github.com/nostr-protocol/nips/commit/29869821) | [52](52.md) | 'name' tag was removed (use 'title' tag instead) | | 35 | | 2023-12-30 | [29869821](https://github.com/nostr-protocol/nips/commit/29869821) | [52](52.md) | `name` tag was removed (use `title` tag instead) | |
| 36 | | 2023-12-27 | [17c67ef5](https://github.com/nostr-protocol/nips/commit/17c67ef5) | [94](94.md) | 'aes-256-gcm' tag was removed | | 36 | | 2023-12-27 | [17c67ef5](https://github.com/nostr-protocol/nips/commit/17c67ef5) | [94](94.md) | `aes-256-gcm` tag was removed | |
| 37 | | 2023-12-03 | [0ba45895](https://github.com/nostr-protocol/nips/commit/0ba45895) | [01](01.md) | WebSocket status code `4000` was replaced by 'CLOSED' message | | 37 | | 2023-12-03 | [0ba45895](https://github.com/nostr-protocol/nips/commit/0ba45895) | [01](01.md) | WebSocket status code `4000` was replaced by `CLOSED` message | |
| 38 | | 2023-11-28 | [6de35f9e](https://github.com/nostr-protocol/nips/commit/6de35f9e) | [89](89.md) | 'client' tag value was changed | | 38 | | 2023-11-28 | [6de35f9e](https://github.com/nostr-protocol/nips/commit/6de35f9e) | [89](89.md) | `client` tag value was changed | |
| 39 | | 2023-11-20 | [7822a8b1](https://github.com/nostr-protocol/nips/commit/7822a8b1) | [51](51.md) | `kind: 30001` was deprecated | | 39 | | 2023-11-20 | [7822a8b1](https://github.com/nostr-protocol/nips/commit/7822a8b1) | [51](51.md) | `kind: 30001` was deprecated | |
| 40 | | 2023-11-20 | [7822a8b1](https://github.com/nostr-protocol/nips/commit/7822a8b1) | [51](51.md) | the meaning of `kind: 30000` was changed | | 40 | | 2023-11-20 | [7822a8b1](https://github.com/nostr-protocol/nips/commit/7822a8b1) | [51](51.md) | the meaning of `kind: 30000` was changed | |
| 41 | | 2023-11-11 | [cbdca1e9](https://github.com/nostr-protocol/nips/commit/cbdca1e9) | [84](84.md) | 'range' tag was removed | | 41 | | 2023-11-11 | [cbdca1e9](https://github.com/nostr-protocol/nips/commit/cbdca1e9) | [84](84.md) | `range` tag was removed | |
| 42 | | 2023-11-10 | [c945d8bd](https://github.com/nostr-protocol/nips/commit/c945d8bd) | [32](32.md) | 'l' tag annotations was removed | | 42 | | 2023-11-10 | [c945d8bd](https://github.com/nostr-protocol/nips/commit/c945d8bd) | [32](32.md) | `l` tag annotations was removed | |
| 43 | | 2023-11-07 | [108b7f16](https://github.com/nostr-protocol/nips/commit/108b7f16) | [01](01.md) | 'OK' message must have 4 items | | 43 | | 2023-11-07 | [108b7f16](https://github.com/nostr-protocol/nips/commit/108b7f16) | [01](01.md) | `OK` message must have 4 items | |
| 44 | | 2023-10-17 | [cf672b76](https://github.com/nostr-protocol/nips/commit/cf672b76) | [03](03.md) | 'block' tag was removed | | 44 | | 2023-10-17 | [cf672b76](https://github.com/nostr-protocol/nips/commit/cf672b76) | [03](03.md) | `block` tag was removed | |
| 45 | | 2023-09-29 | [7dc6385f](https://github.com/nostr-protocol/nips/commit/7dc6385f) | [57](57.md) | optional 'a' tag was included in `zap receipt` | | 45 | | 2023-09-29 | [7dc6385f](https://github.com/nostr-protocol/nips/commit/7dc6385f) | [57](57.md) | optional `a` tag was included in `zap receipt` | |
| 46 | | 2023-08-21 | [89915e02](https://github.com/nostr-protocol/nips/commit/89915e02) | [11](11.md) | 'min_prefix' was removed | | 46 | | 2023-08-21 | [89915e02](https://github.com/nostr-protocol/nips/commit/89915e02) | [11](11.md) | `min_prefix` was removed | |
| 47 | | 2023-08-20 | [37c4375e](https://github.com/nostr-protocol/nips/commit/37c4375e) | [01](01.md) | replaceable events with same timestamp should be retained event with lowest id | | 47 | | 2023-08-20 | [37c4375e](https://github.com/nostr-protocol/nips/commit/37c4375e) | [01](01.md) | replaceable events with same timestamp should be retained event with lowest id | |
| 48 | | 2023-08-15 | [88ee873c](https://github.com/nostr-protocol/nips/commit/88ee873c) | [15](15.md) | 'countries' tag was renamed to 'regions' | | 48 | | 2023-08-15 | [88ee873c](https://github.com/nostr-protocol/nips/commit/88ee873c) | [15](15.md) | `countries` tag was renamed to `regions` | |
| 49 | | 2023-08-14 | [72bb8a12](https://github.com/nostr-protocol/nips/commit/72bb8a12) | [12](12.md), [16](16.md), [20](20.md), [33](33.md) | NIP-12, 16, 20 and 33 were merged into NIP-01 | | 49 | | 2023-08-14 | [72bb8a12](https://github.com/nostr-protocol/nips/commit/72bb8a12) | [12](12.md), [16](16.md), [20](20.md), [33](33.md) | NIP-12, 16, 20 and 33 were merged into NIP-01 | |
| 50 | | 2023-08-11 | [d87f8617](https://github.com/nostr-protocol/nips/commit/d87f8617) | [25](25.md) | empty `content` should be considered as "+" | | 50 | | 2023-08-11 | [d87f8617](https://github.com/nostr-protocol/nips/commit/d87f8617) | [25](25.md) | empty `content` should be considered as "+" | |
| 51 | | 2023-08-01 | [5d63b157](https://github.com/nostr-protocol/nips/commit/5d63b157) | [57](57.md) | 'zap' tag was changed | | 51 | | 2023-08-01 | [5d63b157](https://github.com/nostr-protocol/nips/commit/5d63b157) | [57](57.md) | `zap` tag was changed | |
| 52 | | 2023-07-15 | [d1814405](https://github.com/nostr-protocol/nips/commit/d1814405) | [01](01.md) | `since` and `until` filters should be `since <= created_at <= until` | | 52 | | 2023-07-15 | [d1814405](https://github.com/nostr-protocol/nips/commit/d1814405) | [01](01.md) | `since` and `until` filters should be `since <= created_at <= until` | |
| 53 | | 2023-07-12 | [a1cd2bd8](https://github.com/nostr-protocol/nips/commit/a1cd2bd8) | [25](25.md) | custom emoji was supported | | 53 | | 2023-07-12 | [a1cd2bd8](https://github.com/nostr-protocol/nips/commit/a1cd2bd8) | [25](25.md) | custom emoji was supported | |
| 54 | | 2023-06-18 | [83cbd3e1](https://github.com/nostr-protocol/nips/commit/83cbd3e1) | [11](11.md) | 'image' was renamed to 'icon' | | 54 | | 2023-06-18 | [83cbd3e1](https://github.com/nostr-protocol/nips/commit/83cbd3e1) | [11](11.md) | `image` was renamed to `icon` | |
| 55 | | 2023-04-13 | [bf0a0da6](https://github.com/nostr-protocol/nips/commit/bf0a0da6) | [15](15.md) | different NIP was re-added as NIP-15 | | 55 | | 2023-04-13 | [bf0a0da6](https://github.com/nostr-protocol/nips/commit/bf0a0da6) | [15](15.md) | different NIP was re-added as NIP-15 | |
| 56 | | 2023-04-09 | [fb5b7c73](https://github.com/nostr-protocol/nips/commit/fb5b7c73) | [15](15.md) | NIP-15 was merged into NIP-01 | | 56 | | 2023-04-09 | [fb5b7c73](https://github.com/nostr-protocol/nips/commit/fb5b7c73) | [15](15.md) | NIP-15 was merged into NIP-01 | |
| 57 | | 2023-03-29 | [599e1313](https://github.com/nostr-protocol/nips/commit/599e1313) | [18](18.md) | NIP-18 was bring back | | 57 | | 2023-03-29 | [599e1313](https://github.com/nostr-protocol/nips/commit/599e1313) | [18](18.md) | NIP-18 was bring back | |
| @@ -122,6 +122,8 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | |||
| 122 | | `16` | Generic Repost | [18](18.md) | | 122 | | `16` | Generic Repost | [18](18.md) | |
| 123 | | `17` | Reaction to a website | [25](25.md) | | 123 | | `17` | Reaction to a website | [25](25.md) | |
| 124 | | `20` | Picture | [68](68.md) | | 124 | | `20` | Picture | [68](68.md) | |
| 125 | | `21` | Video Event | [71](71.md) | | ||
| 126 | | `22` | Short-form Portrait Video Event | [71](71.md) | | ||
| 125 | | `40` | Channel Creation | [28](28.md) | | 127 | | `40` | Channel Creation | [28](28.md) | |
| 126 | | `41` | Channel Metadata | [28](28.md) | | 128 | | `41` | Channel Metadata | [28](28.md) | |
| 127 | | `42` | Channel Message | [28](28.md) | | 129 | | `42` | Channel Message | [28](28.md) | |
| @@ -227,9 +229,8 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | |||
| 227 | | `31924` | Calendar | [52](52.md) | | 229 | | `31924` | Calendar | [52](52.md) | |
| 228 | | `31925` | Calendar Event RSVP | [52](52.md) | | 230 | | `31925` | Calendar Event RSVP | [52](52.md) | |
| 229 | | `31989` | Handler recommendation | [89](89.md) | | 231 | | `31989` | Handler recommendation | [89](89.md) | |
| 230 | | `31990` | Handler information | [89](89.md) | | 232 | | `31990` | Handler information | [89](89.md) | | |
| 231 | | `21` | Video Event | [71](71.md) | | 233 | | `32267` | Software Application | | | |
| 232 | | `22` | Short-form Portrait Video Event | [71](71.md) | | ||
| 233 | | `34550` | Community Definition | [72](72.md) | | 234 | | `34550` | Community Definition | [72](72.md) | |
| 234 | | `37375` | Cashu Wallet Event | [60](60.md) | | 235 | | `37375` | Cashu Wallet Event | [60](60.md) | |
| 235 | | `38383` | Peer-to-peer Order events | [69](69.md) | | 236 | | `38383` | Peer-to-peer Order events | [69](69.md) | |