ELI5: ¿Qué es la codificación Base58Check?

He visto publicaciones sobre cómo hacerlo y he leído la wiki sobre lo que es , sin embargo, estas explicaciones son demasiado complejas. ¿Alguien puede explicar qué es y por qué se llama codificación Base58Check? ¿Las direcciones generadas sin pasar por esos pasos siguen siendo válidas en Bitcoin?

Esta es la explicación proporcionada por el cliente bitcoind original en base58.h

// Why base-58 instead of standard base-64 encoding?
// - Don't want 0OIl characters that look the same in some fonts and
//      could be used to create visually identical looking account numbers.
// - A string with non-alphanumeric characters is not as easily accepted as an account number.
// - E-mail usually won't line-break if there's no punctuation to break at.
// - Doubleclicking selects the whole number as one word if it's all alphanumeric.

Para responder mejor a esta pregunta, ¿qué hacen exactamente los paquetes npm como bs58check ? La descripción es así

Una implementación sencilla de base58check que se extiende sobre bs58.

Base58check = suma de control + base58

Respuestas (3)

¿Alguien puede explicar qué es y por qué se llama codificación Base58Check?

Hay dos partes en el nombre "Base58Check". La primera parte es " Base58 ". Esto se explica por sí mismo, la codificación usa Base 58. Esto significa que hay 58 dígitos que están representados por 58 caracteres. Un dígito es un número entre 0 y 57, al igual que en el sistema decimal (o base 10) tenemos un número entre 0 y 9. Como se supone que cada dígito es un carácter, necesitamos tener un carácter diferente. alfabeto" para cada dígito. Para la base 58, usamos el alfabeto 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyzcon el número 0 representado por el carácter 1y el número 57 representado por el carácter z. A modo de comparación, el alfabeto decimal tiene 0123456789el número 0 representado por el carácter 0y el número 9 representado por el carácter 9.

La segunda parte del nombre es " Check ". Esto se refiere a una suma de comprobación. Se calcula el doble SHA256 de los datos que queremos codificar, y los primeros cuatro bytes de ese hash se utilizan como suma de comprobación. Este es un método de detección de errores para ayudar a garantizar que los datos que recibimos sean correctos y no estén dañados. Esos cuatro bytes se agregan a los datos que estamos codificando antes de realizar una conversión base para generar la cadena base 58.

Al igual que con cualquier dato en una computadora, toda la cadena de bytes anterior a base58 se puede interpretar como un número entero muy grande. A partir de ahí, es fácil realizar una conversión de base a base 58 y así producir la cadena final de base 58.

¿Las direcciones generadas sin pasar por esos pasos siguen siendo válidas en Bitcoin?

No puede generar una dirección sin seguir esos pasos, por lo que es imposible no seguir estos pasos para producir una dirección.

Para responder mejor a esta pregunta, ¿qué hacen exactamente los paquetes npm como bs58check? La descripción es así

Implementan la conversión completa de bytes a cadena codificada Base58Check.

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyztiene 61caracteres, ¿no?
@ user218867 No, no es el alfabeto, faltan letras.
Lo bueno que se puede agregar aquí es que base58check reduce los errores de tipeo, ya que los caracteres del alfabeto utilizados para codificar eliminan ciertos caracteres, como los símbolos, así como errores similares como lI (minúscula "L", mayúscula "I").

¿Alguien puede explicar qué es y por qué se llama codificación Base58Check?

Debido al nombre que tenía la función en el código base original de Bitcoin.

El "Base58" se refiere al hecho de que es un formato base 58 (utiliza 58 caracteres diferentes para codificar los datos), y el "Verificar" se refiere al hecho de que se agrega una suma de verificación a los datos codificados.

¿Las direcciones generadas sin pasar por esos pasos siguen siendo válidas en Bitcoin?

Es complicado.

Base58Check es simplemente una forma de codificar una cantidad de bytes de datos en una cadena. En teoría, si encuentra otra forma de construir una cadena que el decodificador Base58Check pueda decodificar en algo con la longitud y el byte de versión correctos, el resultado será una dirección válida.

Espero que la respuesta a tu pregunta sea no. Debe usar algo al menos vagamente similar a un codificador Base58Check para terminar con una dirección válida.

Para responder mejor a esta pregunta, ¿qué hacen exactamente los paquetes npm como bs58check?

Implementa una forma de convertir bytes en cadenas Base58Check y una forma de convertir dichas cadenas nuevamente en bytes.

Una dirección de Bitcoin es una serie de bits (en su forma más simple es solo una clave pública).

Para que sea "legible" para los humanos, se convierte en una serie de letras.

Base64 es un algoritmo anterior bien conocido para hacer esto, pero se decidió que los caracteres como O, I, 1, l, +, / podrían generar confusión (son visualmente similares a otros o no son letras), por lo que 6 out Se eliminaron 64 caracteres: de ahí el nombre Base58 .

Antes de realizar la conversión, se agregan bits de suma de comprobación. Esto asegura que después de la conversión a Base58, cualquier error al transcribir una letra conduciría a una dirección no válida cuando se convierta nuevamente a bits y se verifique la suma de verificación. De ahí el Check de Base58Check .

Dado que Base58Check es solo una representación del valor de los bits originales, estos últimos bits también sirven como una dirección (por ejemplo, con fines de copia de seguridad). Es más una cuestión de si la aplicación que está utilizando acepta bits básicos como direcciones.

npm bs58 solo convierte bits a Base58 sin calcular ni verificar la suma de verificación. npm bs58check agrega la suma de verificación al convertir bits y la verifica al volver de Base58 a bits.