Deze ronde is gesloten

We zijn aangekomen bij het derde deel van de ontleding van de Bitcoin white paper. De eerste pagina van het meesterwerk van Satoshi is behandeld en we hebben de introductie achter de rug. In de introductie is met name de filosofie en het gedachtegoed achter Bitcoin besproken en hebben we het al kort over de werking van het protocol gehad. Vandaag gaan we het hebben over transacties en ontkomen we er niet aan om technisch wat meer de diepte in te duiken. In dit deel gaan we leren hoe een transactie er precies uitziet en wat een bitcoin eigenlijk is. Bestaan er eigenlijk wel bitcoin tokens of is dat vooral beeldspraak? We gaan het allemaal zien in deel drie van de ontleding van de Bitcoin white paper!

Transacties

We define an electronic coin as a chain of digital signatures.

Het eerste wat je moet weten om te begrijpen hoe transacties werken is dat een bitcoin technisch gezien niet bestaat. Dat wil zeggen, er is niet zoiets als een bitcoin token. Satoshi valt in dit gedeelte van de white paper meteen met de deur in huis door een bitcoin te definiëren als een keten van digitale handtekeningen.

Een nieuwe bitcoin transactie gebruikt de output van vorige transactie als input voor zichzelf. Stel dat Satoshi 100 bitcoins naar Roger wil sturen en dat de transactiekosten 25 bitcoins zijn. De opbouw van de transactie kan er dan als volgt uitzien:


Input 1 – 25 bitcoins

Input 2 – 50 bitcoins

Input 3 – 25 bitcoins

Input 4 – 25 bitcoins

De transactiekosten van 25 bitcoins gaan naar de miner van het blok en de rest van de bitcoins gaan naar Roger. Dat zou er als volgt uitzien:

Roger krijgt

Output 1 – 100 bitcoins

De miner krijgt

Output 2 – 25 bitcoins

Roger ontvangt met de transactie 100 bitcoins in de vorm van output. Hij kan vervolgens de door hem ontvangen output gebruiken als input voor nieuwe transacties. De output die Roger heeft ontvangen classificeren als unspent transaction output (UTXO), ofwel niet-uitgegeven transactie outputs. Zodra Roger ze heeft gebruikt als input verandert de status in een uitgegeven transactie output. Zodra ze zijn uitgegeven kan hij ze niet nogmaals als input gebruiken. Om een geldige transactie te fabriceren mag Roger dus alleen niet-uitgegeven transactie outputs gebruiken als input.

Hoeveel bitcoin een gebruiker heeft is dus de som van alle niet-uitgegeven transactie outputs die hij met zijn private key kan ondertekenen. Er is dus technische gezien geen sprake van bitcoins, maar van niet-uitgegeven transactie outputs. De hoeveelheid bitcoin die je in je wallet ziet is geen officiële balans, maar een verzameling van alle niet-uitgegeven transactie outputs die verdeeld zijn over de blockchain en met jouw private key kunnen worden uitgegeven.

Een andere eigenschap van een niet-uitgegeven transactie output is dat ze altijd volledig gebruikt moeten worden. Roger kan zijn Output  van 100 bitcoins dus alleen in zijn geheel uitgeven. Hoe werkt dit dan? Stel dat hij voor 1 bitcoin een biertje koopt bij de kroeg.

Input transactie:

Input 1 – 100 bitcoins

Output transactie:

Output 1 – 1 bitcoin – naar het adres van de kroeg

Output 2 – 99 bitcoins – naar het adres van Roger als wisselgeld

Dit is waarom Satoshi een bitcoin definieert als een keten van digitale handtekeningen. Er bestaat niet zoiets als een bitcoin. Er zijn slechts niet-uitgegeven transactie outputs die als input gebruikt kunnen worden voor nieuwe transacties. De outputs van de nieuwe transactie kunnen vervolgens weer als de input voor volgende transacties fungeren, enzovoort.  

Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership.

Om de niet-uitgegeven transactie outputs (bitcoins) te versturen moet je deze ondertekenen met jouw handtekening. Een transactie bestaat uit de vingerafdruk (hash) van de vorige transactie, het ontvangstadres van de ontvangende partij en jouw handtekening. Dat klinkt wellicht een beetje complex, maar gelukkig heeft Satoshi een redelijk duidelijke afbeelding gemaakt van de structuur van een transactie.

Wij zijn in dit geval Owner 1 en sturen de middelste transactie naar Owner 2. We gebruiken daarvoor het ontvangstadres van Owner 2 en de transacties bevat de vingerafdruk (hash) van de voorgaande transactie als input. Onderaan zetten we als Owner 1 onze handtekening. Het netwerk kan onze handtekening vervolgens gebruiken om te verifiëren dat Owner 0 de transactie die wij nu als input gebruiken voor Owner 2 inderdaad naar ons gestuurd heeft.

De vingerafdruk (de hash) gebruiken we om terug te verwijzen naar de vorige transactie die we als input gebruiken voor onze nieuwe transactie. Hiermee koppel je de transacties aan elkaar. Het netwerk kan vervolgens zien dat Owner 0 de output die wij hier gebruiken als input heeft ondertekend en naar ons heeft gestuurd. Ons ontvangstadres (public key) is immers door Owner 0 in de transactie gezet.

The problem of course is the payee can’t verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank.

We weten nu ongeveer wat een bitcoin is en hoe bitcoin transacties vormgegeven worden. Maar daarmee hebben we nog steeds niet het probleem opgelost dat dezelfde bitcoin tweemaal uitgegeven kan worden. Het zogenaamde double-spending problem. De oplossing die tot de komst van Bitcoin altijd voor dit probleem werd gebruikt is het instellen van een centrale instantie. Het idee is dat je na iedere transactie met de munten die je hebt gekregen naar de centrale instantie gaat om ze in te leveren en nieuwe te krijgen. Alleen munten die direct van de centrale instantie komen kun je vertrouwen. Het probleem daarmee is dat je nog steeds op de centrale instantie moet vertrouwen, precies zoals bij banken.

We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don’t care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first.

De persoon die in ons systeem betaald wordt moet zeker weten dat de munten die hij krijgt niet ook door dezelfde eigenaar in een andere transactie gebruikt zijn. De enige manier waarop je dit zeker kunt weten is door alle transacties in het systeem bij te houden. In het hiervoor beschreven model was dat de centrale instantie. Maar daar willen we met Bitcoin juist van af.

To accomplish this without a trusted party, transactions must be publicly announced, and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received.

Om dit voor elkaar te krijgen moeten transacties openbaargemaakt worden en moet het hele netwerk het eens worden over de volgorde waarin de transacties hebben plaatsgevonden. De persoon die betaald wordt heeft bewijs nodig dat de meerderheid van het netwerk het erover eens is dat hij de eerste ontvanger van de bitcoins is. Wat we daarvoor nodig hebben is consensus over de volgorde waarin de transacties hebben plaatsgevonden. Maar hoe kun je daar zonder centrale instantie overeenstemming over bereiken? Dat probleem en het belang van tijd en volgorde gaan we bespreken in het volgende deel van de serie.