Visão Geral
A Verificação Simplificada de Pagamentos (SPV) é uma técnica originalmente descrita na Seção 8 do whitepaper do Bitcoin por Satoshi Nakamoto. Ela permite que clientes verifiquem que uma transação foi incluída em um bloco sem baixar toda a blockchain, reduzindo drasticamente os requisitos de largura de banda e armazenamento para usuários que não precisam executar um nó completo.
Como Funciona
Um cliente SPV baixa apenas os cabeçalhos de bloco (80 bytes cada) em vez de blocos completos. Para verificar uma transação, o cliente solicita uma prova de Merkle de um nó completo, que demonstra que o hash da transação está incluído na raiz de Merkle do bloco.
Cabeçalho de Bloco
(80 bytes)
|
Raiz de Merkle
/ \
H(AB) H(CD)
/ \ / \
H(A) H(B) H(C) H(D)
| | | |
TxA TxB TxC TxD
^
(transação alvo)
Prova de Merkle para TxC: [H(D), H(AB)]
O cliente faz o hash de TxC, combina com H(D) para obter H(CD), então combina H(CD) com H(AB) para verificar que corresponde à raiz de Merkle no cabeçalho do bloco.
Considerações de Segurança
O SPV fornece garantias de segurança mais fracas do que a validação completa:
- Os clientes SPV confiam que a cadeia mais longa contém apenas transações válidas, pois não verificam as regras de consenso além da prova de trabalho.
- Eles são vulneráveis a certos ataques onde mineradores incluem transações inválidas em blocos.
- Os filtros Bloom (BIP37), historicamente usados para privacidade no SPV, demonstraram vazar informações significativas sobre os endereços do usuário.
Alternativas modernas como servidores Electrum e filtros de bloco compactos (BIP157/BIP158) oferecem melhor privacidade e eficiência para clientes leves em comparação com o design SPV original.
Equívocos Comuns
SPV não significa "sem verificação". Os clientes SPV ainda verificam a prova de trabalho nos cabeçalhos de bloco e confirmam a inclusão no Merkle. O compromisso é que eles não validam independentemente cada transação e script em cada bloco.