Como funciona o halving, o corte nas recompensas de bloco do Bitcoin sob a perspectiva da engenharia? Vamos explicar com a ajuda de Andreas Antonopoulos.
Em um vídeo recente, Antonopoulos explicou o código do Bitcoin Core que controla o corte da recompensa de bloco do Bitcoin (BTC) em detalhes.
Explicação linha a linha
Toda vez que um bloco Bitcoin é avaliado ou um novo bloco é extraído, a função GetBlockSubsidy é chamada. Seu objetivo é calcular o tamanho apropriado da recompensa do bloco. A linha 1240 avalia o ciclo do halving e divide a altura atual do bloco por 210.000; o intervalo entre a metade. No momento da publicação deste artigo, a altura do bloco é 629369, se a dividirmos por 210.000, obteremos 2,99. Como a variável que armazena esse valor é um tipo inteiro, os decimais são descartados. Usando essas informações, o código “sabe” que tivemos duas reduções. É por isso que o próximo halving ocorrerá no bloco 630000.
Satoshi continua sendo corrigido
As linhas 1242 e 1243 corrigem um erro que Satoshi cometeu no código original. Esse erro originalmente continuava diminuindo a recompensa pela metade do bloco após 64 cortes; o número total de halvings incorporadas no protocolo Bitcoin.
A linha 1245 multiplica a recompensa original do bloco de 50 por uma moeda constante, que é igual a 100.000.000 de Satoshis. Ironicamente, não há Bitcoins no código Bitcoin, apenas Satoshis.
A linha 1247 calcula a recompensa de bloco apropriada para a altura atual do bloco. Ele usa uma operação bit a bit que é mais eficiente que as operações matemáticas regulares. A recompensa em bloco calculada na Linha 1245 é então ajustada de acordo com a presente recompensa em bloco. Atualmente, isso seria assim:
50 * 100.000.000 / 22 = 1.250.000.000 Satoshis ou 12,5 Bitcoins.
Finalmente, a Linha 1248 retorna a recompensa de bloco apropriada quando chamada por outra função ou procedimento no código Bitcoin.
Até o halving finalmente chegar em 4 dias, ou 631 blocos, todos podemos respirar e apreciar a beleza do código do Bitcoin.
Por Michael Kapilkov