Een beetje Bitcoin twee keer uitgeven? De ‘double spend’ van gisteren uitgelegd

Deze week vond er iets bijzonders plaats in de Bitcoin blockchain. Het leek er even op alsof er een double-spend plaatsvond, alsof een beetje bitcoin twee keer door dezelfde persoon werd uitgegeven. Uiteindelijk bleek het allemaal mee te vallen en ligt het genuanceerder.

Bitcoin betalingen

BitMEX Research maakte op Twitter melding van deze dubbele uitgifte. Iedere balans die je in een Bitcoin wallet afleest, bestaat in feite uit een heleboel kleine beetjes bitcoin. Dit noem je ook wel UTXO’s, unspent transaction outputs.

Koop gemakkelijk en snel Bitcoin bij Bitvavo. Ga aan de slag en betaal geen handelskosten voor je eerste aankoop tot €1.000 !

Door deze outputs te ondertekenen met de private key die erbij hoort, kun je deze toekennen aan een nieuwe eigenaar. Een balans van 0,5 BTC kan dus bestaan uit 0,15 BTC, 0,05 BTC en 0,30 BTC.

Vervolgens komt de transactie (een nieuw gegenereerde output) in de mempool terecht en is het wachten tot de miners deze oppikken en in een block meenemen.

Hier ging het gisteren mis, zo leek het. Het leek er even op alsof één betaling dubbel werd uitgegeven. Alsof één betaling door twee verschillende miners werd opgepikt en verwerkt. Duplicatie van de schaarse geld is natuurlijk niet de bedoeling, dus gingen op verschillende plekken de alarmbellen af. Zo ook bij Bitmex Research.

Mining en verwerken van betalingen

De situatie was als volgt: Zowel Slushpool als F2Pool mijnden block 666.833 op nagenoeg hetzelfde moment. Dit noem je ook wel een stale blocks: twee geldige blocken op bijna exact hetzelfde moment. Beide mining pools communiceren de vondst van het block met het netwerk van nodes, die dit verifieerden.

Intussen wordt er gewoon door gemined door andere miners. Uiteindelijk kiest het netwerk dan de langste chain en borduurt hierop verder. De transacties uit het stale block komen terug in de mempool.

Zoals je in onderstaand screenshot kunt zien, was Slushpool uiteindelijk de gelukkige.

Een beetje Bitcoin twee keer uitgeven? De 'double spend' van gisteren uitgelegd

Dubbele uitgave

Dan nu het stuk met de ‘dubbele betaling’. Het kan zo zijn dat een transactie in de ene kant van het netwerk plaats vindt, terwijl het ook een ogenschijnlijke tegenstrijdige transactie in de andere kant verwerkt. Hier kunnen twee zaken aan ten grondslag liggen:

  1. Iemand probeert moedwillig een beetje bitcoin dubbel uit te geven.
  2. De verzender gebruikte een zogenoemde RBF-functie voor de fee van de betaling.

Uiteindelijk bleek het te gaan om dat tweede scenario. RBF staat voor Replace By Fee. Je kunt hiermee een betaling extra transactiekosten meegeven om het zo ‘bovenin’ de mempool te krijgen. Door extra fees achter de betaling aan te sturen, is het waarschijnlijker dat een miner deze betaling wil verwerken. Hierdoor gebeurde het volgende:

In de verliezende chain vond een transactie plaats van 0.00062063 BTC naar het adres 1D6aebVY5DbS1v7rNTnX2xeYcfWM3os1va. In de winnende blockchain werd dezelfde input gebruikt om 0.00014499 BTC naar dit adres te sturen. Dat is tegenstrijdig en dus leek het even kort alsof er een dubbele uitgifte werd gedaan.

Echter: toen duidelijk werd dat het om een stale block ging, verviel de betaling in de kortste chain automatisch. Zo was er tóch geen gratis bitcoin gecreëerd vanuit het niets.

Lang verhaal kort: Iemand stuurde twee verschillende transacties van dezelfde herkomst, en ze werden tegelijkertijd in twee verschillende blocken opgenomen. Al snel werd de kortste keten ‘waardeloos’ geacht door het netwerk, en was dus alleen de andere transactie werd geldig. BitMEX concludeert dit als volgt:

“On closer inspection this is likley to be an instance of RBF, where the lower fee transaction won.”

Als de ontvanger niet op confirmations wilde wachten, zou kunnen zijn opgelicht. Maar al met werkt het netwerk dus precies zoals het moest doen.

Wil je meepraten over het nieuws? Kom dan eens langs in onze Telegram chat!

Lees meer over:
forkminingprivate key