Hoe worden blokken gegenereerd binnen een blockchain?
Een blockchainnetwerk is een gedecentraliseerde digitale database, waarbinnen de transactiedata in virtuele blokken wordt opgeslagen. Deze transactie-blokken maken samen met andere blokken deel uit van een lange keten. De blokken verwijzen allemaal naar elkaar en worden permanent binnen het blockchainnetwerk vastgelegd. Een blokje registreert de meest recente transactie-blokken, die nog niet binnen het netwerk als ‘geldig’ zijn bestempeld. Wanneer een blok wordt gevalideerd – dus geldig wordt verklaard – dan wordt het aan de blokketen toegevoegd. Vervolgens wordt er een nieuw transactie-blok gecreëerd, dat moet worden gevalideerd en aan de keten moet worden toegevoegd. Een blok dat eenmaal door het blockchainnetwerk is geaccepteerd, kan daarna niet meer worden gewijzigd of verwijderd. De validatie (het geldig verklaren van de blokken) gebeurt door middel van een ‘mining-proces’.
Cryptografische versleuteling
Alle transactiedata van een blokje die binnen het blockchainnetwerk is opgeslagen, is cryptografisch versleuteld. De datablokken worden geïdentificeerd door lange nummerreeksen die cryptografisch versleutelde transactie-informatie bevatten, van voorgaande blokken van de blokketen en nieuwe transactie-informatie. Alle transactie-blokken – en de daarin verwerkte informatie – moeten eerst worden geverifieerd door het netwerk, voordat er nieuwe blokken kunnen worden gecreëerd.
Cryptocurrency’s
De blockchain is vooral bekend als achterliggende techniek van Bitcoin, maar ook andere cryptocurrency’s zoals bijvoorbeeld Ethereum, Litecoin, Dash, Monero, Verge, Cardano, Stellar, EOS en Polkadot, maken gebruik van blockchaintechnologie. De wijze waarop de transactie-blokken worden gevalideerd is afhankelijk van het blockchainnetwerk, waarbinnen de blokken worden gevalideerd. Wanneer er binnen de blockchain een cryptocurrency-transactie wordt uitgevoerd, dan houdt het netwerk automatisch in de gaten of de desbetreffende transactie op de juiste manier verloopt. De blockchain controleert welke partijen er bij de transactie betrokken waren en welk bedrag er precies werd verzonden.
Waaruit bestaan de blokken van de blockchain?
Ieder blok bevat verschillende ‘stukjes’ informatie. In de datablokken van de Bitcoin-blockchain zijn de volgende elementen verwerkt:
Een magisch getal
Het ‘magisch getal’ bevat een aantal specifieke waarden die het datablok identificeren, als onderdeel van de blokketen van een bepaalde crypto-activa. Bij Bitcoin bevat dit getal 4 bytes aan data. Het magische getal is sinds de ontwikkeling van Bitcoin (in 2009), opgenomen aan het begin van ieder blok. Wanneer dit getal wordt omgezet naar tekst, dan is dit niet leesbaar.
De blokgrootte
De blokgrootte bepaalt de maximale hoeveelheid data die in een blok kan worden opgeslagen, zodat slechts een beperkte hoeveelheid informatie in een blok past. De grootte van een blok komt overeen met de hoeveelheid gegevens die erin zijn opgeslagen. Elk blok kan dus maar een bepaald volume aan informatie bevatten. De maximale hoeveelheid data wordt aangeduid als de blokgroottelimiet. De blokgrootte van de blokken binnen de Bitcoin-blockchain is 1 megabyte. Deze hoeveelheid data is voldoende om meer dan 2000 transacties op te slaan. Een grotere blokgroottelimiet zou meer transacties per seconde mogelijk maken, maar kan tot verschillende problemen leiden, zoals hogere kosten of langere verwerkingstijden. Niet alle blockchainnetwerken hanteren dezelfde blokgroottelimiet als Bitcoin. De blokgroottelimiet kan per blockchain of cryptocurrency verschillen. Ethereum, bijvoorbeeld, kent geen vaste blokgroottelimiet maar gebruikt een gaslimiet om transacties te verifiëren en uit te voeren met ether (ETH).
De block-header
De block-header bevat informatie over het blok zelf en speelt een zeer belangrijke rol bij de identificatie van blokjes binnen het netwerk. De ‘kop’ van huidige blok is een willekeurig gegenereerd versleuteld nummer, op basis van de willekeurig gegenereerde versleutelde nummers van eerdere blokken én informatie van het huidige blok. De block-header bevat een aantal sets van zogenaamde ‘blokmetadata’. Deze blokmetadata is een 80-byte lange datastring die de volgende elementen bevat:
- Bitcoin-versienummer
- 32-bytes van de vorige blokhash
- Merkle-root
- Tijdstempel
- Moeilijkheidsdoel
- Nonce
Een Bitcoin-versienummer (4 bytes lang)
Dit versienummer wordt gebruikt om wijzigingen en updates tijdens het Bitcoin-mining-proces bij te houden. De hash van het vorige blok van de blokketen, verwijst naar het voorgaande blok of het bovenliggende blok.
32 bytes van de vorige blokhash
Dit betreft een verwijzing naar de ‘blokhash’ van het voorgaande transactie-blok. De belangrijkste ‘identificatie’ van een blok is de cryptografische ‘hash’ (die je kunt beschouwen als een digitale vingerafdruk). Deze cryptografische hash wordt gecreëerd door de block-header 2 maal te ‘hashen’. Dit hashen is het proces waarbij een bepaalde versleuteling wordt omgezet in een andere waarde. Een hashfunctie wordt gebruikt om nieuwe waarde te genereren, volgens een cryptografisch algoritme. Cryptografische algoritmen kunnen worden gebruikt voor het versleutelen en ontsleutelen informatie.
Eenrichtings-hash
Het resultaat van een hashfunctie wordt ‘hashwaarde’ of ‘hash’ genoemd. Een goede hashfunctie maakt gebruik van een zogenaamde ‘eenrichtings-hash-algoritme’. Dat wil zeggen dat de hash nooit terug kan worden omgezet in de oorspronkelijke versleuteling. Bij het hashen van de block-header wordt gebruikgemaakt van het SHA256-algoritme. De resulterende hash (van 32 bytes lang) is de blokhash. Voor dit hashing-proces (de wiskundige berekeningen) wordt alleen gebruikgemaakt van de block-header.
De Merkle-root (32 bytes lang)
De Merkle-root bestaat uit alle gehashte transactie-hashes binnen iedere transactie. Elke hash wordt vervolgens weer verder gehasht. De Merkel-root is een wiskundige methode, om de informatie van de zogenaamde ‘Merkle-tree’ te verifiëren. De Merkle-tree is een wiskundige gegevensstructuur die helemaal is samengesteld, uit de hashes van verschillende blokken en dient in principe als een samenvatting van alle transacties in een blok. De Merkle-root zorgt in feite voor een efficiënte en veilige manier, om de inhoud van de blokjes te verifiëren.
Een tijdstempel (4 bytes lang)
De tijdstempel – of ‘timestamp’ – is in de blokken opgenomen, zodat iedereen binnen het netwerk een permanent, gecodeerd verslag kan zien van de exacte tijdstippen, waarop transacties binnen de blockchain hebben plaatsgevonden.
Het moeilijkheidsdoel (4 bytes lang)
Het moeilijkheidsdoel speelt een belangrijke rol bij het bepalen van de zogenaamde ‘moeilijkheidsgraad’ binnen het blockchainnetwerk. De moeilijkheidsgraad binnen de Bitcoin-blockchain is gekoppeld aan de hoeveelheid beschikbare computerkracht/rekenkracht (hashrate). Als er meer crypto-miners naar blokken aan het delven zijn, dan wordt er ook meer rekenkracht aan het blockchainnetwerk geleverd. Hierdoor wordt het voor de miners gemakkelijker om nieuwe blokken te ontsleutelen. Om te voorkomen dat blokken te snel worden gegenereerd, wordt de moeilijkheidsgraad aangepast. Met andere woorden: het wordt moeilijker voor de crypto-miners om nieuwe blokjes te maken.
Aanpassing van de moeilijkheidsgraad
Als er op een gegeven moment minder crypto-miners naar blokken aan het delven zijn, dan betekent dat ook dat er minder rekenkracht aan het blockchainnetwerk wordt geleverd. Hierdoor wordt het moeilijker om blokjes te ontsleutelen. Om te voorkomen dat blokken te traag worden gegenereerd, wordt de moeilijkheidsgraad binnen de blockchain aangepast. Met andere woorden: het wordt gemakkelijker voor de crypto-miners om nieuwe blokken te maken. Het moeilijkheidsdoel bepaalt automatisch – op basis van de beschikbare hashrate – wat er met de moeilijkheidsgraad moet gebeuren. Een doel met een hogere moeilijkheidsgraad betekent dat blokken eenvoudiger en sneller te delven zijn. Een doel met een lagere moeilijkheidsgraad betekent dat blokjes moeilijker te delven zijn. Deze ‘doelhash’ geeft aan hoe lastig het is om de zogenaamde ‘nonce’ op te lossen.
De nonce (4 bytes lang)
De nonce is het enige getal binnen de block-header dat kan worden gewijzigd. Het is een belangrijke waarde die de crypto-miners binnen het Bitcoin-netwerk kunnen wijzigen, om vervolgens verschillende permutaties (de herschikking van een reeks getallen) te creëren en een juiste hash in de getallenreeks te genereren. De nonce is het gecodeerde nummer dat de crypto-miners moeten oplossen om een blokje te verifiëren. Tijdens het mining-proces worden willekeurige getallen gebruikt om de nonce in de hash te ‘raden’. De hash is opgelost als de nonce – of een lager nummer – word geraden. Wanneer een nonce eenmaal is geverifieerd, wordt het datablok aan de blockchain toegevoegd. Daarna genereert het blockchainnetwerk een nieuw blok met een block-header en wordt het hele proces herhaald.
De transactieteller
Een datablok bevat ook een zogenaamde transactieteller. Dit is een getal dat aangeeft hoeveel transacties er binnen een blok zijn opgeslagen. De transactieteller is een eenvoudig geheel getal. Het getal is samengesteld uit waarden van de wiskundige schaal van één tot negen en laat het exacte aantal transacties zien, die op het huidige tijdstip in een blok zijn vastgelegd. Als de transactieteller bijvoorbeeld een waarde van 15 heeft, dan zal de transactielijst 15 enkele transacties opslaan.
Uitgevoerde transacties
Elk blok bevat een digitale lijst van alle uitgevoerde voorgaande transacties binnen de blockchain. Nadat de transacties door de transactieteller zijn opgeslagen, worden ze aan de lijst toegevoegd.
Langste keten regel
Binnen de Bitcoin-blockchain bestaat de zogenaamde ‘langste keten regel’. Die regel bepaalt dat de langste blokketen binnen het netwerk, wordt aangemerkt als de ‘geldige’ keten. Binnen het blockchainnetwerk kunnen meerdere blokketens bestaan. Dat komt door vertragingen die worden veroorzaakt, door de grote geografische afstand tussen de nodes (knoopunten), die de transactie-informatie opslaan en onderling binnen het netwerk distribueren. Als er meerdere blokketens binnen het netwerk met elkaar concurreren, dan wordt naar alle kortere ketens verwezen als ‘een ‘andere’ versie van de waarheid’. De blokketen waaraan de blokken sneller kunnen worden toegevoegd – en daardoor dus langer wordt – wordt door het netwerk gezien als ‘dé versie van de waarheid’. Deze blokketen is de ‘geldige’ keten, waaraan het volgende blokje wordt toegevoegd.
Proof of Work
De meeste megabytes binnen een blok zitten in het transactie-element. Dit element bevat de meeste informatie. In opslaggrootte wordt het transactie-element opgevolgd door de block-header. Het proces waarbij de crypto-miners nieuwe blokken binnen het blockchainnetwerk proberen te genereren, is een zeer arbeidsintensief proces. Het mining-proces – het valideren van de blokjes – zorgt ervoor dat er binnen de blockchain overeenstemming wordt bereikt, over alle transacties die aan het netwerk worden toegevoegd. Dit is de zogenaamde ‘consensus’. Het mining-proces waarbij de blokken worden gevalideerd, vertegenwoordigt het consensus-mechanisme. Niet alle blockchainnetwerken en cryptocurrency’s hanteren hetzelfde consensus-mechanisme om blokken te valideren. Daar zijn verschillende methoden voor. Het consensus-mechanisme van de Bitcoin-blockchain wordt aangeduid als Proof of Work (PoW)
Decentralisatie van transacties
Nadat de Proof of Work heeft plaatsgevonden – de crypto-miners hebben hun werk gedaan en er is een nieuw blok gevalideerd – dan wordt de blokketen verspreidt door het Bitcoin-netwerk. Die verspreiding wordt geregeld door de nodes. Deze knooppunten beschikken over een kopie van de huidige blokketen en communiceren continue met elkaar. Hierdoor beschikken alle nodes over exacte dezelfde informatie. De verspreiding van dezelfde gegevens naar alle knooppunten zorgt voor de decentralisatie van transacties. Wanneer iemand de informatie op een van de nodes zou willen wijzigen, dan zou hij of zij die informatie op alle andere knooppunten moeten wijzigen. Doordat dit in principe niet mogelijk is, kan de betrouwbaarheid van de informatie binnen de blockchain worden gewaarborgd.
Op hoogte blijven van de ontwikkelingen op het gebied van blockchaintechnologie? Meld je dan nu aan voor de blogpost!