Mining: verschil tussen versies

Uit BitcoinWiki.nl
(→‎Proces: ik zal hier straks weer mee verder gaan om het te verbeteren.)
Regel 4: Regel 4:


= Proces =
= Proces =
# Een miner heeft een [[Bitcoin node]]. Op deze node ontvangt hij continu nieuwe [[Transacties|transacties]] die mensen hebben gedaan. Die transacties zijn op het moment van verzenden onbevestigd, pas als ze in een [[Blockchain#Blokken|blok]] komen zijn ze bevestigd. De node van de miner slaat de transacties tijdelijk op in zijn [[Mempool|mempool]].
# Een miner heeft een [[Bitcoin node]]. Op deze node ontvangt hij continu nieuwe [[Transacties|transacties]] die mensen hebben gedaan. Die transacties zijn op het moment van verzenden onbevestigd, pas als ze in een [[Blockchain#Blokken|blok]] worden opgenomen zijn de transactie bevestigd. De node van de miner slaat de transacties tijdelijk op in zijn [[Mempool|mempool]].
# De miner bekijkt de mempool en selecteert de duurste transacties. Dit zijn dus de transcties met de hoogste kosten. aangezien de miner hier het meest mee verdient. We noemen deze selectie het "bloktemplate".
# De miner voegt een zogenaamde coinbasetransactie toe, waarbij de door het bitcoin algoritme gegenereerde nieuwe bitcoins (m.a.w. de blok subsidie) en transactie fees naar een bitcoinadres van de winnende miner worden gestuurd. Volgens de regels mag een miner (op dit moment) 6,25 ''nieuwe'' bitcoins opnemen in de coinbase transactie. Als de miner een groter aantal bitcoin in de coinbasetransactie opneemt (en zich dus niet aan de regels houdt) zal het blok niet worden geaccepteerd.
# De miner voegt ook een transactie naar zichzelf toe, waar hij nieuwe bitcoin creëert. Volgens de regels mag een miner (op dit moment) 6.25 bitcoin "uit het niks" claimen bij het vinden van een nieuw blok. Als de miner een grotere transactie naar zichzelf doet (en zich dus niet aan de regels houdt) zal het blok niet worden geaccepteerd.
# De miner bekijkt de mempool en selecteert doorgaans de transacties waaraan de hoogste fee is meegegeven. We noemen deze selectie het "bloktemplate" of een kanditaatblok.
# De miner voegt [[Blockchain#Wat_maakt_de_blockchain_een_blockchain|hash van het vorige blok]] toe.
# Vervolgens moet de block header worden gecontrueerd. De block header is de een samenvatting van het het blok en bestaat uit de volgende onderdelen:
# Nu begint het daadwerkelijke '''minen'''. De miner probeert duizenden keren per seconde om een [[#Hashing|hash]] te vinden die voldoet aan [[Bitcoin#Moeilijkheid|de regels]]. Dit houdt in dat hij input zal proberen (een tellertje). Als hij geluk heeft, en een bash vindt die aan de regels voldoet, zal hij het blok opsturen naar het netwerk.
#* Software verion number.
#* De [[Blockchain#Wat_maakt_de_blockchain_een_blockchain|hash van het vorige blok]] toe.
#* de root van de merkle root van de transacties die in het desbetreffende blok zijn opgenomen.
#* Een time stamp (tijdsindicatie) toe.
#* De proof-of-work algoritme target van dit blok.
#* De nonce.
# Nu begint het daadwerkelijke '''minen'''. De miner probeert duizenden keren per seconde om een [[#Hashing|hash]] van de block header te vinden die voldoet aan [[Bitcoin#Moeilijkheid|de regels]]. Dit houdt in dat hij de nonce, elke keer aanpast om steeds een nieuwe unieke hash te vinden. Als de miner geluk heeft, en een hash vindt die aan de regels voldoet, zal hij het blok distribueren naar het netwerk.
# Het [[Bitcoin node#Netwerk|netwerk]] ontvangt het nieuwe blok, zal controleren of aan alle regels wordt voldaan en deze accepteren. De nodes halen de (in dit nieuwe blok) bevestigde transacties uit hun [[Mempool|mempool]].
# Het [[Bitcoin node#Netwerk|netwerk]] ontvangt het nieuwe blok, zal controleren of aan alle regels wordt voldaan en deze accepteren. De nodes halen de (in dit nieuwe blok) bevestigde transacties uit hun [[Mempool|mempool]].
# Het proces begin nu weer vanaf stap 1.
# Het proces begin weer opnieuw vanaf stap 1.


