Olá, pessoal. Tudo bom?
Alguém pode me tirar uma dúvida.
Aprendi que o campo version contido nos block headers dos blocos da mainnet representam qual versão do protocolo bitcoin as transações (e o próprio bloco) atendem, possuindo atualmente 4 versões resultantes de alguns soft forks.
No entanto, ao rodar o getblock no RPC do Bitcoin Core estando na testnet noto que os valores contidos no campo version dos block headers são valores grandes. O que isso significa?
Não sei exatamente como que o bitcoin core retorna o valor da versão, mas no protocolo ela fica em formato little endian, ou seja, os bytes ficam guardados em formato reverso na memória, e se convertidos para formato decimal sem antes revertê-los para big endian é possível que o número que você veja seja gigantesco.
Ex: versão número 4 em hexadecimal seria 0x04000000 em little endian, e se convertermos este hexdecimal diretamente para decimal isto seria equivalente a 67108864.
Em contrapartida se convertermos para big endian ele ficaria como 0x00000004, e desta forma ao se converter para decimal você teria o número 4 como esperado.
Entendi.
O que me chamou a atenção, no entanto, é a diferença do valor contido nos blocos da mainnet e da testnet. Na mainnet, o valor do bits é um valor pequeno (1, 2, etc.), mas na testnet esse valor é realmente gigantesco tanto em hexadecimal quanto em decimal.
Aqui está uma imagem dos metadados de um bloco na testnet