Blokmetadata
De block-header speelt een belangrijke rol bij de identificatie van blokken binnen het Bitcoin-netwerk. De block-header wordt herhaaldelijk ‘gehasht’ om Proof of Work te creëren voor het mining-proces. Ieder blok binnen de keten bevat een eigen unieke ‘kop’ en ieder blok wordt afzonderlijk geïdentificeerd door de hash van de ‘blokkop’. De blokkop bevat een aantal sets van ‘blokmetadata’, een 80-byte lange string die verschillende elementen bevat.
Elementen van de block-header
De block-header bestaat uit de volgende elementen:
- Het 4-byte lange Bitcoin-versienummer
Het Bitcoin-versienummer wordt gebruikt om wijzigingen en updates in het hele mining-proces bij te houden. De hash van het vorige blok verwijst naar het voorgaande blok of het bovenliggende blok. - 32-byte van de vorige blokhash
Verwijst naar de blokhash van het voorgaande blok - De 32-byte Merkle-root
De Merkle-root bestaat uit alle gehashte transactie-hashes binnen een transactie. Iedere hash wordt verder gehasht. De Merkle-root is een wiskundige methode, om de gegevens van een ‘Merkle tree’ te verifiëren. - De 4-byte lange tijdstempel (timestamp) van het blok
Het tijdstempel binnen de blokmetadata is in het blok opgenomen, zodat iedereen binnen de blockchain een permanent, gecodeerd verslag kan zien van de tijdstippen, waarop bepaalde gebeurtenissen in het netwerk plaatsvonden. De tijdstempel geeft meestal de exacte datum en tijd van die specifieke gebeurtenissen weer. - Het 4-byte lange moeilijkheidsdoel (difficulty target) voor het blok
Het moeilijkheidsdoel wordt gebruikt voor het aanpassen van de moeilijkheidsgraad binnen de blockchain. - De 4-byte lange nonce
De nonce is een waarde die Bitcoin-miners kunnen wijzigen, om verschillende ‘permutaties’ te creëren en een juiste hash in de getallenreeks te genereren. Een permutie is de herschikking van een reeks getallen.
Identificatie van een blok
Alle bovenstaande componenten zijn essentieel voor het creëren van een nauwkeurige en betrouwbare block-header. De cryptografische hash binnen ieder afzonderlijk blok, is de belangrijkste ‘identificatie’ van een blok. Daarom kun je de cryptografische hash beschouwen als een digitale vingerafdruk. De cryptografische hash wordt gecreëerd door de block-header, tweemaal door het toepasselijke algoritme te hashen.
Wat is de Merkle-root?
Aan iedere transactie binnen de blockchain is een hash gekoppeld. In een blok worden alle transactie-hashes in het blok zelf gehasht (soms gebeurt dat meerdere keren). Het resultaat van die hashes is de Merkle-root. Dat wil zeggen dat de Merkle-root de hash vertegenwoordigt, van de hash van alle hashes, van alle transacties in het blok. De Merkel-root is opgenomen in de block-header. Dankzij de Merkle-root hoeven de nodes binnen het netwerk niet de gehele blockchain te kopiëren, om de gevalideerde transacties te verifiëren. Alleen het downloaden van de block-headers en de Merkle tree is dan in principe voldoende.
Hash-boom
Een Merkle tree (ook wel hash-boom genoemd) kun je beschouwen als een ‘digitale boom’, waarin alle ‘bladeren’ (oftewel de nodes) zijn gelabeld met de cryptografische hash van een gegevensblok. En iedere node die geen ‘blad’ is (de zogenaamde ’takken’), zijn gelabeld met de cryptografische hash, van de labels van de onderliggende nodes. De Merkle tree maakt een efficiënte en veilige verificatie, van de inhoud van een grote datastructuur mogelijk. De Merkle tree vertegenwoordigt de hash-lijst en de hash-keten.
Wat is de nonce?
Een ander belangrijk element van de block-header is de ‘nonce’. Deze nonce is een nummer dat eenmalig wordt gebruikt en wordt toegevoegd aan een gehasht of versleuteld blok. De nonce is het nummer waar de miners naar op zoek zijn, om een blok te kunnen vinden en vervolgens een beloning te kunnen ontvangen. Nonces binnen het netwerk zijn echter moeilijk te vinden. Met andere woorden: er is veel rekenkracht voor nodig. Het proces van het raden van de hash begint in de block-header.
Moeilijkheidsgraad
Als onderdeel van een standaard mining-proces wordt de block-header herhaaldelijk gehasht door miners, door de nonce-waarde te wijzigen. De nonce binnen het Bitcoin-netwerk is een 32-bits (4-byte) veld, waarvan de waarde wordt aangepast door de miners, zodat de hash van het blok kleiner of gelijk is, aan het huidige moeilijkheidsdoel (difficulty target) van de blockchain. Bij het uitproberen van alle nonce-waarden is de kans op succes 1 gedeeld door de moeilijkheidsgraad.
Proof of Work
Iedere wijziging in de blokgegevens maakt de blokhash compleet anders. Men gaat er vanuit dat het onhaalbaar is om te voorspellen welke combinatie van bits, tot de juist hash zal leiden. Daarom worden er veel verschillende nonce-waarden uitgeprobeerd. De hash wordt voor elke waarde opnieuw berekend totdat er een hash wordt gevonden, die kleiner is dan of gelijk is aan het ‘vereiste doel’ van het netwerk. Dit vereiste doel wordt weergegeven als de moeilijkheidsgraad, waarbij een hogere moeilijkheidsgraad een lager doel vertegenwoordigt. Een ‘gouden nonce’ resulteert uiteindelijk in een hashwaarde, die lager is dan de moeilijkheidsgraad van het doel, waarmee het voldoet aan de vereisten voor het volgende blok. Doordat deze complexe wiskundige berekeningen veel tijd en middelen vereisen, vormt het genereren van een nieuw blok (met de juiste nonce-waarde), een solide en betrouwbaar ‘bewijs van werk’. Oftewel: Proof of Work.
Beloning
Na de Proof of Work ontvangen de individuele miners – of de miners die collectief samenwerken in een mining pool – hun beloning in Bitcoins. Door het uitvoeren van de Proof of Work hebben ze het blockchainnetwerk onderhouden en beveiligd. Zonder de inspanningen van de miners zouden de Bitcoin-transacties niet op een veilige en betrouwbare manier kunnen worden uitgevoerd.
Op de hoogte blijven van de ontwikkelingen op het gebied van blockchaintechnologie? Meld je dan nu aan voor de blogpost!