Glossário / Endereços e chaves
Bech32
- O que é o Bech32?
- O Bech32 é a codificação de endereços por trás das strings bc1q, um formato base32 em minúsculas cuja soma de verificação de seis caracteres detecta qualquer erro que afete até quatro caracteres.
Especificação no BIP-173.
O BIP-173 introduziu o bech32 em 2017 para substituir o Base58Check nas saídas SegWit. O alfabeto tem 32 caracteres e omite de propósito "1", "b", "i" e "o" para que glifos parecidos não possam ser trocados por engano, e nenhuma string bech32 passa de 90 caracteres. Quando uma carteira rejeita um endereço no instante em que você termina de colar, é a soma de verificação do bech32 que detectou o dano.
Como funciona
Uma string bech32 tem três partes em ordem fixa: um prefixo legível por humanos, o separador "1" e uma seção de dados que termina com seis caracteres de soma de verificação. A mainnet usa o prefixo "bc", a testnet e a signet usam "tb", e a regtest usa "bcrt", de modo que as letras iniciais identificam a rede antes de a carteira decodificar qualquer outra coisa. O separador é também o motivo de "1" estar ausente do alfabeto. Assim ele só pode aparecer uma vez, na fronteira, e um analisador encontra a divisão varrendo da direita.
A soma de verificação é um código BCH calculado sobre toda a string, prefixo incluído. O BIP-173 garante a detecção de qualquer erro que afete no máximo quatro caracteres e situa a probabilidade de não detectar um erro maior abaixo de uma em um bilhão. O Base58Check não oferece nada comparável: seus quatro bytes finais são um hash truncado de SHA-256 duplo, que informa à carteira que algo está errado sem apontar o quê.
Maiúsculas e minúsculas não têm significado. Um endereço bech32 é válido todo em minúsculas ou todo em maiúsculas, nunca misturado, e as carteiras exibem a forma em minúsculas. O BIP-173 pede maiúsculas dentro dos códigos QR, porque os caracteres alfanuméricos em maiúsculas liberam o modo alfanumérico do QR, que empacota cada caractere em 5,5 bits em vez dos 8 que o modo de bytes exige, e produz um padrão mais grosso que a câmera de um celular captura mais rápido.
Onde você o vê
Todo endereço bc1q é bech32. Um de 42 caracteres codifica um programa de testemunha de 20 bytes e paga a uma única chave; um de 62 caracteres codifica um programa de 32 bytes e paga a um script. Ambos são da versão de testemunha 0, e a versão 0 é a única que o bech32 tem permissão de carregar agora.
A codificação também aparece fora dos endereços. As faturas Lightning segundo o BOLT11 a tomam emprestada com prefixos como "lnbc", e ignoram de forma consciente o teto de 90 caracteres, porque uma fatura carrega um hash de pagamento, um valor, uma descrição e dicas de roteamento em vez de um único programa curto.
O problema aparece no formulário de saque de uma corretora. Um validador escrito antes de 2017 reconhece apenas strings Base58 e responde a um endereço bc1q perfeitamente bom com "invalid address". Trata-se de uma limitação da plataforma, não da sua carteira, e a solução é sacar para um tipo de endereço que a plataforma aceite, derivado da mesma frase de recuperação, em vez de procurar outro software.
Bech32 vs Bech32m
Bech32 e bech32m diferem por uma constante e nada mais. Ambos usam o mesmo alfabeto, o mesmo formato e os mesmos seis caracteres de soma de verificação. O bech32m muda o valor combinado na soma de verificação de 1 para 0x2bc830a3, e a divisão é decidida pela versão de testemunha: as saídas de versão 0 mantêm o bech32, e as versões 1 a 16 usam o bech32m. Um software que trata os dois como intercambiáveis aceitará strings que deveria rejeitar, que é exatamente a falha que o BIP-350 foi escrito para evitar.
Bech32 vs Base58Check
Bech32 e Base58Check são codificações concorrentes, não tipos de endereço concorrentes. O Base58Check envolve um byte de versão e um hash de 20 bytes com uma soma de verificação de quatro bytes e produz as strings sensíveis a maiúsculas e minúsculas que começam com 1 e 3. O bech32 codifica uma versão de testemunha junto com um programa de testemunha e produz strings insensíveis a maiúsculas e minúsculas que começam com bc1. Nenhuma das codificações decide a que os bitcoins estão travados. O que elas decidem é quão confiavelmente uma pessoa consegue copiar a string, quão grande o código QR precisa ser e com quanta clareza o software reclama quando um caractere se perde.