MSTR Cat

Blockchain/Nível III · A rede/3.1 Nós/Lição 2

Fofocas peer-to-peer

O protocolo de fofocas: como os nós encontram pares e disseminam dados sem um centro

MateriaisUm nó Bitcoin Core em execuçãoAcesso ao terminal com ‘bitcoin-cli’Um editor de texto para registrar informações de pares

Curiosidade

  1. Como um novo nó em uma rede vazia encontra seu primeiro par?
  2. Como um novo bloco chega a milhares de nós em segundos sem que ninguém o coordene?
  3. O que impede um atacante de isolar um nó do resto da rede?

Explorar

  1. O Bitcoin funciona como uma rede descentralizada ponto a ponto, na qual cada nó completo mantém um estado independente. Para se juntar à rede, um novo nó precisa estabelecer conexões TCP com os nós existentes. A Mainnet utiliza a porta 8333 para essas conexões. A descoberta inicial depende de “seeds” DNS, geridos por membros antigos da comunidade e listados no software, além de endereços de fallback codificados manualmente. Uma vez conectado, um nó pode solicitar endereços usando a função ‘getaddr’ e recebê-los em mensagens ‘addr’, o que lhe permite conhecer outros participantes ativos e expandir dinamicamente seu conjunto de nós.
  2. O Bitcoin Core gerencia uma topologia específica: 8 conexões de relay completo de saída para a propagação de transações e blocos, além de 2 conexões apenas de relay de blocos para reduzir o uso da largura de banda. Ele permite até 125 conexões no total, tanto de entrada quanto de saída. Essa estrutura garante redundância; se um peer se desconectar ou deixar de responder, o nó mantém a conectividade por meio dos outros. As conexões apenas de relay de blocos não transportam transações nem endereços, o que torna mais difícil para um observador mapear a topologia da rede.
  3. A propagação de dados segue um mecanismo de anúncio. Quando um nó recebe uma nova transação, ele a anuncia com uma mensagem “inv” (inventário) que contém o hash, mas não os dados; atualmente, novos blocos são normalmente anunciados enviando o cabeçalho ou um bloco compacto diretamente. Os pares que recebem esse anúncio percebem que não possuem o objeto e enviam uma solicitação “getdata”. O detentor original então transmite a carga útil completa. Esse processo em duas etapas impede que a rede seja inundada com cargas úteis grandes e redundantes antes que os pares confirmem seu interesse, garantindo um uso eficiente da largura de banda em todo o sistema distribuído.
  4. Blocos compactos (BIP152), introduzidos em 2016, otimizam ainda mais esse processo. Como a maioria das transações em um bloco já é conhecida pelos outros nós por meio da propagação no mempool, enviar o bloco inteiro é um desperdício. Em vez disso, um nó envia o cabeçalho do bloco mais identificadores curtos (6 bytes cada) para suas transações, juntamente com a coinbase; o receptor reconstrói o bloco a partir de seu próprio mempool e solicita apenas as poucas transações que lhe faltam. Isso reduz significativamente a latência na propagação dos blocos, permitindo que a rede alcance o consenso mais rapidamente, mesmo com altos volumes de transações.
  5. Os ataques de eclipse demonstram a fragilidade da diversidade entre nós. Heilman et al. (2015) mostraram que um atacante que assume todas as conexões de um nó pode isolá-lo da rede honesta, fornecendo-lhe uma visão falsa da cadeia. O Bitcoin Core adotou suas contramedidas a partir da versão 0.10.1, incluindo conexões auxiliares e uma eliminação mais cuidadosa de endereços da tabela de endereços, e posteriormente adicionou conexões âncora que persistem após reinícios. Executar o sistema apenas por meio do Tor pode tornar um nó mais fácil, e não mais difícil, de ser alvo de ataques de eclipse.
  6. Verifique a conectividade do seu nó executando ‘bitcoin-cli getpeerinfo’ em um terminal conectado a uma instância local do Bitcoin Core. A saída lista o endereço de cada peer, seu ‘connection_type’ (por exemplo, outbound-full-relay ou block-relay-only), sua versão do software e até que ponto ele foi sincronizado ('synced_headers', 'synced_blocks'). Um nó saudável apresenta cerca de dez conexões de saída: oito de tipo full-relay e duas apenas de tipo block-relay.

Fatos-chave

  • A mainnet do Bitcoin usa a porta TCP 8333 para comunicação ponto a ponto.
  • Novos nós são inicializados usando sementes DNS e endereços codificados manualmente, antes de aprender sobre os pares por meio de troca de informações.
  • O Bitcoin Core tem como padrão 8 conexões de relay completo de saída, 2 conexões apenas de relay de blocos e um máximo de 125 conexões no total.
  • A mensagem ‘inv’ anuncia os hashes dos dados; ‘getdata’ solicita a carga útil real ao peer que a possui.
  • Blocos compactos (BIP152) permitem que os pares reconstituam blocos a partir de mempools locais, reduzindo o tráfego de dados.
  • Os ataques de eclipse tentam capturar todas as conexões de um nó; o Bitcoin Core adicionou várias contramedidas desde 2015.

Exercício nove, seis, três, um

9ReunirListe 9 componentes distintos do processo de inicialização e propagação P2P do Bitcoin (por exemplo, sementes DNS, mensagens ‘inv’).
6AgruparAgrupe esses 9 componentes em 6 categorias com base em sua função: descoberta, gerenciamento de conexão, anúncio de dados, recuperação de dados, otimização ou segurança.
3DestilarReduza os 6 grupos a 3 princípios fundamentais que regem a propagação eficiente e segura de redes.
1CristalizarEscreva uma frase explicando por que um nó deve manter conexões de saída diversificadas para resistir a ataques de eclipse.

Verificação de fatos

Datas, números e afirmações verificados com as fontes publicadas listadas abaixo.

Abrir na academia interativa →

EN ES ZH JA KO RU DE FR MS