Artigos

Guia completo do bitcoin (Parte 3)

Mais uma etapa sobre bitcoin e blockchain e vamos para a parte 3. Nesse artigo vou falar mais especificamente como funciona a arquitetura geral simplificada do blockchain e nodes

 

Arquitetura Blockchain

Na imagem acima, podemos ter uma noção básica de como funciona uma transação no blockchain do bitcoin. Abaixo, vou descrever cada etapa:

1 – Nessa etapa, uma pessoa envia uma transação para uma outra wallet;

2 – A transação vai para um bloco, o qual ainda precisa ser validado;

3 – Este bloco é replicado para que todos possam ver, analisar, validar ou recusar em caso de fraude;

4 – Os nodes validam o bloco em troca de recursos computacionais (processamento) através de uma corrida matemática;

5 – O bloco é adicionado a cadeia de blocos;

6 – A transação está completa.

Bem, esse é uma demonstração simples, mas como ele funciona de fato, é muito mais extenso e vou tentar me aprofundar o máximo possível nos próximos posts.

A arquitetura bitcoin é composta por alguns pontos específicos como:

  • Nodes
  • Criptografia
  • Chaves públicas e privadas — Wallets
  • Transações
  • Blocos
  • Mineração
  • Consenso
  • Imutabilidade

Abaixo, irei falar sobre o que é um node e todas suas características.

 

Node

Nodes, também conhecidos como nós, são vários equipamentos de diferentes tipos como computadores, celulares, tablets, etc, que armazenam as informações dos registros do blockchain e são interligados um ao outro. Cada node tem uma cópia exata do “livro-razão” do blockchain, ou seja, uma cópia idêntica de toda a cadeia de bloco, logo, de todas as transações. Dessa forma, já evita que alguém burle a rede alterando os registros somente no livro-razão do equipamento dele alegando ter feito alguma ação ou transferência que de fato não tenha acontecido, afinal, todos os outros nodes tem uma cadeia de blocos idênticas e somente ele um diferente. Como o restante dos nodes, com o mesmo registro são maioria, a alteração ilegal dele não é aceita pelos demais.

Os nodes da rede tem dois diferentes tipos:

Full node

Um node completo é um programa que valida totalmente transações e bloqueios. Quase todos os nodes completos também ajudam a rede, aceitando transações e blocos de outros full nodes, validando essas transações e bloqueios e, em seguida, retransmitindo-os para outros nodes completos.

A maioria dos nodes completos também atende clientes leves, permitindo que eles transmitam suas transações para a rede e notificando-os quando uma transação afeta sua carteira. Se não houver nodes suficientes para executar essa função, os clientes não poderão se conectar por meio da rede ponto a ponto — eles precisarão usar serviços centralizados.

Muitas pessoas e organizações se oferecem como voluntárias para executar nodes completos, usando recursos de computação e banda larga extra, mas mais voluntários são necessários para permitir que o Bitcoin continue crescendo.

 

Nodes leves ou parciais

Os nodes leves ou nodes parciais não armazenam o livro-razão completo. Em vez disso, eles usam um modo simplificado de verificação de pagamento (simplified payment verification — SPV), que exige apenas que eles baixem uma parte do Blockchain. Eles se conectarão a clientes de nó completo e usarão filtros para garantir que recebam apenas transações que sejam necessárias e relevantes para sua operação.

SPV é uma abordagem alternativa detalhada no documento original do Bitcoin, que é um cliente que baixa apenas os cabeçalhos de blocos durante o processo de sincronização inicial e, em seguida, solicita transações de nós completos conforme necessário. Isso é dimensionado linearmente com a altura da cadeia de blocos em apenas 80 bytes por cabeçalho de bloco ou até 4,2 MB por ano, independentemente do tamanho total do bloco .

Conforme descrito no white paper, a raiz de merkle (que entenderemos mais a frente em outro artigo) no cabeçalho do bloco junto com uma ramificação de merkle pode provar ao cliente SPV que a transação em questão está incorporada em um bloco na cadeia de blocos . Isso não garante a validade das transações incorporadas. Em vez disso, aumenta a quantidade de trabalho necessário para executar um ataque de gasto duplo.

