← Terug naar alle inzichten

Stuur bitcoin naar een naam, niet naar 62 willekeurige tekens. Met Spaces bezit je die naam op Bitcoin zelf.

Het probleem

Een bitcoinadres ziet eruit zoals de regel hieronder. Niemand kan het hardop zeggen, op een kaartje drukken of met het oog controleren. Eén verkeerd teken en het geld is weg.

Vandaag
bc1pknhdaw3jyhvcalyrkulw2hwmqvc5q65ch9gkpnvvhrfajyedjgvqmn3w0c
Met Spaces
rob@bitsaga

Namen bestaan al op het internet. Je kent ze van e-mail en websites. Maar die namen worden gehuurd. Een bedrijf dat registrar heet bewaart het register, en daarboven staat een keten van bedrijven en overheden. Past een van hen het register aan, dan wijst je naam ergens anders heen, of nergens.

Spaces stelt een eenvoudige vraag. Wat als de naam op Bitcoin leefde, aangehouden als een munt, waar alleen jouw sleutel hem kan verplaatsen?

Wat Spaces is

Zo vindt een betaling je

Stap 1

Je wint een naam

@bitsaga wordt een kleine munt op Bitcoin. Alleen mijn sleutel kan hem verplaatsen. Geen enkel bedrijf kan hem van me afnemen.

Stap 2

Je maakt handles

rob@bitsaga, hello@bitsaga, alles onder mijn naam. Ik maak ze zelf. Eén kort bericht op Bitcoin dekt ze allemaal.

Stap 3

Je zegt waar je moet betalen

Ik koppel mijn betaaladres aan de naam. Het is ondertekend, dus niemand kan het omwisselen.

Stap 4

Een vriend typt de naam

Zijn wallet vraagt een relay om het bewijs dat rob@bitsaga van mij is.

Stap 5

De wallet controleert, en betaalt dan

Hij controleert het bewijs tegen Bitcoin zelf. Hij hoeft de relay niet te vertrouwen, en mij ook niet.

De onderdelen, in meer detail

Een naam winnen

Je opent een veiling met één Bitcoin-transactie en plaatst een bod. Namen komen in een vast tempo open voor biedingen, ongeveer tien per dag, zodat niemand er duizenden tegelijk kan binnenhalen. Het hoogste bod wint. Het bod gaat naar niemand: het wordt verbrand. Niemand anders bood op @bitsaga, dus mijn bod verbrandde maar 1.000 sats. Daarna registreert nog één transactie de naam op mijn naam.

Een naam behouden

Een space is een huurcontract van ongeveer een jaar (52.560 blokken). Elke transactie die hem bijwerkt, verlengt hem, en ik verleng hem voordat hij afloopt. Vergeet je het, dan verloopt de naam. Dat is de prijs van geen registrar hebben: niemand stuurt je een herinnering.

Handles uitdelen

Je handles staan in een lijst, en die lijst blijft buiten Bitcoin. Wat wél op Bitcoin komt, is één vingerafdruk van 32 bytes van die lijst, een Merkle root, in een kleine transactie. Elke handle die je toevoegt krijgt een certificaat dat zegt: deze naam hoort bij deze sleutel, voorgoed. Elke nieuwe vingerafdruk bouwt voort op de vorige, dus niemand kan later een tweede eigenaar insluipen voor een handle die je al hebt uitgegeven. Daarom kan een handle achteraf ook niet naar een ander adres worden verplaatst.

Zeggen waar je moet betalen

Records zeggen waar een naam naartoe betaalt. Bij een space staan ze in een Bitcoin-transactie. Bij een handle zijn ze ondertekend met de sleutel van de handle en buiten Bitcoin gedeeld. Ik schreef drie records: een silent payment-adres (sp), een gewoon bitcoinadres als terugval (btc) en mijn website. Spaces heeft nog geen standaard voor de namen van betaalrecords, dus sp en btc zijn mijn eigen keuze. Een wallet moet die namen ook kennen.

Hoe een wallet het antwoord vertrouwt

Een wallet krijgt een bewijs: het certificaat, de ondertekende records en het pad van de handle omhoog naar Bitcoin. Het is ongeveer 3 KB. Het mijne is 3.003 bytes, en het controleren duurt ongeveer een tiende milliseconde. Om de controle af te ronden heeft de wallet nog één ding nodig: een anchor. Dat is een vingerafdruk van heel Spaces op één moment. Wie een Spaces-node draait, kan hem uit Bitcoin berekenen, ongeveer elke zes uur. Ik berekende de mijne op mijn eigen node.

Wat een relay doet

Een relay is een kleine server die de bewijzen voor namen bewaart en aan wallets geeft. Hij is alleen een bode. Hij kan traag zijn, of offline. Hij kan niet liegen, want de wallet controleert elk bewijs tegen Bitcoin. Relays kopiëren ook van elkaar, dus één relay kan antwoorden voor namen die hij nooit heeft ontmoet.

