Analisador de Blockchain com 300 linhas em Python

imagem

Em 2015, quando as criptomoedas não haviam recebido tanta atenção do público em geral como agora, ocorreu-me descobrir em detalhes o que são blockchain, criptomoedas e Bitcoin em particular.

As tentativas de realizar uma análise detalhada do código fonte do projeto Bitcoin Core não foram bem-sucedidas, devido às condições iniciais bastante rigorosas que estabeleci para dizer "sim, agora eu sei o que é e como funciona" e um grande número de linhas de origem código que precisava ser entendido para considerar o resultado alcançado.

Eu tive que procurar outras maneiras. Além disso, no momento em que essa decisão foi tomada, o blockchain já estava totalmente carregado no meu computador local. E hoje não é tão rápido como era então.

E assim O cliente oficial do Bitcoin Core carregou todo o blockchain em uma pasta na máquina local; esses foram alguns arquivos que, conforme declarado nos documentos oficiais, continham tudo o que se chama Bitcoin. Os mais interessantes para mim foram os chamados arquivos RAW Blockchain Data (blk00000.dat ... blk01234.dat, etc. da pasta Bitcoin / blocks), ou seja, os arquivos de banco de dados blockchain como estão, em sua forma original.

O restante do conteúdo do catálogo é um índice de um banco de dados "bruto", dados para a contabilidade correta de saídas não gastas, configurações e uma carteira pessoal.

Para obter informações, parecia óbvio descobrir em que banco de dados de origem está armazenado, com base no qual o sistema local executa todas as etapas necessárias para garantir o funcionamento do blockchain dessa criptomoeda. Parte da tecnologia relacionada à rede não foi discutida neste artigo. Intencionalmente, me limitei à parte local e aos arquivos que armazenam os blocos.

A especificação do formato de blocos e transações está disponível em fontes abertas, na forma de descrições separadas dessas estruturas. Mas não foi possível encontrar nada que pudesse dar uma idéia completa de como interpretar os dados armazenados nos arquivos desse banco de dados blockchain muito "bruto" (RAW Blockchain Database).

A única opção, na minha opinião, era analisar a estrutura linear dos arquivos e apresentá-la na forma de alguma estrutura legível, o que deve fornecer uma compreensão completa de que tipo de fruta o Bitcoin é.

O resultado é um script escrito em Python com ~ 300 linhas, que converte os arquivos de dados "brutos" armazenados localmente blkXXXXX.dat em formato de texto sem formatação com uma indicação do que está contido nele e qual o significado de cada campo de dados. Os arquivos de texto resultantes são adequados para processamento e extração adicionais deles, por exemplo, todos os hashes de bloco, hashes de transações, endereços, valores de transações etc. para fins de análise e muito mais para que finalidade ...

A conveniência e a transparência do uso do analisador são garantidas, na minha opinião, com máxima visibilidade, devido à implementação por meio da conversão sequencial de dados de leitura de bytes.

Os analisadores de blockchain existentes na natureza têm muitos recursos, mas nenhum funciona diretamente com os arquivos do próprio banco de dados. É por isso que não me concentrei na implementação de nenhum interesse, como obter uma lista de endereços com saldos ou algo parecido, mas me limitei à implementação mais óbvia e simples da conversão direta de arquivos do formato interno em uma exibição de texto universal. Além disso, muitas vantagens, como a formação do conjunto UTXO (um conjunto de saídas não gastas) ou a formação de uma lista de endereços com saldos, já foram implementadas por mim para vários projetos.

Uma parte integrante deste trabalho é ajudar as partes interessadas a aprender sobre a tecnologia blockchain.

Sim, como se viu, o script também é adequado para a maioria das outras criptomoedas, como Dash, Dogecoin, Bitcoin Cash, Litecoin e outras altcoins, embora para isso você precise fazer alguns truques. Este artigo não planejava revelar esses truques.

Você pode fazer o download do analisador de blockchain no github .

Source: https://habr.com/ru/post/pt482978/


All Articles