Esse modo de node pode trazer algumas falhas. Caso queira entender melhor essas falhas, confira este link.

Um node pode também ser um minerador, o qual é fundamental para a validação de uma transação, porém, vamos falar sobre os mineradores em um tópico mais a frente.

É importante que tenhamos nós completos, caso contrário, iriamos ter muitos problemas. Mas como?

Vamos dar um exemplo. Meu amigo João decide um dia que ele quer tentar a sorte na mineração com um sistema modesto e uma conexão de banda larga razoável. Agora o software de mineração lhe oferece duas opções. Ou ele baixa toda a cadeia de transações e se comporta como um node completo, ou então ele escolhe economizar o tempo de download e armazenamento e baixa apenas uma parte do Blockchain localmente e se tornar um node parcial. Ele seria um minerador elegível em ambos os casos. Então, por que o João deveria utilizar mais do seu armazenamento local se ele também pode minerar gastando menos espaço? Não podemos esperar que cada minerador médio e com um sistema modesto de mineração simplesmente mantenha um registro de todas as transações que já foram adicionadas ao Blockchain, ou seja, ser um node completo. Todo mundo adora economizar, seja dinheiro, banda larga ou armazenamento local. Com João não é diferente.

Agora, se todo minerador escolher economizar em suas contas de banda larga e storage, poderemos no futuro ficar com muito poucos nós completos. Eles podem exercer uma influência indevida na rede, com os nós parciais tendo que se referir a eles para um repositório completo de dados. Isso faz você se perguntar se isso levará a centralizar a única tecnologia que criou a confiança entre as pessoas no conceito de descentralização. Paradoxo, não?

 

Armazenamento

Abaixo, conseguimos ter a noção do crescimento do volume da rede desde a sua criação. Podemos perceber um crescimento considerável em 2013 em relação a todos os anos anteriores e podemos ver um crescimento no volume do blockchain entre 2013 a 2018 de forma extraordinária.

Outro ponto de destaque é que entre 2009, onde ocorreu a primeira transação até meado de 2011, o blockchain não atingiu nem 100 MB. Já entre meado de 2011 até inicio de 2013, atingiu 4 GB.

Nos ultimos 5 anos, houve um crescimento de 167 GB, ou seja, um crescimento de aproximadamente 1.800% em 5 anos, como podemos ver abaixo

Se quiser consultar mais sobre o tamanho do blockchain do bitcoin, clique aqui.

 

Quantidade de nodes disponíveis

Hoje é difícil encontrar uma exatidão sobre quantos nodes estão funcionando na rede. Mas existe o site Bit Nodes que tenta descobrir essa quantidade.

O site usa o comando getaddr, que envia uma solicitação para um node, solicitando informações sobre peers ativos, conhecidos para ajudar a localizar potenciais nodes na rede. A resposta ao recebimento desta mensagem é transmitir uma ou mais mensagens addr com um ou mais pares de um banco de dados de pares ativos conhecidos. Ou seja, o site fica varrendo a rede a procura de nodes enviando uma mensagem e esperando uma resposta do node. A presunção típica é que um nó provavelmente estará ativo se tiver enviado uma mensagem nas últimas três horas. Nenhum dado adicional é transmitido com esta mensagem.

Um ponto de atenção é que o site não reconhece nodes com versão de software menor que Satoshi:0.8, o que, se existir, é uma quantidade bem pequena.

A quantidade de nodes encontrado pelo site hoje, 31/07/2018, são de 9419 nodes, como podemos ver na imagem abaixo:

Outra característica importante que o site nos dá, é onde se encontra a maior concentração de nodes no mundo. Como podemos também ver na imagem acima, a maior concentração está nos Estados Unidos (EUA). Alemanha vem logo em segundo, seguido da china, em terceiro.

 

Como os nodes se conectam entre si?

Os clientes do Bitcoin (nodes com software bitcoin) usam vários métodos para localizar outros clientes. O método principal é uma lista de nodes de uma conexão anterior com a rede. Esse modo funciona muito bem para tudo, menos para sua primeira conexão ou uma conexão depois de um longo período de desconexão.

