My CMS

Handleiding Mining

Hoe werkt Bitcoin mining?

Zonder mining zou Bitcoin niet kunnen bestaan. Mining zorgt ervoor dat transacties, die over het Bitcoin netwerk verstuurd worden, zich houden aan de regels die zijn vastgelegd in het Bitcoin-protocol. Maar hoe werkt mining nu eigenlijk? Met dit artikel proberen we deze vraag te beantwoorden.

Wat is minen?

Mining (delven) is een van de unieke aspecten van het Bitcoin netwerk. Het lost een aantal problemen tegelijkertijd op.

  • Hoe zorgen we dat de bitcoins verdeeld worden onder haar gebruikers?
  • Hoe zorgen we ervoor dat elke transactie gecontroleerd wordt en zich aan de regels houdt?
  • Hoe zorgen we dat we mensen aanmoedigen om transacties te controleren?

Miners zijn de hele dag bezig met het controleren van Bitcoin transacties. Dit doen zij door een aantal transacties te controleren en deze vervolgens te bundelen in een ‘blok’. Dit is echter pas het begin. Als er een blok is opgesteld door een miner moet hij vervolgens het ‘magische nummer’ van dit blok vinden. Het vinden van dit nummer kan jij je het best voorstellen als het gooien van een dobbelsteen. De computer heeft een enorme dobbelsteen met miljoenen zijden en het doel is om bijvoorbeeld als eerste in het netwerk het cijfer één te rollen. Als jij als eerste het ‘magische nummer’ gooit, zal jouw blok geaccepteerd worden door het netwerk en verdien jij 25 bitcoins. Vervolgens zal het werk aan een nieuw blok beginnen.

Het Bitcoin-protocol dicteert dat er elke tien minuten een geldig blok gevonden moet worden. Maar je kan je voorstellen dat hoe meer miners erbij, en hoe meer computers er dus met dobbelstenen gooien, des de groter de kans is dat er iemand één gooit. Als er meer mensen bij komen zullen er dus blokken gevonden worden, sneller dan de tien minuten die het protocol voorschrijft. Om dit te voorkomen kan het Bitcoin-netwerk de moeilijkheid (de grootte van de dobbelsteen) aanpassen. In het begin van Bitcoin, toen er nog maar enkele computers aan het minen waren, vertelde het Bitcoin-netwerk tegen alle miners: “hier heb je een dobbelsteen met 50 zijden, als je één gooit, verdien je de Bitcoin-beloning”. Naarmate het Bitcoin-netwerk groeit, past het netwerk het aantal zijden van de dobbelsteen aan. Op die manier is de tijd die nodig is, om het nieuwe blok te vinden, altijd rond de 10 minuten. Natuurlijk is dit geen exacte wetenschap, omdat er heel veel kans nog steeds in het spel is. Zo komt het wel eens voor dat er 4 blokken in één minuut worden gevonden,  of dat er een uur lang helemaal geen blok wordt gevonden. Op de lange termijn zal de gemiddelde snelheid altijd rond de tien minuten liggen.

Hoe werkt minen?

Het voorbeeld van de dobbelsteen is een goede vergelijking maar klopt niet helemaal. Wat Bitcoin namelijk achter de schermen doet, is gebruikmaken van een hashfunctie om een willekeurige string (een reeks tekens) te vormen. Een hashfunctie neemt een invoer, doet daar een berekening mee om vervolgens een willekeurig uitziende uitvoer te geven. De truc zit hem er echter in dat de uitvoer altijd hetzelfde zal zijn als je dezelfde invoer geeft.

Om te demonstreren hoe dit werkt ga ik je nu vragen een rekenmachine erbij te pakken en de wortel van 3 uit te rekenen. Als het goed is komt daar 1.732050807568877 uit. Als je nu de cijfers vanaf de vijfde decimaal tot de tiende decimaal pakt, zal je nu 508075 hebben. Als je hetzelfde met het getal 11 zou proberen krijg komt er 3.3166247903554 uit en is je hashfunctie 247903. Dit is een hele simpele en onveilige, vorm van een hashfunctie. Het is makkelijk om de getallen van een invoer naar een uitvoer te gaan, maar als ik je zou vragen welke invoer er hoort bij de uitvoer 512754 wordt het een stuk lastiger, omdat terugrekenen door een mens niet te doen is. (Het antwoord was trouwens de wortel van 13).

Nu je weet hoe een simpele hashfunctie werkt, gaan we het moeilijker maken. We gaan nu kijken naar de SHA-256 hashfunctie. Dit is een methode die echt wordt gebruikt in Bitcoin. Om te demonstreren hoe dit werkt open je deze website. Als het goed is zie je nu een data vak. Je vult daar nu in: “betaal mij, John, 25 bitcoins. 000001”, zonder de aanhalingstekens.  Als het goed is komt daar nu ‘d16253037cc62…’ uit. Nu is dit uiteraard heel erg simpel te berekenen en moeilijk te schalen zodat we zeker weten dat een blok maar eens in de tien minuten gevonden wordt. Om dit moeilijker te maken kunnen we afspreken dat de uitvoer van de eerdere genoemde betaling altijd moet beginnen met een ‘0’. We kunnen nu het laatste getal in de zin aanpassen net zolang totdat we een hash-resultaat krijgen dat begint met een ‘0’. Als we beginnen met 000001, 000002, 000003 etc. en doorgaan tot  “betaal mij, John, 25 bitcoins. 000013” zal je zien dat daar de hash “014e6d3ec” uitkomt. Gefeliciteerd je hebt als eerste het magische getal gevonden en 25 Bitcoin verdiend! Het aantal zijden van de dobbelsteen uit ons voorbeeld, staat dus gelijk aan het aantal nullen dat de uitvoer van onze hashfunctie moet hebben. Hoe meer CPU-kracht er op het netwerk is hoe meer nullen de uitvoer moet hebben.

Op het moment van schrijven doet het hele netwerk bij elkaar zo’n 46 triljoen berekeningen per seconde. Er is momenteel namelijk veel nieuwe hardware op de markt gekomen die is gespecialiseerd om mee te minen. Er is een grote kans dat, wanneer je dit leest, deze waarde al weer veel hoger ligt. De huidige kracht van het netwerk kan je zien op deze site. Zoek naar ‘network total‘ boven in de balk.

Ik hoop dat dit duidelijk maakt wat minen is en hoe het werkt en laat gerust je vragen achter in de comments dan zal ik mijn best doen deze te beantwoorden.