Glossário / Endereços e chaves
Base58Check
Outros nomes: Base58.
- O que é o Base58Check?
- O Base58Check é a codificação de texto original do bitcoin, que transforma dados binários em uma cadeia de 58 caracteres fáceis de transcrever e acrescenta uma soma de verificação de quatro bytes para detectar erros de digitação.
O alfabeto deixa de fora os quatro caracteres que as pessoas confundem ao copiar à mão: o zero, o O maiúsculo, o I maiúsculo e o l minúsculo. Uma soma de verificação de quatro bytes, obtida de um SHA-256 duplo do conteúdo, faz com que uma carteira rejeite um endereço digitado errado em vez de enviá-lo ao vazio, com cerca de uma chance em 4,29 bilhões de passar despercebido. Todo endereço que começa com 1 ou 3 é Base58Check.
Como funciona
Três partes compõem toda string Base58Check. Um byte de versão no início diz que tipo de dado é aquele, o conteúdo no meio carrega os bytes reais, e quatro bytes de soma de verificação no fim são os quatro primeiros bytes do SHA-256 aplicado duas vezes à versão e ao conteúdo juntos. O resultado é então escrito na base 58 em vez da base 16, o que o encurta consideravelmente e elimina os glifos ambíguos.
O byte de versão é o que produz os caracteres iniciais conhecidos. A versão 0x00 marca um endereço pay-to-public-key-hash e resulta em um 1 no início; a versão 0x05 marca um endereço pay-to-script-hash e resulta em um 3 no início; a versão 0x80 marca uma chave privada no formato Wallet Import Format, resultando em 5, K ou L. As chaves estendidas usam, em vez disso, uma versão de quatro bytes, 0x0488B21E, e é por isso que toda xpub começa com essas quatro letras.
Bytes zero à esquerda recebem tratamento especial, porque de outro modo a conversão de base os descartaria. Cada byte 0x00 no início do conteúdo é escrito como um caractere "1" adicional, e é por isso que alguns endereços legados ficam mais curtos ou mais longos que os vizinhos, apesar de carregarem a mesma quantidade de dados.
Onde você o encontra
O Base58Check está em toda parte na primeira década do bitcoin e em nenhum de seus formatos mais recentes. Endereços legados, endereços pay-to-script-hash, chaves privadas WIF e as chaves estendidas xprv e xpub que você exporta de uma carteira, todos o usam. Nada que comece com bc1 o usa.
Duas propriedades explicam tanto a popularidade quanto o abandono. A segurança na transcrição era o objetivo: o alfabeto foi projetado para que um endereço lido em voz alta, copiado de uma tela ou gravado em uma placa de metal sobreviva ao manuseio humano, e a soma de verificação transforma os erros restantes em recusas, não em perdas. Mas a codificação diferencia maiúsculas de minúsculas, o que obriga um código QR ao modo de bytes em vez do modo alfanumérico, mais compacto, e ela só pode dizer que algo está errado, nunca o que nem onde.
Base58Check vs Bech32
O Base58Check detecta erros e o bech32 os corrige. O bech32, especificado no BIP-173 e adotado para endereços SegWit nativos em 2017, usa um alfabeto de 32 caracteres sem nenhuma maiúscula, de modo que toda a cadeia cabe no modo alfanumérico do QR e é lida a partir de uma imagem menor. Sua soma de verificação BCH garante a detecção de até quatro caracteres errados e pode apontar quais posições são suspeitas, em vez de simplesmente falhar.
O sucessor precisou de um ajuste próprio. Uma fraqueza de extensão de comprimento na soma de verificação original do bech32 fazia com que certos endereços pudessem ganhar ou perder um caractere final sem detecção, então o BIP-350 definiu o bech32m, que muda uma constante e é o que os endereços Taproot que começam com bc1p usam. O Base58Check continua válido e seguirá funcionando indefinidamente, mas novos tipos de endereço não estão sendo definidos nele.