begin
begin

Een van de vele mechanismen die ervoor zorgen dat Bitcoin goed kan functioneren, is de blockchain. Zoals je misschien hebt ontdekt in de artikelen op het Bitstack-blog, maakt de blockchain het mogelijk om de dubbele besteding van dezelfde bitcoinmunt (een zogenaamde UTXO) te vermijden.
Zoals de naam al doet vermoeden, bestaat deze blockchain uit blokken. In dit artikel onderzoeken we wat Bitcoin-blokken eigenlijk zijn en hoe elk blok is opgebouwd.
De blockchain is een register waarin alle Bitcoin-transacties worden vermeld. Het wordt in het protocol gebruikt, zodat elke gebruiker op de hoogte is van transacties in het verleden. Hierdoor kunnen we bewijzen dat er geen eerdere uitgaven aan bitcoins zijn gedaan en zo dubbele uitgaven vermijden.
Dit concept wordt heel eenvoudig uitgelegd in de Bitcoin White Paper van Satoshi Nakamoto met de beroemde zin:” De enige manier om te bevestigen dat er geen transactie is, is door op de hoogte te zijn van alle transacties. ”
Het doel van dit register is dus om transacties uit het verleden van een tijdstempel te voorzien. Om een uur aan deze informatie te kunnen besteden, groeperen we ze in blokken. Elk blok bevat de vingerafdruk van het blok dat eraan voorafgaat om ze onveranderlijk te maken, waardoor een soort ketting ontstaat. Daarom spreken we in het Engels over blockchain, of „blockchain”.

➤ Meer informatie over de rol van blockchain in Bitcoin.
Een Bitcoin-blok bestaat meestal uit twee afzonderlijke delen. De eerste is de koptekst, die 80 bytes aan metagegevens bevat. De tweede is de lijst met uitgevoerde transacties.
Sinds de SegWit-update van 2017 wordt de grootte van een blok bepaald door een virtuele eenheid genaamd weight. Het gewicht van een blok wordt berekend door de werkelijke grootte bij elkaar op te tellen tot drie keer de grootte, maar zonder getuigen (handtekeningen). De maximale limiet is 4 miljoen gewichtseenheden. In theorie kan een Bitcoin SegWit blok dus een maximale werkelijke grootte hebben van iets minder dan 4 MB. De werkelijke gemiddelde blokgrootte schommelt sinds 2017 echter normaal gesproken tussen 1 en 2 MB.
De komst van het Ordinals-protocol op Bitcoin begin dit jaar 2023 heeft dit gemiddelde tot een stijging beïnvloed. Sinds februari hebben Bitcoin-blokken een reële gemiddelde grootte van bijna 3 MB.
Het belangrijkste onderdeel van een Bitcoin-blok is de header. Als we het hebben over de vingerafdruk van een blok, of de hash ervan, is het inderdaad de koptekst die we twee keer hebben gepasseerd in de SHA256-hashfunctie.
Om de samenstelling van de koptekst van een blok te begrijpen, kun je het beste een echte kop bestuderen. Hier is informatie over blok nr. 714 254, gedolven door F2Pool op 15 december 2021:
.png)
Als je hetzelfde wilt doen op je Bitcoin-node, voer dan de opdracht „getblockheader” uit, gevolgd door de vingerafdruk van het gewenste blok op bitcoin-cli.
Dankzij dit commando ontdekken we verschillende elementen over het bestudeerde blok. Niet al deze informatie is opgenomen in de koptekst. De echte koptekst van het blok bestaat uit slechts 6 elementen:

Een Bitcoin-blokkop bevat alleen deze 6 elementen. De bestelling krijg een blockheader We ontvangen echter nog andere informatie die interessant kan zijn om te analyseren, maar die niet echt deel uitmaakt van de header zelf:
Nu we het eerste deel van het blok, dus de koptekst, hebben bestudeerd, gaan we samen naar het tweede deel van het Bitcoin-blok kijken.
Transacties in een Bitcoin-blok worden niet zomaar achter elkaar weergegeven. In plaats daarvan zijn ze georganiseerd in een cryptografische accumulator die een „Merkle-boom” wordt genoemd. Dit maakt het mogelijk om een Merkle-root te maken, wat een zeer kleine samenvatting is van alle transacties in het blok.
Het principe is vrij eenvoudig te begrijpen. Elke transactie wordt eerst via een hashfunctie doorgegeven. De resulterende hashes worden twee aan twee aaneengeschakeld (d.w.z. van begin tot eind). Vervolgens worden ze opnieuw door een hash-functie geleid. We zetten dit proces zo voort totdat we een enkele hash krijgen met de naam „Merkle root”.

Zoals eerder gezien, wordt deze Merkle-root vervolgens opgenomen in de blokkop. Hierdoor kunnen alle transacties op een verkorte manier in de koptekst worden weergegeven. De kleinste wijziging van een transactie uit het verleden verandert dus de Merkle-boom, dus verandert ook de Merkle-root, en dus verandert de blokkop en de voetafdruk ervan. Aangezien deze vingerafdruk in het volgende blok wordt gebruikt, wordt bij de kleinste wijziging van een eerdere transactie uiteindelijk de Bitcoin-blockchain verbroken.
Sinds 2017 en de introductie van SegWit bevatten Bitcoin-blokken eigenlijk 2 Merkle-bomen. De eerste bevat de transacties zonder hun getuige, en de tweede bevat de getuige voor elke transactie. De root van de tweede Merkle-boom is opgenomen in de Coinbase-transactie, zodat wijzigingen kunnen worden gedetecteerd.

📌 De coinbase-transactie is de eerste transactie in het Bitcoin-blok. Hiermee kan de winnende miner de bitcoins verzamelen die hij toekomt als beloning voor zijn mijnbouwwerk. Het bestaat uit de coinbase-beloning, die nieuwe bitcoins uitgeeft, en de transactiekosten die in het blok zijn inbegrepen.
Hier komt de naam „SegWit” vandaan, wat de afkorting is voor „Segregated Witness”, wat in het Frans „aparte getuige” betekent.
In het bovenstaande diagram kunnen we zien dat de getuigen, met de vermelding „WTX”, hun eigen Merkle-boom hebben. De wortel van deze boom wordt in de coinbase-transactie geplaatst. Transacties zonder hun getuigen hebben ook hun eigen Merkle-boom. De wortel van de tweede boom wordt in de kop van het blok geplaatst. Alle onderdelen van alle transacties in het blok worden dus gecondenseerd in de koptekst.
Blockchain wordt gebruikt op Bitcoin om dubbele uitgaven te voorkomen. Het werkt als een tijdstempelserver. Een blok is dus gewoon een groepering van Bitcoin-transacties met enkele metagegevens. De structuur is voornamelijk verdeeld in twee ruimtes: de kopboom en de Merkle-bomen.
De kop van een blok bestaat uit 6 elementen: de versie, de afdruk van het vorige blok, de Merkle-root, de tijdstempel, het moeilijkheidsdoel en de nonce.
Transacties worden daarentegen gegroepeerd in een Merkle-boom. Deze cryptografische accumulator produceert een root die in de kop van het blok wordt verhoogd om alles met elkaar te verbinden.

