Pular para o conteúdo
buybitcoinsmart

Glossário / Endereços e chaves

Bech32m

O que é o Bech32m?
O Bech32m corrige uma falha do bech32 ao mudar uma constante na soma de verificação, e todo endereço Taproot que começa com bc1p o usa em vez da codificação original.

Especificação no BIP-350.

A falha é restrita, mas real. Sempre que uma string bech32 termina no caractere "p", inserir ou excluir qualquer número de caracteres "q" imediatamente antes dessa última letra deixa a soma de verificação válida, de modo que um endereço alterado pode passar na verificação. O BIP-350 fecha a brecha combinando 0x2bc830a3 à soma de verificação, onde bech32 combinava o valor 1.

Como funciona

Bech32m é bech32 com um número alterado. O codificador expande o prefixo legível por humanos, acrescenta os dados, aplica o mesmo polinômio BCH ao resultado e só se diferencia no último passo, em que a saída é combinada com 0x2bc830a3 em vez de com 1. Tudo o que um leitor consegue ver permanece igual: o mesmo alfabeto de 32 caracteres, o mesmo separador "1", os mesmos seis caracteres de soma de verificação e o mesmo teto de 90 caracteres.

Alterar a constante não é um efeito colateral. É o mecanismo. Como os dois esquemas não coincidem, uma string bech32m não passa em um teste de soma de verificação bech32, e uma string bech32 não passa em um teste bech32m, de modo que o software antigo rejeita os novos endereços de imediato, em vez de entendê-los pela metade. O BIP-350 descreve isso como uma ruptura deliberada de compatibilidade, escolhida em vez de corrigir bech32 silenciosamente no próprio lugar.

A linha divisória é a versão de testemunha. A versão de testemunha 0, ou seja, os endereços bc1q para chaves e scripts únicos, mantém bech32. As versões de testemunha de 1 a 16 usam bech32m. Hoje só a versão 1 está definida, como Taproot, então, na prática, bech32m significa bc1p. A regra foi escrita para cobrir versões que ainda não existem, e é por isso que uma carteira correta verifica o número da versão, e não o prefixo do endereço.

Onde você o vê

Um endereço de recebimento bc1p é bech32m, tem 62 caracteres e codifica uma chave de 32 bytes. Nas redes de teste, as mesmas saídas aparecem como tb1p. As saídas Taproot se tornaram gastáveis no bloco 709.632, em 14 de novembro de 2021, que é o ponto a partir do qual os endereços bech32m começaram a carregar valor real na mainnet.

O Bitcoin Core implementou o BIP-350 na versão 22.0, e a partir dessa versão toda chamada de procedimento remoto que recebe um endereço exige bech32m para a versão de testemunha 1 e superiores. A versão 23.0 foi além: carteiras de descritores recém-criadas recebem automaticamente um descritor tr(), de modo que entregam endereços bc1p sem que se peça.

O atrito prático aparece na tela de saque. Algumas plataformas ainda recusam destinos bc1p porque seu validador de endereços entende bech32, mas não a constante mais nova. Nesse caso, não há nada de errado com sua carteira, e um endereço bc1q da mesma frase de recuperação deixa os bitcoins na mesma carteira.

Bech32m vs P2TR

Bech32m é uma codificação e P2TR é um tipo de saída, e eles coincidem hoje apenas por uma coincidência de calendário. Bech32m diz como escrever como texto qualquer programa de testemunha de versão 1 ou superior. P2TR diz o que um programa de versão 1 significa: uma chave pública ajustada (tweak) de 32 bytes, gastável por uma assinatura Schnorr ou pela revelação de um script. Todo endereço bech32m em circulação codifica uma saída P2TR, mas isso deixa de ser verdade no momento em que a versão de testemunha 2 for atribuída a qualquer coisa, já que esses endereços também seriam bech32m e não seriam Taproot.

Não confundir com

Perguntas frequentes

Preciso fazer algo a respeito do bech32m?

Não. Sua carteira cuida da codificação. O único lugar em que isso fica visível é um serviço que recusa destinos bc1p, e a resposta nesse caso é sacar para um endereço bc1q da mesma carteira.

Por que criar um segundo formato em vez de corrigir o bech32?

Porque uma correção silenciosa deixaria o software antigo e o novo em desacordo sobre quais endereços são válidos. Mudar a constante da soma de verificação torna as duas codificações mutuamente inválidas, de modo que carteiras desatualizadas recusam de imediato um endereço bech32m em vez de lê-lo mal.

Leia a seguir

Termos relacionados

Mais em Endereços e chaves

Ler esta página em inglês