Este é o terceiro artigo em uma série sobre a tecnologia de criptomoedas. Comece pelo primeiro para acompanhar desde o começo.
Uma blockchain criptográfica é útil em qualquer situação que requeira uma estrutura de dados com garantia de imutabilidade. Apenas com uma blockchain dessa natureza, já é possível construir uma moeda digital pública permissionada: uma moeda que apenas uma entidade central ou alguns participantes confiáveis possam modificar mas que qualquer outro nó possa verificar a integridade.
A transmissão de dados, no caso de uma moeda digital centralizada, é fácil: basta que a autoridade principal publique os blocos em um local conhecido pré-estabelecido. Por exemplo, uma moeda digital baseada em blockchain mas controlada por um governo poderia ser inteiramente publicada em um site oficial.
Já para criar uma moeda decentralizada é necessário que diversos participantes coordenem a troca de informações dos blocos. Há, portanto, a necessidade de se estabelecerem protocolos para a criação de uma rede distribuída.
Estruturas de Dados
A estrutura básica de troca de informações em uma criptomoeda distribuída é a própria estrutura de um bloco da blockchain. No Bitcoin e moedas derivadas, o bloco é sempre representado de forma binária: hashes, endereços e scripts são sempre armazenados em sua reprentação binária crua.
Por exemplo, o id do bloco anterior (o hash do cabeçalho no caso do Bitcoin e Decred) que normalmente é exibido em um explorador da blockchain como um texto hexadecimal de 64 caracteres (00000000000000039a5e5c5…) é armazenado como array de 32 bytes, cuja interpretação é a de que esse array representa um número de 256 bits.
Valores de transações são representados como números inteiros de 64 bits (daí o valor mínimo no Bitcoin de 1 satoshi ou 1 atom na Decred), scripts são arrays binários dos opcodes, e assim por diante.
A maior parte das outras estruturas de dados usadas na rede de uma criptomoeda são derivadas das informações necessárias para a montagem de um bloco. Algumas outras estruturas auxiliares (como endereços IP, layout de mensagem, etc) também são pré-estabelecidas pelo criador da moeda.
Protocolo de Comunicação
Todo evento da rede provoca uma grande troca de informações entre seus participantes. Exemplos de eventos de uma criptomoeda decentralizada incluem:
- Notificação de que um novo bloco foi minerado;
- Inserção de uma transação que deve ser minerada;
- Adição de um novo participante full node na rede.
No caso do Bitcoin, o protocolo utilizado é aquele conforme programado inicialmente por Nakamoto e que foi evoluindo de acordo com os interesses dos diversos programadores que vieram depois. Não houve um plano, projeto ou documentação inicial substancial, portanto considera-se que a implementação de referência é o protocolo.
Toda mensagem trocada entre pares da rede segue uma estrutura simples:
A sub-estrutura do payload de uma mensagem depende do comando específico. O cliente de referência do bitcoin utiliza diversas mensagens para permitir a troca de blocos, transações e outras funcionalidades necessárias:
Descoberta de Pares
Um dos elementos mais fundamentais de um protocolo distribuído é a descoberta de outros participantes da rede, para que seja possível a entrada e saída de pares de forma dinâmica.
No caso da Decred duas estratégias são utilizadas para descoberta de pares: listas de nós seeds fornecidas via DNS e troca de listas de pares.
O bootstrap de um novo nó completamente novo normalmente se inicia consultando uma lista de domínios pré-programados no software. Esses domínios retornam IPs de possíveis participantes da rede.
Após se conectar em um (ou vários) desses nós iniciais, um novo cliente pode requisitar uma lista de outros full nodes conhecidos e assim aumentar a sua lista peers. Um cliente qualquer normalmente abre conexões com diversos pares de forma aleatória, para que seja possível ter uma visão completa e atualizada da rede.
Os vários full nodes abertos (ou seja, que podem ser livremente conectados por terceiros) contribuem para a rede de uma criptomoeda, aumentando sua conectividade e resiliência contra particionamento. Nós problemáticos ou mal-comportados normalmente acabam banidos por receberem poucas conexões.
Conclusão
A arquitetura da rede distribuída de uma criptomoeda é ponto-a-ponto, com alguns nós populares conhecidos como sementes que são importantes, mas não indispensáveis para seu funcionamento.
O protolo de comunicação entre nós não utiliza um padrão conhecido (como SOAP ou REST) mas sim um formato binário próprio, embora simples e expansível o suficiente para que seja utilizado indefinidamente no futuro.
Esse foi o terceiro artigo sobre a pilha tecnológica de criptomoedas. Para acompanhar os próximos lançamentos, assine meu feed RSS, minha newsletter, ou meu facebook.