Blockchain/Nível III · A rede/3.1 Nós/Lição 4
Nós podados e clientes leves (SPV)
A arquitetura de confiança: da verificação completa às provas Merkle
MateriaisUm nó Bitcoin Core configurado com prune=550 (opcional)Uma carteira leveUm explorador de blocos
Curiosidade
- Como um nó valida toda a história do Bitcoin sem armazenar cada bloco para sempre?
- Qual mecanismo criptográfico específico permite que uma carteira de smartphone verifique seu saldo sem baixar centenas de gigabytes de dados?
- Por que os filtros originais de proteção à privacidade para carteiras leves vazaram as identidades dos usuários, e como esse defeito foi corrigido?
Explorar
- A validação completa e o armazenamento completo são separáveis. Cada nó de validação deve processar cada bloco uma vez para construir o conjunto atual de saídas não gastas, mas não precisa manter os blocos antigos posteriormente. Alguns clientes vão ainda mais longe e pulam a validação por completo, verificando apenas se as transações estão incluídas em blocos com prova de trabalho suficiente. Essas escolhas trocam espaço em disco, largura de banda e privacidade pela independência.
- O nó podado realiza essa mesma validação inicial de cada bloco desde a gênese, mas posteriormente exclui os dados dos blocos antigos para economizar espaço em disco. A configuração “prune” no Bitcoin Core mantém pelo menos 550 MB de blocos recentes, descartando os mais antigos após serem verificados. Ele continua sendo um validador completo, capaz de impor as regras de consenso e proteger a carteira do seu proprietário com uma fonte de verdade independente. No entanto, não pode mais fornecer dados históricos dos blocos para outros nós ou suportar funcionalidades que exigem consultas detalhadas na cadeia, como o “txindex”.
- Clientes leves, ou nós SPV, adotam uma abordagem diferente ao não validar todo o conjunto de regras. Eles baixam apenas os cabeçalhos dos blocos, que contêm a raiz Merkle de todas as transações daquele bloco. Para verificar a inclusão de uma transação específica, o cliente solicita uma prova Merkle a um peer e a compara com a raiz do cabeçalho. Isso se baseia na premissa de que a cadeia com mais trabalho acumulado é válida, sacrificando a aplicação independente das regras em troca de reduções drásticas nas exigências de armazenamento e largura de banda.
- As primeiras implementações de SPV utilizaram filtros Bloom do BIP37 para permitir que as carteiras solicitassem apenas transações relevantes dos pares. A carteira enviava um filtro descrevendo seus endereços; os pares escaneavam seu mempool e enviavam as transações correspondentes. Esse design vazava informações de privacidade: ao observar os filtros, um par malicioso poderia deduzir quais endereços pertenciam ao usuário e rastrear suas atividades. O Bitcoin Core deixou de fornecer filtros Bloom por padrão em 2019 (versão 0.19).
- Os filtros de bloco compacto (BIP157/158) inverteram esse fluxo para restaurar a privacidade. Em vez da carteira revelar seus endereços, os nós completos publicam um filtro compacto para cada bloco; o cliente baixa esses filtros e os testa localmente com suas próprias chaves. Quando um filtro corresponde, o cliente baixa todo o bloco, pois solicitar uma única transação revelaria-a ao peer. Isso impede que os peers saibam quais endereços a carteira monitora, melhorando significativamente a privacidade do usuário enquanto mantém uma sincronização eficiente.
- Muitas carteiras móveis dependem de um servidor terceirizado, por exemplo um servidor Electrum, para obter dados, enquanto verificam as provas Merkle contra os cabeçalhos dos blocos elas mesmas. O trade-off é claro: conveniência e baixo consumo de recursos versus verificação independente e privacidade. Um usuário que executa um nó podado mantém a capacidade total de validação, mas com limitações no fornecimento de dados históricos; uma carteira SPV tem uma pegada mínima, mas depende dos peers para lhe mostrarem todas as transações relevantes e assume, sem verificar, que a cadeia com mais trabalho é válida.
Fatos-chave
- O nó podado valida todos os blocos desde a gênese, mas exclui dados antigos, mantendo pelo menos 550 MB de blocos mais recentes.
- Os clientes SPV baixam apenas os cabeçalhos dos blocos e verificam as transações usando provas Merkle em relação ao hash-raiz do cabeçalho.
- Os filtros Bloom BIP37 vazaram a privacidade dos usuários, revelando quais endereços uma carteira monitorava para seus pares.
- Filtros de Bloco Compacto (BIP157/158) permitem que os clientes testem localmente os filtros fornecidos pelo servidor, preservando a privacidade dos endereços.
- As carteiras SPV confiam que a cadeia com mais prova de trabalho cumulativa é válida, em vez de aplicar todas as regras de consenso de forma independente.
- Os nós podados permanecem como validadores completos e podem proteger os fundos de seu proprietário, mas não podem fornecer dados históricos de blocos para outros pares.
Exercício nove, seis, três, um
9ReunirListe 9 tipos de nós ou implementações de cliente do Bitcoin. Indique para cada um: requisitos de armazenamento, capacidade de validação (total vs. SPV) e principal caso de uso.
6AgruparAgrupe os 9 em 6 categorias com base em seu nível de verificação independente e retenção de dados.
3DestilarReduza os 6 grupos a 3 trade-offs distintos entre privacidade, segurança e consumo de recursos.
1CristalizarEscreva uma frase explicando por que o modelo de confiança de um cliente leve difere fundamentalmente do de um nó completo.
Verificação de fatos
Datas, números e afirmações verificados com as fontes publicadas listadas abaixo.
- Satoshi Nakamoto, 'Bitcoin: A Peer-to-Peer Electronic Cash System' (2008), Section 8
- BIP37: Connection Bloom filtering
- BIP157: Client Side Block Filtering
- BIP158: Compact Block Filters for Light Clients
- Bitcoin Core release notes 0.11.0 (pruning)
- A. M. Antonopoulos & D. A. Harding, Mastering Bitcoin, 3rd ed. (2023), ch. 10