Base58
Un conjunto de caracteres amigable para representar números grandes
Conjunto de caracteres Base58:
123456789 ABCDEFGH JKLMN PQRSTUVWXYZ abcdefghijk mnopqrstuvwxyz
(sin 0, O, I, l) Base58 es un conjunto de caracteres amigable que puedes usar para representar números grandes en un formato más corto.
Satoshi creó este conjunto de caracteres en la primera versión de Bitcoin. Se usa para codificar direcciones heredadas, claves privadas WIF y claves extendidas.
Terminología
¿Qué significa "base58"?
La "base" se refiere al número de caracteres que usas para representar un valor. En el día a día usamos números base10 (los diez dígitos 0123456789). Pero para una computadora es fácil usar caracteres extra para representar valores, por ejemplo base16 (hexadecimal) o base58. Cuantos más caracteres tenga la base, menos caracteres necesitas para representar números grandes.
Beneficios
¿Por qué usamos Base58 en Bitcoin?
El conjunto Base58 es el alfabeto y los dígitos, pero eliminando los caracteres que se parecen entre sí en algunas fuentes: el número 0, la letra mayúscula O, la letra mayúscula I y la letra minúscula l. Esto reduce la posibilidad de errores al copiar una dirección manualmente.
Base58 en Bitcoin
Ceros a la izquierda
Como Base58 trata los datos como un número grande, los bytes 00 iniciales se perderían. Para preservarlos, cada byte 00 a la izquierda se codifica como el carácter 1 (el primero del conjunto Base58).
Prefijos (byte de versión)
Se añade un byte de versión al inicio de los datos antes de la codificación para forzar que la dirección empiece con un carácter específico, ayudando a distinguir los tipos:
0x00→ dirección P2PKH (empieza con "1")0x05→ dirección P2SH (empieza con "3")0x80→ clave privada WIF (empieza con "5"/"K"/"L")
Base58Check
Base58Check es Base58 con un checksum añadido. El proceso es: tomar los datos, añadir el byte de versión al principio, calcular el checksum (los primeros 4 bytes del HASH256) y añadirlo al final, y después codificar todo en Base58. Eso es lo que usan las direcciones heredadas y las claves WIF.