== Hashing ==
== Hashing ==
Hashing ("verhaspelen" in het Nederlands) is een proces om een hashcode te maken: bij hashing wordt door middel van een hash algoritme een hashcode berekend van een blok gegevens ("input"). Uit deze hashcode is dan niet meer af te leiden wat de oorspronkelijke gegevens waren, maar iemand die de gegevens heeft kan wel opnieuw daarvan de hashcode berekenen en controleren of de berekende hashcode overeenkomt met een eerder verkregen hashcode.
Hashing ("verhaspelen" in het Nederlands) is een proces om een hashcode te maken: bij hashing wordt door middel van een hash algoritme een hashcode berekend van een blok gegevens / de block header ("input"). Uit deze hashcode is dan niet meer af te leiden wat de oorspronkelijke gegevens waren, maar iemand die de gegevens heeft kan wel opnieuw daarvan de hashcode berekenen en controleren of de berekende hashcode overeenkomt met een eerder verkregen hashcode.


De gegevens ("input") is een blocktemplate (zie stap 2 hierboven) en een teller. Door steeds de teller te verhogen komt er steeds een nieuwe hash uit. De regel is dat een correcte hash een [[Bitcoin#Moeilijkheid|bepaalde hoeveelheid nullen]] bevat. Op een gegeven moment vindt de miner een hash met voldoende nullen. Iedereen met dezelfde input (het blok en de juiste teller-data) kan controleren dat de hash klopt met de data.
Het hashen van een blok gebeurt door steeds een onderdeel van de input, zijnde de ''nonce'', aan te passen. De regel is dat een correcte hash een [[Bitcoin#Moeilijkheid|bepaalde hoeveelheid nullen]] bevat. Op een gegeven moment vindt de miner een hash met voldoende nullen. Iedereen met dezelfde input (het blok en de juiste teller-data) kan controleren dat de hash klopt met de data.


== Lege blokken ==
== Lege blokken ==

Versie van 4 mrt 2021 14:28

Mining is het proces van het bevestigen van transacties uit de Mempool door ze in blokken te plaatsen.

De miners vinden blokken door de heel vaak te gokken op een input, om een juiste "hash" te vinden. Als ze deze vinden verdienen ze de bloksubsidie en ook de transactiekosten van de transacties die ze in het blok zetten.

Proces

  1. Een miner heeft een Bitcoin node. Op deze node ontvangt hij continu nieuwe transacties die mensen hebben gedaan. Die transacties zijn op het moment van verzenden onbevestigd, pas als ze in een blok worden opgenomen zijn de transactie bevestigd. De node van de miner slaat de transacties tijdelijk op in zijn mempool.
  2. De miner voegt een zogenaamde coinbasetransactie toe, waarbij de door het bitcoin algoritme gegenereerde nieuwe bitcoins (m.a.w. de blok subsidie) en transactie fees naar een bitcoinadres van de winnende miner worden gestuurd. Volgens de regels mag een miner (op dit moment) 6,25 nieuwe bitcoins opnemen in de coinbase transactie. Als de miner een groter aantal bitcoin in de coinbasetransactie opneemt (en zich dus niet aan de regels houdt) zal het blok niet worden geaccepteerd.
  3. De miner bekijkt de mempool en selecteert doorgaans de transacties waaraan de hoogste fee is meegegeven. We noemen deze selectie het "bloktemplate" of een kanditaatblok.
  4. Vervolgens moet de block header worden gecontrueerd. De block header is de een samenvatting van het het blok en bestaat uit de volgende onderdelen:
    • Software verion number.
    • De hash van het vorige blok toe.
    • de root van de merkle root van de transacties die in het desbetreffende blok zijn opgenomen.
    • Een time stamp (tijdsindicatie) toe.
    • De proof-of-work algoritme target van dit blok.
    • De nonce.
  5. Nu begint het daadwerkelijke minen. De miner probeert duizenden keren per seconde om een hash van de block header te vinden die voldoet aan de regels. Dit houdt in dat hij de nonce, elke keer aanpast om steeds een nieuwe unieke hash te vinden. Als de miner geluk heeft, en een hash vindt die aan de regels voldoet, zal hij het blok distribueren naar het netwerk.
  6. Het netwerk ontvangt het nieuwe blok, zal controleren of aan alle regels wordt voldaan en deze accepteren. De nodes halen de (in dit nieuwe blok) bevestigde transacties uit hun mempool.
  7. Het proces begin weer opnieuw vanaf stap 1.

Hashing

Hashing ("verhaspelen" in het Nederlands) is een proces om een hashcode te maken: bij hashing wordt door middel van een hash algoritme een hashcode berekend van een blok gegevens / de block header ("input"). Uit deze hashcode is dan niet meer af te leiden wat de oorspronkelijke gegevens waren, maar iemand die de gegevens heeft kan wel opnieuw daarvan de hashcode berekenen en controleren of de berekende hashcode overeenkomt met een eerder verkregen hashcode.

Het hashen van een blok gebeurt door steeds een onderdeel van de input, zijnde de nonce, aan te passen. De regel is dat een correcte hash een bepaalde hoeveelheid nullen bevat. Op een gegeven moment vindt de miner een hash met voldoende nullen. Iedereen met dezelfde input (het blok en de juiste teller-data) kan controleren dat de hash klopt met de data.

Lege blokken

Lege blokken zijn blokken zonder transacties erin, slechts een coinbasetranasctie. Soms worden er lege blokken gevonden. Dit kan gebeuren als de miner nog niet voldoende tijd heeft gehad, sinds het vinden van het vorige blok, om een nieuw blocktemplate (zie stap 2 hierboven) te bepalen. De miner wil zijn machines niet uitzetten, en laat zijn machines doorzoeken naar blokken, welke leeg zullen zijn (want er is nog geen nieuw template met transacties). Hij doet dit omdat hij ook voor lege blokken een beloning (subsidie) krijgt.

Moeilijkheidsgraad

De moeilijkheidgraad (difficulty in het Engels) is de maatstaf voor het vinden van een correcte hash waarvan de waarde onder het aangegeven doel (target) ligt. Het doel is een 256-bit nummer die alle Bitcoin nodes delen. De SHA-256 hash van een blok moet lager of gelijk zijn aan dit nummer. Des te lager het nummer, des te moeilijker het wordt om het blok te vinden. In praktijk betekent dit dat de uitkomst van een hash moet beginnen met een aantal nullen (bijv: 000000000000000000094c8ceeda06ce2438753ad50ef3699e03618459adb88f). Om de 2016 blokken wordt de moeilijkheidsgrad opnieuw berekend. Zijn er teveel miners aan het werk gaat de moeilijkheidsgraad omhoog (d.w.z. de beschikbare rekenkracht is te hoog voor de huidige moeilijkheidsgraad) en zijn er te weinig miners gaat de moeilijkheidsgraad omlaag (d.w.z. de beschikbare rekenkracht is te laag voor de huidige moeilijkheidsgraad). Op deze manier blijft het netwerk stabiel en veilig en wordt er gemiddeld elke 10 minuten een nieuw bitcoin blok gevonden. Dit aanpassingsmechanisme zorgt ervoor dat er niet meer bitcoin gemined gaan worden als meer miners zijn en zodoende geen overschot aan bitcoin op de markt komt.

Pools

Pools zijn groepen van mensen (of bedrijven) met miners die samen zoeken naar een blok. Als een blok gevonden wordt, dan worden de opbrengsten gedeeld naar rato van bijdrage aan de pool. Het is een manier om met meer zekerheid bitcoin te vinden: zonder pool minen levert een miner misschien eens per maand een blok op, met een pool vindt de pool mogelijk dagelijks een blok, en verdeelt de inkomsten.

Zie verder

  • Aflevering 8 van [Beginnen met Bitcoin] legt mining verder uit