Glossário / Nós e software
Verificação de pagamento simplificada
Outros nomes: SPV.
- O que é a verificação de pagamento simplificada?
- A verificação de pagamento simplificada confere que uma transação está em um bloco com prova de trabalho real por trás, usando apenas cabeçalhos de bloco e um ramo de merkle.
Satoshi Nakamoto descreveu o método na seção 8 do whitepaper de 2008, como a forma de usar bitcoin sem executar um servidor. É barato porque um cabeçalho de bloco tem 80 bytes: com cerca de 960.000 blocos, toda a cadeia de cabeçalhos tem aproximadamente 77 MB, contra 759 GB dos próprios blocos em agosto de 2026. Ele oferece a prova de que os mineradores incluíram seu pagamento, e absolutamente nada sobre se esse pagamento era legal.
Como funciona
A verificação de pagamento simplificada responde a uma única pergunta com dois elementos de prova.
O primeiro é a cadeia de cabeçalhos. Cada cabeçalho de bloco tem exatamente 80 bytes e contém o hash do cabeçalho anterior, a raiz de merkle das transações contidas nele, um carimbo de data e hora e o alvo de dificuldade que o minerador teve de superar. Um cliente baixa apenas os cabeçalhos, verifica que cada um se liga ao anterior e que cada hash realmente fica abaixo do alvo declarado, e termina com uma cadeia que pode precificar em eletricidade. Falsificá-la não é uma questão de mentir de forma convincente; exige refazer a mineração.
O segundo é o ramo de merkle. As transações de um bloco são combinadas em pares por hash até restar uma raiz, de modo que provar que uma transação específica está em um bloco exige apenas o punhado de hashes irmãos ao longo do caminho até essa raiz. A contagem é logarítmica: um bloco com 4.096 transações precisa de 12 hashes, o que dá 384 bytes, e dobrar o bloco acrescenta apenas mais um. Seu cliente sobe pelo ramo calculando hashes, compara o resultado com a raiz de merkle no cabeçalho em que já confia, e ou a transação está naquele bloco, ou não está.
Junte as duas coisas e você tem a afirmação que a verificação de pagamento simplificada faz: esta transação foi incluída por um bloco, e uma quantidade mensurável de trabalho se acumulou sobre ela desde então.
Agora as lacunas, porque são a parte útil. Inclusão não é validade. O método não pode dizer que os bitcoins gastos existiam, que as assinaturas eram válidas, que o bloco concedeu ao minerador o subsídio correto ou que os mesmos bitcoins não foram gastos em outro ramo. Também não pode provar um fato negativo: um servidor que simplesmente omite um pagamento não deixa evidência alguma. Satoshi escreveu a ressalva diretamente no whitepaper, observando que a técnica é confiável enquanto nós honestos controlam a rede e que empresas que recebem pagamentos frequentes ainda vão querer executar o próprio nó.
Por que isso importa quando você compra bitcoin
A marca de verificação verde em uma carteira de celular geralmente não é verificação alguma.
A maioria das carteiras que as pessoas instalam após a primeira compra em uma corretora nunca constrói uma cadeia de cabeçalhos. Elas perguntam ao servidor de uma empresa quanto você tem, exibem a resposta e a rotulam como confirmada. Essa é uma garantia mais fraca que o método do whitepaper, e o método do whitepaper é, por sua vez, mais fraco que um nó. Para saldos pequenos do dia a dia, essa cadeia de confiança é aceitável, e fingir o contrário não ajuda ninguém. Ela deixa de ser aceitável no ponto em que o valor já machucaria.
A pergunta prática é em quem você confia e por quanto tempo. Nossa análise de corretoras lista o que cada plataforma exige antes de liberar um saque, e cada uma dessas contagens de confirmações é um relatório do próprio nó daquela corretora. Quando os bitcoins chegam, a carteira que os mostra a você está reportando a partir do nó de outra pessoa outra vez. É improvável que qualquer das duas partes esteja mentindo. Ambas podem estar erradas, offline ou servindo uma cadeia que lhes foi entregue, e nenhuma avisará quando isso acontecer.
Há também uma dimensão de privacidade. O estudo de 2014 sobre clientes com filtros bloom descobriu que os filtros destinados a ocultar quais endereços interessavam a uma carteira entregavam a maioria deles. É por isso que o Bitcoin Core desativou o recurso por padrão na versão 0.19.0, em novembro de 2019, e por isso as carteiras leves mais recentes baixam filtros compactos em vez de enviar solicitações.
O que a verificação de pagamento simplificada teria deixado passar em setembro de 2018
O CVE-2018-17144 é a ilustração mais clara da diferença entre inclusão e validade na história do bitcoin.
Uma otimização adicionada no Bitcoin Core 0.14.0 pulava uma verificação que havia sido considerada redundante, com o resultado de que as versões afetadas processavam em parte um bloco contendo uma transação que gastava a mesma entrada duas vezes. Tratado de uma forma, derrubava o nó. Tratado de outra, permitia que um minerador criasse bitcoin do nada. O bug foi relatado em 17 de setembro de 2018 e corrigido no Bitcoin Core 0.16.3 no dia seguinte. Ninguém o explorou na rede real.
Imagine que alguém tivesse explorado. Um minerador produz um bloco que infla a oferta, com um cabeçalho que traz prova de trabalho totalmente autêntica e uma árvore de merkle perfeitamente correta. Um nó completo atualizado analisa o bloco, encontra a entrada duplicada, o rejeita e desconecta o par que o enviou. Um cliente que faz verificação de pagamento simplificada verifica o cabeçalho, verifica o ramo e reporta o pagamento contido nele como confirmado, porque cada elemento de prova de que dispõe é válido. Ele não tem acesso à entrada que está sendo gasta, então a pergunta nunca surge.
Essa é toda a troca. A verificação de pagamento simplificada herda suas regras de quem estiver minerando. Um nó, não.
Verificação de pagamento simplificada vs Neutrino
A verificação de pagamento simplificada e o Neutrino permitem que uma carteira funcione sem a cadeia completa, e apontam a filtragem em direções opostas. A abordagem clássica do BIP37 envia seus interesses a um par: você envia um filtro, o par busca para você e descobre, aproximadamente, quais endereços você possui. O Neutrino, a implementação do BIP157 e do BIP158 usada pela maioria das carteiras Lightning móveis, faz com que o nó publique um filtro compacto por bloco para todo mundo; sua carteira baixa os filtros, testa-os em privado e solicita apenas os blocos que coincidiram. A verificação que você faz depois é a mesma aritmética de merkle e de cabeçalhos. O que muda é que ninguém do outro lado descobre o que você estava procurando.