Der Overflow-Bug 2010 und der Chain-Split 2013

Die zwei schlimmsten Bugs in Bitcoins Geschichte – und wie sich das Netz von beiden erholte.

15. August 2010: 184 Milliarden Bitcoin

Block 74.638 enthielt eine Transaktion mit zwei Outputs zu je 92.233.720.368,54 BTC. Die Summe war so groß, dass sie einen Integer-Overflow auslöste: die Softwaresprüfung, dass Outputs die Inputs nicht übersteigen, wurde ausgetrickst. Etwa 184 Milliarden Coins entstanden aus dem Nichts. Der Fehler ist als CVE-2010-5139 katalogisiert.

Der Fix

Nutzer bemerkten es innerhalb von Stunden („Strange block 74638“ auf BitcoinTalk). Eine gepatchte Version 0.3.10 machte solche Transaktionen ungültig. Miner wechselten, eine neue Kette überholte die schlechte, und der Block wurde orphaned. Die erfundenen Coins verschwanden mit ihm.

11. März 2013: ein versehentlicher Fork

Version 0.8 ersetzte ihre Datenbank. Ältere Versionen stießen an ein verstecktes Database-Lock-Limit und verwarfen Block 225.430, den 0.8 akzeptierte – ein Chain-Split. Laut dem BIP-50-Post-Mortem stiegen die Pools BTC Guild und Slush auf 0.7 zurück, „despite the fact that this caused them to sacrifice significant amounts of money“, und das Netz vereinte sich wieder. Ein Test-Double-Spend trat auf; er war nicht böswillig.

Was wir lernten

  • Bugs werden gefunden, weil Tausende die Kette prüfen.
  • Konsenscode muss äußerst vorsichtig geändert werden – eine Lehre hinter Bitcoins vorsichtiger Entwicklung heute.
  • Die Angebotsregel überstand ihren härtesten Test.