Um blockchain é um banco de dados formado por uma sequência de entradas chamadas blocos.
Blockchains têm uma característica especial pela qual qualquer tentativa de modificar uma de suas entradas modificaria toda a cadeia.
Trata-se, portanto, de uma estrutura de dados imutável, que armazena blocos em ordem cronológica de inserção.
Isso torna o blockchain um meio de armazenamento perfeito para registros financeiros que precisam ser auditados, como transações Bitcoin.
Na verdade, Bitcoin foi a primeira aplicação amplamente adotada de blockchains para manutenção de registros financeiros.
Cada entrada em uma blockchain é chamada de bloco, que é uma estrutura de dados que contém um cabeçalho e uma carga útil.
Cada cabeçalho blockchain deve ter um campo que aponte para o bloco antes. O link de cada bloco para o bloco antes forma a cadeia de blocos.
O primeiro bloco não tem uma entrada anterior para apontar. Portanto, ele aponta para trás para nada, o que o torna uma entrada única. É o único bloco cujo campo de cabeçalho HashPrevBlock
é todos zeros.
Devido ao seu papel único, o primeiro bloco em cada blockchain recebe um nome especial: o Genesis Block.
A estrutura de dados do bloco é relativamente simples. Geralmente consiste em alguns metadados e uma carga útil.
Os metadados são armazenados em uma seção chamada cabeçalho do bloco e geralmente inclui um carimbo de data/hora de bloco, o hash de bloco exclusivo, o hash do bloco anterior, a raiz do merkle e vários outros campos. Cada implementação blockchain pode adicionar ou omitir diferentes campos de cabeçalho. O formato dos cabeçalhos de bloco não é padronizado.
A carga útil é geralmente uma versão binária dos blocos no mesmo formato que viajam através da rede P2P.
Os blocos podem ser de qualquer tamanho arbitrário. Não há tamanho de bloco predefinido ou um padrão geral para tamanhos de bloco.
De pequenos blocos de tamanho kilobyte para vários gigabytes grandes. Algumas blockchains nem sequer limitam o tamanho do bloco, permitindo que dados de tamanho arbitrário sejam armazenados.
Como sempre, há um trade-off entre o tamanho do bloco e a eficiência. Fazer blocos muito grandes exigirá mais tempo de processamento para calcular a assinatura (hash) de cada bloco. Blocos grandes também exigem mais transações para preenchê-los completamente.
Os dados armazenados em blocos podem ser scripts de transação simples, como aqueles armazenados em Bitcoin Core, contratos inteligentes (como em Ethereum, Tezos e outros), arquivos de todos os tipos, imagens e até filmes (como o caso com Bitcoin SV quando usado por aplicativos como Twetch).
Portanto, é conveniente escolher blocos de tamanho adequado para armazenar o tipo de dados exigido por cada aplicativo específico.
Por exemplo, se a entrada média esperada for apenas alguns bytes grandes, como transações Bitcoin, então os blocos podem ser limitados ao intervalo de megabytes e ainda ser capazes de armazenar uma quantidade razoável de entradas.
Se, por outro lado, um aplicativo específico exigisse objetos binários grandes (BLOB’s) para ser armazenado no blockchain, talvez um tamanho de bloco maior seria conveniente.
Blocos em si devem ser armazenados em algum lugar nos computadores dos usuários.
No Bitcoin Core, e seus inúmeros forks, um diretório chamado blocks/
sob o diretório de dados conterá dados recebidos da rede. Isso inclui os blocos brutos e arquivos de índice projetados para acessar rapidamente os dados do bloco.
No Bitcoin Core, cada bloco é armazenado em arquivos regulares e contém todas as transações Bitcoin recentemente extraídas dos blocos mais recentes.
Outras criptomoedas podem usar diferentes sistemas de armazenamento, como bancos de dados SQLite ou Berkeley.
Não há nenhum requisito definido para armazenamento em bloco, desde que cada novo bloco faça referência criptograficamente ao anterior e a integridade seja garantida.
As transações armazenadas em blocos podem estar fora de ordem cronológica, mas os próprios blocos são sempre encontrados em ordem de inserção. A marcação de carimbo de data/hora quando o bloco foi extraído sempre aumenta.
Os dados armazenados em blocos e comprometidos com o blockchain, não podem ser adulterados de forma alguma, independentemente de como os dados são armazenados no disco.
Qualquer bit que seja alterado, em qualquer bloco na cadeia, alteraria toda a assinatura da cadeia e permitiria que todos os outros participantes da rede detectem imediatamente a modificação.
Cada bit de informação contida em um blockchain passa por um processo conhecido como hashing criptográfico.
Este é um processo seguro e bem testado que é revisado por pares por criptanalistas de todo o mundo. O algoritmo é escolhido de tal forma que não resulte em colisões, quando o mesmo código hash é gerado para diferentes partes de informação.
Hash também é executado de forma que o código resultante não pode ser usado para recuperar os dados originalmente hash. Dizemos que o hashing é um processo unidirecional.
Cada bloco terá um hash de assinatura que é universalmente único e impossível de reproduzir, exceto se você tiver conhecimento dos dados originais contidos no bloco, armazenados exatamente na mesma ordem.
Esse último detalhe é muito importante. Por exemplo, se você pegou exatamente as mesmas transações e as armazenasse em uma ordem diferente dentro de um bloco, o hash resultante seria diferente. Nesse caso, mesmo que o bloco contenha exatamente os mesmos dados de transação, a ordem com a qual eles são armazenados é diferente e isso gera uma assinatura diferente.
Isso ilustra como blockchains não permitem que nenhuma parte dos dados seja modificada, nem mesmo a ordem com a qual dados idênticos são armazenados.
Como vimos, Blockchain é um tipo especial de banco de dados que não permite qualquer tipo de modificação de dados.
Os blocos são registrados em ordem cronológica e esta ordem não pode ser modificada.
Portanto, blockchains provam não apenas que os dados são válidos, mas também em que momento os dados foram inseridos.
Por esta razão, Blockchains pode ser usado como “prova de conhecimento” de informações.
Usando um blockchain você pode provar que você sabia algo em um determinado momento no tempo. Isso foi usado pelo criador do próprio Bitcoin, quando ele codificou a seguinte manchete de jornal no primeiro bloco Bitcoin já extraído:
The Times 03/Jan/2009 Chanceler à beira do segundo resgate para os bancos
A famosa manchete é uma prova de conhecimento com data carimbada em 03 de janeiro 2009.
Isso prova que Satoshi Nakamoto teve acesso a essa informação (um jornal) nessa data. O carimbo de data/hora não pode ser modificado.
Se você deseja provar que você teve acesso a algumas informações em algum momento no tempo, tudo o que você precisa fazer é hash essa informação e armazená-la em um blockchain. No futuro, tudo o que você precisa fazer é publicar sua mensagem original e seu hash para que qualquer pessoa possa verificá-la.
As transações financeiras são naturalmente adequadas para serem armazenadas em blockchains.
As transferências de dinheiro acontecem cronologicamente e um registro seguro, muitas vezes permanente, deve ser mantido de cada operação.
Se a ordem das operações fosse alterada, toda a cadeia de blocos seria considerada adulterada. Os valores envolvidos, bem como outros detalhes da transação, também são impossíveis de adulterar.
Isso torna o blockchain perfeito para transações em dinheiro digital.
Quando usado em sistemas descentralizados, blockchains permitem o tipo de criptomoedas que agora conhecemos como Bitcoin, Dogecoin, Cardano ADA e outras moedas alternativas (altcoins).
Bitcoin foi a primeira aplicação bem sucedida de blockchain como um mecanismo de armazenamento e contabilidade financeira descentralizada.
Cada bloco Bitcoin armazena transações na ordem que um minerador usou para montar o bloco. Essas transações não são necessariamente em ordem cronológica dentro do bloco, mas os blocos são organizados em ordem cronológica, um após o outro.
Um bloco é comprometido no blockchain Bitcoin uma vez por 10 minutos, em média. Este período de tempo é fixado pelo código-fonte do Bitcoin Core e não pode ser alterado.
Como o hash para cada novo bloco depende do hash do bloco anteriormente mais recente, se algum pedaço de dados fosse modificado em qualquer bloco anterior, essa alteração se propagaria imediatamente para a frente da cadeia. O hash de bloco mais recente mudaria repentinamente e a rede de verificação de nós alertaria imediatamente os usuários de que algo inesperado tinha acontecido.
Embora as criptomoedas alternativas sejam implementadas de várias maneiras diferentes, a maioria deles segue a mesma idéia básica que o Bitcoin.