El bug de overflow de 2010 y la división de cadena de 2013

Los dos peores bugs de la historia de Bitcoin, y cómo la red se recuperó de ambos.

15 de agosto de 2010: 184.000 millones de bitcoin

El bloque 74.638 contenía una transacción con dos salidas de 92.233.720.368,54 BTC cada una. La suma era tan grande que provocó un desbordamiento de enteros: la comprobación del software de que las salidas no superen las entradas fue engañada. Aparecieron unos 184.000 millones de monedas de la nada. El fallo está catalogado como CVE-2010-5139.

La corrección

Los usuarios lo notaron en horas («Strange block 74638» en BitcoinTalk). Una versión parchada, 0.3.10, hizo inválidas esas transacciones. Los mineros cambiaron, una cadena nueva adelantó a la mala, y el bloque quedó huérfano. Las monedas inventadas desaparecieron con él.

11 de marzo de 2013: un fork accidental

La versión 0.8 sustituyó su base de datos. Las versiones antiguas topaban con un límite oculto de bloqueo de base de datos y rechazaban el bloque 225.430, que 0.8 aceptaba – una división de cadena. Según la post-mortem del BIP 50, los pools BTC Guild y Slush bajaron a 0.7, «despite the fact that this caused them to sacrifice significant amounts of money», y la red se reunió. Ocurrió un doble gasto de prueba; no fue malicioso.

Lo que aprendimos

  • Los bugs se encuentran porque miles de personas comprueban la cadena.
  • El código de consenso debe cambiarse con extremo cuidado – una lección detrás del desarrollo cauteloso de Bitcoin hoy.
  • La regla de oferta sobrevivió a su peor prueba.