processo
Em 15 de agosto de 2010 (ou seja, o segundo ano após o nascimento do Bitcoin, o bloco gênese nasceu em 3 de janeiro de 2009), alguém descobriu que no bloco 74638 do blockchain Bitcoin, uma transação Transação chocante. Esta transação apareceu 184 467 440 737,09551616 Bitcoins, dos quais 92,2 bilhões de Bitcoins foram enviados para dois endereços.
Como todos sabemos, o número total de Bitcoins é de 21 milhões, então porque é que estas duas transações são maiores que o número total de Bitcoins?
Este é provavelmente o incidente de vulnerabilidade mais grave na história do Bitcoin. Se este problema não for resolvido a tempo, o sistema Bitcoin pode ser destruído diretamente.
Princípio de estouro [motivo]
Como esse problema ocorreu? O princípio é realmente simples: um grande excesso de números é causado por codificação solta.
Quando éramos jovens, quando aprendemos a contar, usávamos o método de contar com os dedos.
Para contar de 1 a 10, dez dedos podem expressar até 10 (independentemente do uso de pés ou meios dedos). Se a contagem chegar a 11, 10 dedos não são suficientes e a representação dos dedos volta a 1. Este é o máximo). primitivo. Vamos entender o estouro de grandes números.
A representação do logaritmo do computador é semelhante e tem um limite máximo.
Para facilitar a expressão, usamos uint8 na linguagem Go como exemplo. Um uint8 representa um espaço de bytes. O intervalo de expressão é: bin(00000000) a bin(11111111), que é 0-255. Se ocorrer um overflow, o bit alto será descartado e começará em 0 novamente.
Demonstração de código:
Depois de entender isso, será mais fácil entender as vulnerabilidades do Bitcoin.
Correções de bugs
Três horas após a divulgação da vulnerabilidade, Satoshi Nakamoto e outros desenvolvedores de Bitcoin lançaram uma correção para a versão 0.3.1. Esta atualização introduziu uma lógica para rejeitar transações com valores de saída transbordantes. No bloco 74691, a versão corrigida do blockchain finalmente alcançou o blockchain vulnerável. Ou seja, cerca de 20 horas depois, o Bitcoin resolveu com sucesso este evento de crise mais significativo com um hard fork. Não há necessidade de descrever como reparar um grande número de códigos lógicos de overflow. Amigos que conhecem codificação devem saber disso.
Eu sou o ganha-pão do contrato, siga-me para obter mais informações sobre blockchain que você não conhece!