Simplify timestamp attestations

This commit is contained in:
Jon Staab 2025-02-03 13:35:02 -08:00
parent 497c505879
commit 980902bb2c
2 changed files with 13 additions and 26 deletions

37
03.md
View File

@ -1,16 +1,15 @@
NIP-03 NIP-03
====== ======
Notarizing Events Timestamp Attestations for Events
----------------- ---------------------------------
`draft` `optional` `draft` `optional`
This NIP defines strategies for establishing when an event was first found on the nostr network: This NIP defines strategies for establishing when an event was first found on the nostr network:
- [OpenTimestamps](#opentimestamps) - [OpenTimestamps](#opentimestamps)
- [Relay Notaries](#relay-notaries) - [Attestation Event](#attestation-event)
- [Peer Notaries](#peer-notaries)
# OpenTimestamps # OpenTimestamps
@ -41,35 +40,23 @@ Using [`nak`](https://github.com/fiatjaf/nak), [`jq`](https://jqlang.github.io/j
timestamp validated at block [810391] timestamp validated at block [810391]
``` ```
# Relay Notaries # Attestation Event
Relays MAY notarize events by supporting a `NOTARY` message. Users MAY verify when they first saw an event by publishing a `kind:4341` event.
- First a client sends a `NOTARY` message to the relay with an event id as the first argument. - One or more `stamp` tags MUST be included indicating event ids and timestamps. Event addresses MUST NOT be used.
- Next, the relay MAY respond with a `NOTARY` message with the same event id as the first argument and a timestamp matching when the relay first saw the event as the second argument. - The `content` field MAY provide any human-readable explanation of the event.-
- If the relay has not seen the event it SHOULD respond with `null` in the timestamp field.
Example:
```jsonc
-> ["NOTARY", "e71c6ea722987debdb60f81f9ea4f604b5ac0664120dd64fb9d23abc4ec7c323"]
<- ["NOTARY", "e71c6ea722987debdb60f81f9ea4f604b5ac0664120dd64fb9d23abc4ec7c323", 1738617405]
```
Note that relay-provided notaries provide a weaker guarantee than OTS proofs. Depending on the importance of the verification, multiple relays with a good reputation should be consulted in order to determine a reasonable result.
# Peer Notaries
Users MAY notarize events by publishing a `kind:4341` event. `content` MAY provide any human-readable explanation of the event. One or more `notary` tags MUST be included indicating event ids and timestamps. Event addresses MUST NOT be used.
```jsonc ```jsonc
{ {
"content": "I vaguely remember hearing about this note last year", "content": "I vaguely remember hearing about this note last year",
"tags": [ "tags": [
["alt", "A notary event"], ["alt", "A timestamp attestation event"],
["notary", "e71c6ea722987debdb60f81f9ea4f604b5ac0664120dd64fb9d23abc4ec7c323", 1738617405] ["stamp", "e71c6ea722987debdb60f81f9ea4f604b5ac0664120dd64fb9d23abc4ec7c323", 1738617405]
] ]
} }
``` ```
Note that user-provided notaries provide a weaker guarantee than OTS proofs. Depending on the importance of the verification, multiple users with a good reputation should be consulted in order to determine a reasonable result. Note that user-provided attestations provide a weaker guarantee than OTS proofs. Depending on the importance of the verification, multiple users with a good reputation should be consulted in order to determine a reasonable result.
Relays MAY also provide these attestations by generating and signing them on the fly using the pubkey listed in the relay's [NIP 11](./11.md) document.

View File

@ -150,7 +150,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
| `2003` | Torrent | [35](35.md) | | `2003` | Torrent | [35](35.md) |
| `2004` | Torrent Comment | [35](35.md) | | `2004` | Torrent Comment | [35](35.md) |
| `2022` | Coinjoin Pool | [joinstr][joinstr] | | `2022` | Coinjoin Pool | [joinstr][joinstr] |
| `4341` | Peer notary | [03](03.md) | | `4341` | Timestamp Attestation | [03](03.md) |
| `4550` | Community Post Approval | [72](72.md) | | `4550` | Community Post Approval | [72](72.md) |
| `5000`-`5999` | Job Request | [90](90.md) | | `5000`-`5999` | Job Request | [90](90.md) |
| `6000`-`6999` | Job Result | [90](90.md) | | `6000`-`6999` | Job Result | [90](90.md) |