Welkom bij Hello Nostr Docs
Deze documentatie zal je begeleiden bij het begrijpen van hoe Nostr werkt en hoe je je eerste “Hello Nostr”-bericht verzendt met HTML, CSS en JavaScript.
Je kunt de voorbeeldcode gebruiken van GitLab of een live demonstratie uitproberen via Hello Nostr Demo.
Introductie tot Nostr-ontwikkeling
Nostr is een eenvoudig, open protocol dat gedecentraliseerde communicatie mogelijk maakt. In dit voorbeeld leer je hoe je sleutelparen genereert, berichten ondertekent en evenementen naar relays stuurt.
Sleutelformaten in Nostr
Nostr-sleutels worden weergegeven in twee formaten:
- npub/nsec-formaat (leesbaar voor mensen)
- hex-formaat (ruwe cryptografische weergave)
- npub: Dit is een openbare sleutel, gecodeerd in Bech32-formaat, wat het voor mensen gemakkelijker maakt om te lezen en te delen.
- nsec: Dit is een privésleutel, ook gecodeerd in Bech32, gebruikt om berichten te ondertekenen. Deel deze sleutel nooit!
Hier is een voorbeeld:
- npub (openbare sleutel):
npub1abcxyz...
- nsec (privésleutel):
nsec1xyz...
Alternatief kunnen sleutels worden weergegeven in hexadecimaal formaat:
- Openbare sleutel (hex):
abcdef123456...
- Privésleutel (hex):
9876abcdef...
Het npub/nsec-formaat is simpelweg een gebruiksvriendelijke manier om dezelfde sleutelgegevens op een leesbaardere manier weer te geven.
Berichten ondertekenen in Nostr
Nostr gebruikt public-key cryptografie. Je zult gebruiken:
- Een privésleutel (nsec of hex) om berichten te ondertekenen.
- Een openbare sleutel (npub of hex) om berichten te verifiëren.
Hoe het werkt
- De privésleutel wordt gebruikt om een cryptografische handtekening voor je bericht te creëren.
- Deze handtekening bewijst dat het bericht authentiek is en door jou is verzonden.
- De openbare sleutel wordt door anderen gebruikt om te verifiëren dat de handtekening geldig is en het bericht niet is gewijzigd.
Denk aan de privésleutel als een stempel dat alleen jij hebt, en de openbare sleutel als een identiteitskaart die anderen gebruiken om de authenticiteit van het bericht te controleren.
Cryptografie: ECDSA en secp256k1
Nostr gebruikt hetzelfde cryptografische algoritme als Bitcoin om berichten te ondertekenen: ECDSA (Elliptic Curve Digital Signature Algorithm) met de secp256k1-curve.
Dit betekent dat de cryptografie van Nostr is gebouwd op een sterke beveiligingsbasis, vergelijkbaar met Bitcoin.
Evenementtypen in Nostr (NIP 1)
NIP 1 definieert de basistypen van evenementen (berichten) in Nostr:
- Type 0 (Metadata): Gebruikt om gebruikersprofielinformatie op te slaan (bijv. weergavenaam, foto, bio).
- Type 1 (Notities): Gebruikt voor algemene berichten of posts (zoals tweets).
In dit voorbeeld zullen we alleen werken met Type 0 en Type 1 evenementen.
Stapsgewijze handleiding om een Nostr-bericht te verzenden
Hier is een stapsgewijze handleiding om je eerste Nostr-bericht te verzenden met JavaScript.
Opmerking: Deze tutorial gaat ervan uit dat je een browseromgeving gebruikt om te interageren met het Nostr-protocol. De verstrekte codevoorbeelden werken niet in Node.js of andere omgevingen zonder aanpassing.
1. Importeer de Nostr Tools-bibliotheek
Allereerst moeten we de Nostr Tools-bibliotheek importeren om sleutels te genereren en evenementen te creëren. We gebruiken de esm.run
CDN van JSDelivr om de bibliotheek direct in de browser te importeren.
Het attribuut type="module"
is nodig om ES-modules in de browser te gebruiken. Het stelt ons ook in staat om async/await
te gebruiken, wat we hieronder gaan gebruiken.
Opmerking: De onderstaande codefragmenten moeten worden geplaatst binnen de bovenstaande
<script type="module">
tag.
2. Sleutelgeneratie
We genereren eerst een nieuwe privésleutel, die in verschillende formaten kan zijn: Uint8Array (byte-array voor ruwe gegevensverwerking), hex (leesbaar voor mensen), of Bech32 (foutbestendig, leesbaar formaat).
Hier is het sleutelgeneratieproces:
3. Maak en onderteken een evenement
Vervolgens maken we een Type 1 evenement (een notitie) en ondertekenen het met de privésleutel:
4. Verbinden met relays en het evenement verzenden
Om het evenement naar het Nostr-netwerk uit te zenden, verbinden we met relay-servers via WebSockets. Hier is hoe we het evenement verzenden:
De functie displayRelays
toont de relay-URLs waar het bericht is gepubliceerd.
5. Extra relay-informatie
-
Waarom meerdere relays gebruiken?
Het gebruik van meerdere relays vergroot de kans dat je inhoud wordt verspreid en toegankelijk blijft, zelfs als sommige relays offline gaan. Relays opereren onafhankelijk, wat betekent dat ze niet automatisch gegevens met elkaar synchroniseren. Verbinding maken met meerdere relays zorgt voor bredere distributie van je berichten en verbetert redundantie. -
Gratis versus betaalde relays:
Er zijn zowel gratis als betaalde relays in het Nostr-ecosysteem. Gratis relays zijn geweldig voor testen en leren, maar betaalde relays bieden doorgaans betere prestaties en betrouwbaarheid omdat ze zich hogere kwaliteit infrastructuur kunnen veroorloven. -
Relays gebruiken op basis van volgerslijsten:
Sommige Nostr-clients selecteren dynamisch relays op basis van de volgerslijst van de gebruiker. Dit zorgt ervoor dat je verbonden bent met dezelfde relays als de mensen die je volgt, wat de berichtbezorging en zichtbaarheid verbetert.
6. Samenvatting van het proces
Terugkomend op het proces voor het verzenden van een Nostr-bericht:
-
Sleutelgeneratie:
We hebben een privé-/openbaar-sleutelpaar gegenereerd met behulp van Nostr-tools. -
Een evenement maken en ondertekenen:
We hebben een Type 1 evenement (een notitie) gemaakt en het ondertekend met de privésleutel. -
Verbinden met relays:
We hebben verbinding gemaakt met meerdere relay-servers via WebSockets om ervoor te zorgen dat het bericht werd verspreid over het Nostr-netwerk. -
Gepubliceerde relays weergeven:
We hebben de relays weergegeven waar het bericht succesvol is gepubliceerd. -
Begrijpen van relay-gebruik:
We hebben het belang van het gebruik van meerdere relays verkend, het verschil tussen gratis en betaalde relays, en hoe relays de berichtdistributie en zichtbaarheid verbeteren.
Door deze handleiding te volgen, heb je met succes een Nostr-bericht verzonden met HTML, JavaScript en WebSockets. Dit biedt een basis voor het begrijpen van hoe je kunt interageren met het Nostr-protocol en werken met zijn belangrijkste functies.