Bijna een Bitcoin Unlimited hard fork
Als gevolg van het draaien van niet goed geteste code is er afgelopen maandag een ongeldig block gemined. Het block was groter dan de op dit moment maximale blockgrootte van 1 MB en werd dus geweigerd door het netwerk. Het block werd gemined door een miner die de Bitcoin Unlimited software draait.
Bitcoin Unlimited is een alternatieve client, waarvan de makers de transactiecapaciteit van Bitcoin willen uitbreiden door grotere blocks te minen. Op het moment van schrijven bestaat ongeveer 20% van de rekenkracht op het netwerk uit Bitcoin Unlimited clients. De overige 80% draait Bitcoin Core, die juist door verbeteringen zoals Segregated Witness en het Lightning Network Bitcoin wil schalen naar grotere transactieaantallen.
Bitcoin blocks per client van de afgelopen 7 dagen (bron):
- Core: 798
- Unlimited: 194
- Rest: 8
De exacte fout zat in de ruimte die wordt gereserveerd voor de coinbase-transactie in een block hier werd in de Bitcoin Unlimited client niet voldoende rekening mee gehouden. In de Bitcoin Core client staat met een comment specifiek aangegeven dat hier ruimte voor gereserveerd dient te worden. Het block in kwestie, nummer 450.529, zat voor toevoeging van de coinbase-transactie dus al vol met normale transacties toen de coinbase-transactie daarbij kwam werd de limiet van 1 MB overschreden.
Het ongeldige block, met een grootte van 1.000.023 bytes, werd door een fout in de code van Bitcoin Unlimited gemined. Doordat het block niet geaccepteerd werd door de rest van het netwerk, ging alle rekenkracht die erin gestoken is om het block te minen dus verloren.
Alle nodes in het netwerk die Bitcoin Unlimited draaien, op dit moment zo'n 460 ten opzichte van 4760 Bitcoin Core nodes, gaven het ongeldige block door aan de andere nodes in het netwerk. Een bijkomend gevolg hiervan was dat deze nodes buitengesloten werden door de rest van de nodes op het netwerk de Unlimited nodes gaven immers ongeldige data door. Er is uiteindelijk geen hard fork ontstaan omdat ook veel van de Bitcoin Unlimited nodes nog niet ingesteld stonden op blocks groter dan 1 MB. Hierdoor werd er door zowel de Core miners als veel van de Unlimited miners gewerkt aan het uitbreiden van de chain zonder het te grote block.
Dit voorval is een goede demonstratie van wat er mis kan gaan door het niet grondig testen van code of het onvoorzichtig uitvoeren van een hard fork. De Bitcoin Unlimited ontwikkelaars hebben de bug snel herkend en gerepareerd en een bericht geplaatst waarin gezegd wordt dat het geen bewuste poging tot het maken van een hard fork was.