O bug de overflow de 2010 e a divisão de cadeia de 2013

Os dois piores bugs da história do Bitcoin, e como a rede se recuperou de ambos.

15 de agosto de 2010: 184 mil milhões de bitcoin

O bloco 74.638 continha uma transação com duas saídas de 92.233.720.368,54 BTC cada. A soma era tão grande que causou um overflow de inteiros: a verificação do software de que as saídas não excedem as entradas foi enganada. Cerca de 184 mil milhões de moedas apareceram do nada. A falha está catalogada como CVE-2010-5139.

A correção

Usuários notaram em horas («Strange block 74638» no BitcoinTalk). Uma versão corrigida, 0.3.10, tornou tais transações inválidas. Mineradores mudaram, uma nova cadeia ultrapassou a má, e o bloco foi orphaned. As moedas inventadas desapareceram com ele.

11 de março de 2013: um fork acidental

A versão 0.8 substituiu a sua base de dados. Versões mais antigas bateram num limite oculto de lock da base de dados e rejeitaram o bloco 225.430, que a 0.8 aceitou – uma divisão de cadeia. Segundo o post-mortem do BIP 50, os pools BTC Guild e Slush fizeram downgrade para 0.7, «despite the fact that this caused them to sacrifice significant amounts of money», e a rede reuniu-se. Ocorreu um double-spend de teste; não foi malicioso.

O que aprendemos

  • Bugs são encontrados porque milhares de pessoas verificam a cadeia.
  • Código de consenso deve ser mudado com extremo cuidado – uma lição por trás do desenvolvimento cauteloso do Bitcoin hoje.
  • A regra de oferta sobreviveu ao seu pior teste.