blk.dat

Os arquivos que armazenam a blockchain bruta no disco

Os arquivos blk.dat no diretório ~/.bitcoin/blocks/ contêm os dados brutos dos blocos recebidos pelo seu nó Bitcoin Core. Esses arquivos basicamente armazenam a blockchain inteira.

Localização

Onde a blockchain é armazenada no seu computador?

A localização dos arquivos brutos depende do seu sistema operacional. Estes são os locais padrão:

Linux:   ~/.bitcoin/blocks/
Mac:     ~/Library/Application Support/Bitcoin/blocks/
Windows: C:\Users\[usuario]\AppData\Roaming\Bitcoin\blocks\

Você pode mudar a localização do diretório de dados definindo a opção datadir=<dir> no arquivo de configuração bitcoin.conf.

Nomes dos Arquivos

Como os arquivos da blockchain são organizados?

Todo bloco que seu nó recebe é anexado a um arquivo blk.dat. Mas, em vez de toda a blockchain ficar em um único arquivo gigante, ela é dividida em vários arquivos blk*.dat. Seu nó primeiro adiciona blocos ao blk00000.dat, depois ao blk00001.dat quando o anterior enche, e assim por diante.

O tamanho máximo de um arquivo blk.dat é 128 MiB (134.217.728 bytes), definido por MAX_BLOCKFILE_SIZE.

Exemplo

Como é um bloco bruto?

Os dados nos arquivos blk.dat são armazenados em binário (um monte de 1s e 0s, não texto legível). Mesmo assim, podemos olhar o bloco gênese lendo os primeiros 293 bytes do blk00000.dat. Aqui os campos estão separados:

f9beb4d9 <- magic bytes
1d010000 <- tamanho
01000000 <- versão
0000000000000000000000000000000000000000000000000000000000000000 <- bloco anterior
3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a <- raiz de merkle
29ab5f49 <- tempo
ffff001d <- bits
1dac2b7c <- nonce
01 <- contagem de transações
01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000 <- transações

Estrutura

Qual é a estrutura de um bloco bruto?

Os dados acima podem ser divididos em cinco partes: magic bytes (4 bytes, marcador de início), tamanho (4 bytes little-endian, o tamanho do bloco), cabeçalho do bloco (80 bytes), contagem de transações (compact size) e as transações.

O campo tamanho é o que permite descobrir quantos bytes ler para obter o bloco inteiro. O tamanho é indicado como 1d010000 (little-endian). Convertendo para big-endian temos 00011d, e em decimal são 293 bytes.

Ícone Ferramenta Little Endian
Ícone Ferramenta

Little Endian

Converta um número entre as ordens de bytes big-endian e little-endian.

Tamanho:
Ícone Ferramenta Conversor de Números
Ícone Ferramenta

Conversor de Números

Converta um número entre bases diferentes (binário, decimal, hexadecimal).

0b
0 dígitos
0d
0 dígitos
0x
0 dígitos

Para exibir os bytes hex de um arquivo binário no Linux, você pode usar comandos como hexdump -C blk00000.dat ou od -A x -t x1z blk00000.dat.