Para o caso em que você não possui IPs anteriores conhecidos ou não são utilizáveis, o método de fallback primário é por seeds de DNS. Vários nomes de hosts (como dnsseed.bluematt.me ) são mantidos e resolvem para uma lista de endereços IP conhecidos como sendo nós em execução. Se isso falhar, o cliente tem uma lista de endereços IP que acredita-se que apontam para nós estáveis ​​codificados nele.

Um método que costumava ser usado, mas que desde então foi abandonado, fazia com que os clientes se localizassem usando um servidor de IRC. Isso funcionou de forma semelhante a um cliente de BitTorrent.

Uma vez que estiver conectado à rede, você começará a receber listas de endereços IP e portas de clientes conhecidos.

Abaixo, você vai entender de forma cronológica como um cliente tenta se conectar a rede (ou seja, encontrar outros nodes)

  • A primeira forma que um cliente tenta se conectar a rede é conectando-se a outro cliente e emitindo o comando ‘getaddr’. O cliente padrão sempre teve essa capacidade. No entanto, há um problema com isso — como você aprende sobre o cliente nº 1?
  • Seeds IRC. Isso é algo que já existe desde a primeira versão também. Era simples de implementar, mas no final não foi escalado. Então, os nós de bitcoin começaram a ficar alinhados . Versões posteriores conectadas ao lnet. Então, o lnet foi desativado e o suporte ao IRC foi removido completamente. O DNS estava funcionando por este ponto, então estava tudo bem.
  • Endereços IP de nodes bem conhecidos. Isso está no cliente desde junho de 2010, embora os endereços IP exatos mudem de vez em quando.
  • DNS seed. Isso está no cliente desde março de 2011. Isso é mais fácil de escalar, porque o DNS já está construído para lidar com dezenas de milhares de conexões.

 

Requerimentos mínimos (full node)

Os nodes completos do Bitcoin Core possuem certos requisitos. Se você tentar executar um node em um hardware fraco, isso pode funcionar, mas é provável que você gaste mais tempo lidando com problemas. Se você puder atender aos seguintes requisitos, você terá um node fácil de usar.

  • Hardware de desktop ou laptop executando versões recentes do Windows, Mac OS X ou Linux.
  • 200 gigabytes de espaço livre em disco, acessíveis a uma velocidade mínima de leitura / gravação de 100 MB/s.
  • 2 gigabytes de memória (RAM)
  • Uma conexão de Internet de banda larga com velocidades de upload de pelo menos 400 kilobits (50 kilobytes) por segundo
  • Uma conexão não monitorada, uma conexão com altos limites de upload ou uma conexão que você monitora regularmente para garantir que ela não exceda seus limites de upload. É comum que os nodes completos em conexões de alta velocidade usem 200 gigabytes de upload ou mais por mês. O uso do download é de cerca de 20 gigabytes por mês, além de cerca de 180 gigabytes adicionais na primeira vez que você inicia o seu node.
  • 6 horas por dia em que seu node completo pode ficar em execução. (Você pode fazer outras coisas com o seu computador enquanto executa um nó completo.) Mais horas seriam melhores, e o melhor de tudo seria se você pudesse executar seu node continuamente.

 

Abaixo você confere as partes 1 e 2 do Guia completo do bitcoin.

>> Guia completo do bitcoin (Parte 1 )

>> Guia completo do bitcoin (Parte 2)

Renan Pitz Alves

Com experiência em grandes empresas como Enel, Accenture, Red Hat e no exterior, Renan atualmente é Sysadmin e devops na PagSeguro. Especialista em blockchain, tem dedicado seu tempo livre para se aprofundar na arquitetura e entender como ela pode trazer benefícios para a sociedade. Co-fundador da Go Blockchain, está engajado como colaborador da plataforma.

Comentários

PUBLICIDADE

RECEBA NOVIDADES

Fique por dentro de todas as novidades, eventos, cursos, conteúdos exclusivos e muito mais.

Oferecimento:

Projeto mantido por:

Media Partners: