Het Nostr protocol

Dit is een compleet overzicht over het Nostr protocol met details over verschillende Event types, Kinds en Tags. We leggen ook uit hoe Nostr Implementation Possibilities (NIPs) werken.

§ Nostr op het hoogte niveau

  • Er zijn twee hoofd componenten op het Nostr netwerk: clients & relays.
    • Clients bieden een interface die gebruikt wordt om gegevens te lezen en te schrijven naar relays. In de context van sociale media kun je dit zien als de Twitter webapp of mobiele app. Dat is een client waarmee je gegevens kunt lezen van en schrijven naar de gecentraliseerde database van Twitter.
    • Relays zijn net databases (hoewel ze veel meer doen dan alleen gegevens opslaan). Ze ontvangen gegevens van clients, slaan die op in een database en sturen deze vervolgens weer door naar andere clients die erom vragen om te tonen aan hun gebruikers.
  • Elke gebruiker wordt geïdentificeerd door een publieke sleutel. Elke event (bv. een bericht dat je post, een update van je volglijst, etc.) Clients valideren deze handtekeningen met jouw publieke sleutel om er zeker van te zijn dat ze correct zijn.
  • Client halen gegevens op van relays en publiceren gegevens naar reayls. De srelays worden bijna altijd gekozen door de gebruiker. Relays hoeven niet met elkaar te praten, maar dat zou in de toekomst wel kunnen.
  • Als je bijvoorbeeld je profiel bijwerkt in een client, verstuur je een event van het type (kind) 0 naar de relays die je hebt ingesteld. De relays slaan die event dan op.
  • Bij het opstarten vraagt je client gegevens op van de relays. Dit kan worden gefilterd om alleen events weer te geven van gebruikers die je volgt of je kunt alles van iedereen opvragen, waarna de client je die gegevens toont.
  • Er zijn veel verschillende soorten events. Events kunnen allerlei soorten gestructureerde gegevens bevatten en de meest gebruikte structuren vind je terug in zogenaamde Nostr Implementation Possibilities (NIP’s - een protocol standaard waar iedereen zich aan houdt) zodat alle clients en relays ze naadloos kunnen verwerken. Hierdoor worden alle gegevens interoperabel.
  • De gegevens die je op Nostr kunt zien, zijn volledig afhankelijk van de relays waarmee je verbinding wilt maken. Zie het netwerkdiagram hieronder voor meer informatie.

Netwerk diagram

Nostr network diagram

Je kunt in het bovenstaande diagram zien dat we 3 relays en 3 gebruikers (clients) hebben. Elk van de gebruikers maakt verbinding met Nostr met een andere client (en op een ander platform).

Gegeven de reads en writes in het diagram:

  • Bob kan alle berichten van Alice zien, maar ziet niets van Mary (en weet niet eens dat ze bestaat)
  • Alice kan alle berichten van Bob zien, maar ziet niets van Mary (en weet niet eens dat ze bestaat)
  • Mary kan alle berichten van Bob en Alice zien. Dit komt omdat ze, terwijl ze alleen naar relay 3 schrijft, leest vanaf relay 2, waar Bob en Alice hun berichten schrijven.

Dit is een erg vereenvoudigde weergave, maar je kunt al zien dat de keuze met welke relays je verbinding wilt maken een grote invloed kan hebben op wie en wat je te zien krijgt als je Nostr gebruikt.

§ Events

Events zijn het enige objecttype op het Nostr netwerk. Elke event heeft een kind, waarmee wordt aangegeven om wat voor soort event het gaat (wat voor soort actie een gebruiker zou kunnen ondernemen of berichten die zouden kunnen worden ontvangen).

Zo ziet een kind 1 event eruit (kind 1 is een korte tekstnotities - vergelijkbaar met een Twitter bericht)

