Base58
Um conjunto de caracteres amigável para representar números grandes
Conjunto de caracteres Base58:
123456789 ABCDEFGH JKLMN PQRSTUVWXYZ abcdefghijk mnopqrstuvwxyz
(sem 0, O, I, l) Base58 é um conjunto de caracteres amigável que você pode usar para representar números grandes em um formato mais curto.
O Satoshi criou esse conjunto de caracteres na primeira versão do Bitcoin. Ele é usado para codificar endereços legados, chaves privadas WIF e chaves estendidas.
Terminologia
O que "base58" significa?
A "base" se refere ao número de caracteres que você usa para representar um valor. No dia a dia, usamos números base10 (os dez dígitos 0123456789). Mas para um computador é fácil usar caracteres extras para representar valores — por exemplo, base16 (hexadecimal) ou base58. Quanto mais caracteres na sua base, menos caracteres você precisa para representar números grandes.
Benefícios
Por que usamos Base58 no Bitcoin?
O conjunto Base58 é o alfabeto e os dígitos, mas removendo os caracteres que se parecem entre si em algumas fontes: o número 0, a letra maiúscula O, a letra maiúscula I e a letra minúscula l. Isso reduz a chance de erros de digitação ao copiar um endereço manualmente.
Base58 no Bitcoin
Zeros à Esquerda
Como o Base58 trata os dados como um número grande, os bytes 00 à esquerda seriam perdidos. Para preservá-los, cada byte 00 à esquerda é codificado como o caractere 1 (o primeiro do conjunto Base58).
Prefixos (byte de versão)
Um byte de versão é adicionado no início dos dados antes da codificação para forçar o endereço a começar com um caractere específico, ajudando a distinguir os tipos:
0x00→ endereço P2PKH (começa com "1")0x05→ endereço P2SH (começa com "3")0x80→ chave privada WIF (começa com "5"/"K"/"L")
Base58Check
O Base58Check é o Base58 com um checksum adicionado. O processo é: pegar os dados, adicionar o byte de versão no início, calcular o checksum (primeiros 4 bytes do HASH256) e adicioná-lo ao fim, e então codificar tudo em Base58. É isso que os endereços legados e as chaves WIF usam.