De wallet van je vriend

Wil betalen aan rob@bitsaga.

vraagt, krijgt een bewijs

Een relay

Bewaart en levert bewijzen. Iedereen kan er een draaien.

de wallet controleert het bewijs daarna zelf

Bitcoin

Het enige dat de wallet moet vertrouwen. Al het andere wordt ertegen gecontroleerd.

Spaces, BIP 353 en silent payments

Deze drie zijn geen rivalen. Ze beantwoorden verschillende vragen.

Silent payments

BIP 352 · een adrestype

Wat het is
Een herbruikbaar adres. De wallet van elke betaler leidt er een vers, privé adres van af.
Waar de naam leeft
Het is geen naam. Het zijn 116 tekens.
Sterkte
Betalingen zijn niet aan elkaar of aan jou te koppelen, en niemand hoeft online te zijn.
Zwakte
Veel te lang om met de hand te delen.

BIP 353

Een naam via het domeinsysteem

Wat het is
rob@bitsaga.be is een opzoeking in DNS die een betaalinstructie teruggeeft.
Waar de naam leeft
In een domein dat je huurt.
Wie hem kan afnemen
De registrar, het register, een rechter.
Een wallet moet vertrouwen
Een keten van DNS-sleutels tot aan ICANN.
Je hebt nodig
Een domein, een DNS-record, DNSSEC.

Spaces

Een naam op Bitcoin

Wat het is
rob@bitsaga leeft in een bitcoinmunt die jij aanhoudt.
Waar de naam leeft
Op Bitcoin.
Wie hem kan afnemen
Niemand, zolang je hem elk jaar verlengt.
Een wallet moet vertrouwen
Bitcoin.
Je hebt nodig
Een veiling, een paar transacties, een relay om bewijzen te dragen.

De twee soorten naam kunnen naar hetzelfde silent payment-adres wijzen. De mijne doen dat:

rob@bitsaga.be  en  rob@bitsaga

sp1qqg94rylj0uklf6lkyc5n92jp3p392g0rpvh0f74qphufxcx9zya97qh8w4z290qym8ve33a02ejfc3lanvw9aljfz6upuc2gfnulepd75ccrhdql

Eén adres, twee namen. De eerste vind je via DNS (BIP 353). De tweede vind je via Bitcoin (Spaces).

Er zijn ook praktische verschillen:

Wat ik deed

Ik kocht @bitsaga op Bitcoin. Niemand anders bood. Alle netwerkkosten samen kwamen op 6.882 sats. Ik schreef mijn betaaladres in de naam, zodat de naam zelf al zegt waar je moet betalen. Daarna maakte ik de handle rob@bitsaga, en ondertekende de records: een silent payment-adres als hoofdrecord en een gewoon bitcoinadres als terugval.

Ik draai ook mijn eigen relay, op spacesrelay.bitsaga.be. Hij volgt mijn eigen Bitcoin-node. Ik zette het bewijs voor rob@bitsaga erop. Daarna vroeg ik mijn publieke relay vanaf een schone client om de naam, en controleerde het antwoord tegen mijn eigen node. Het gaf beide adressen terug en toonde de handle als definitief. Zo hoefde ik niemand te vertrouwen, mezelf ook niet.

@bitsaga geregistreerd rob@bitsaga aangemaakt en definitief Records ondertekend Relay live op spacesrelay.bitsaga.be Opgelost en gecontroleerd tegen mijn eigen node

Controleer het zelf

Je hebt je eigen Bitcoin-node nodig en de Spaces-node spaced. Om de space zelf te bekijken:

space-cli getspace @bitsaga
space-cli getfallback @bitsaga

Om rob@bitsaga via mijn relay op te lossen en het antwoord tegen je eigen node te controleren:

pip install libveritas
curl -O https://bitsaga.be/files/resolve-via-relay.py
python3 resolve-via-relay.py rob@bitsaga https://spacesrelay.bitsaga.be

Het script vraagt de relay om het bewijs. Daarna controleert het dat bewijs tegen de anchors van je eigen spaced node, en toont de adressen die het vindt. De relay is alleen de bode.

Draai je eigen relay

Iedereen kan een relay draaien. Het is één programma. Dit is wat ik draaide:

cargo install --git https://github.com/spacesprotocol/certrelay.git \
  relay --bin certrelay --locked

Ik wees de mijne naar mijn eigen Spaces-node, dus de bewijzen die hij levert rusten op mijn eigen Bitcoin-node. Een relay kan ook een eigen light client starten, dus je hebt geen volledige node nodig om het te proberen. Hoe meer relays er zijn, hoe minder één ervan uitmaakt.

Wat nog niet werkt

Het Spaces-protocol en zijn tools komen van spacesprotocol.org.