{
    "id": "4376c65d2f232afbe9b882a35baa4f6fe8667c4e684749af565f981833ed6a65",
    "pubkey": "6e468422dfb74a5738702a8823b9b28168abab8655faacb6853cd0ee15deee93",
    "created_at": 1673347337,
    "kind": 1,
    "tags": [
        ["e", "3da979448d9ba263864c4d6f14984c423a3838364ec255f03c7904b1ae77f206"],
        ["p", "bf2376e17ba4ec269d10fcc996a4746b451152be9031fa48e74553dde5526bce"]
    ],
    "content": "Walled gardens became prisons, and nostr is the first step towards tearing down the prison walls.",
    "sig": "908a15e46fb4d8675bab026fc230a0e3542bfade63da02d542fb78b2a8513fcd0092619a2c8c1221e581946e0191f2af505dfdf8657a414dbca329186f009262"
}
  • Het id veld toont de unieke ID van de event
  • Het pubkey veld toont de public key van de afzender
  • Het created_at veld toont wanneer het event is gepubliceerd
  • Het kind veld toont om wat voor soort event het gaat
  • Het tags veld bevat tags bij het evenement. Deze worden gebruikt voor het maken van links, het toevoegen van media en het vermelden van andere gebruikers of evenementen.
  • Het content veld bevat de content. In dit geval een korte tekst notitie.
  • Het sig veld is de handtekening die clients gebruiken om te verifiëren dat de gebruiker met deze pubkey dit evenement daadwerkelijk op de gespecificeerde datum heeft verzonden.

§ Event Kinds

Dit is een lijst van huidige soorten events. De meest actuele lijst is altijd te vinden op de Nostr NIPs repository en wordt wekelijks bijgewerkt.

kind description NIP
0 Metadata 1
1 Short Text Note 1
2 Recommend Relay 1
3 Contacts 2
4 Encrypted Direct Messages 4
5 Event Deletion 9
6 Reposts 18
7 Reaction 25
8 Badge Award 58
40 Channel Creation 28
41 Channel Metadata 28
42 Channel Message 28
43 Channel Hide Message 28
44 Channel Mute User 28
1063 File Metadata 94
1984 Reporting 56
9734 Zap Request 57
9735 Zap 57
10000 Mute List 51
10001 Pin List 51
10002 Relay List Metadata 65
13194 Wallet Info 47
22242 Client Authentication 42
23194 Wallet Request 47
23195 Wallet Response 47
24133 Nostr Connect 46
30000 Categorized People List 51
30001 Categorized Bookmark List 51
30008 Profile Badges 58
30009 Badge Definition 58
30017 Create or update a stall 15
30018 Create or update a product 15
30023 Long-form Content 23
30078 Application-specific Data 78
30402 Classifieds 99
31989 Handler recommendation 89
31990 Handler information 89

§ Standardized Tags

name value other parameters NIP
e event id (hex) relay URL, marker 1, 10
p pubkey (hex) relay URL 1
a coordinates to an event relay URL 33, 23
r a reference (URL, etc) 12
t hashtag 12
g geohash 12
nonce random 13
subject subject 14
d identifier 33
expiration unix timestamp (string) 40

§ NIPs

Een Nostr Implementation Possibilty, kortweg NIP, bestaat om te documenteren wat geïmplementeerd MOET worden, wat ZOU MOETEN worden en wat geïmplementeerd KUNNEN worden door relay- en clientsoftware die compatibel is met Nostr. NIP’s bevatten de documentatie die beschrijft hoe het Nostr-protocol werkt.

Waarom zou ik aandacht moeten geven aan NIPs?

Nostr is gedecentraliseerd en geen eigendom van een gecentraliseerde dienst (zoals Twitter). Dit betekent dat de richting van het protocol aan ons allemaal is! We kunnen veranderingen voorstellen en bepleiten en feedback geven op ideeën van anderen.

Door actief deel te nemen in de community heb je inspraak over de richting waar het netwerk naartoe beweegt. NIP’s gepubliceerd in de main repository zijn al goedgekeurd. Nieuwe ideeën toevoegen gaan via Pull Requests op die repo.

Waar kan NIPs vinden?

Je kunt alle huidige NIP’s bekijken in de

Nostr NIP repo.