ELI5: Что такое кодировка Base58Check?

Я видел сообщения о том, как это сделать, и я читал вики о том, что это такое , однако эти объяснения слишком сложны. Может кто-нибудь объяснить, что это такое и почему оно называется кодировкой Base58Check? Являются ли адреса, сгенерированные без выполнения этих шагов, действительными в биткойнах?

Это объяснение предоставлено исходным клиентом bitcoind в 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.

Чтобы ответить на этот вопрос, что именно делают пакеты npm, такие как bs58check ? Описание такое себе

Прямая реализация base58check, распространяющаяся на bs58.

Base58check = контрольная сумма + base58

Ответы (3)

Может кто-нибудь объяснить, что это такое и почему оно называется кодировкой Base58Check?

Название «Base58Check» состоит из двух частей. Первая часть " Base58 ". Это довольно очевидно, кодировка использует Base 58. Это означает, что 58 цифр представлены 58 символами. Одна цифра — это число от 0 до 57, точно так же, как в десятичной системе (или с основанием 10) у нас есть числа от 0 до 9. Поскольку каждая цифра должна быть одним символом, нам нужно иметь разные " алфавит" для каждой цифры. Для основания 58 мы используем алфавит 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz, в котором цифра 0 представлена ​​символом, 1а число 57 представлено символом z. Для сравнения, в десятичном алфавите 0123456789цифра 0 представлена ​​символом, 0а цифра 9 представлена ​​символом 9.

Вторая часть названия — « Чек ». Имеется в виду контрольная сумма. Вычисляется двойник SHA256 данных, которые мы хотим закодировать, и первые четыре байта этого хеша используются в качестве контрольной суммы. Это метод обнаружения ошибок, который помогает убедиться, что полученные нами данные верны и не повреждены. Эти четыре байта добавляются к данным, которые мы кодируем, прежде чем мы выполним базовое преобразование для создания строки с основанием 58.

Как и любой фрагмент данных в компьютере, всю строку байтов до base58 можно интерпретировать как очень большое целое число. Оттуда легко выполнить базовое преобразование в базу 58 и, таким образом, получить окончательную строку с базой 58.

Являются ли адреса, сгенерированные без выполнения этих шагов, действительными в биткойнах?

Вы не можете сгенерировать адрес, не выполнив эти шаги, поэтому невозможно не выполнить эти шаги для создания адреса.

Чтобы ответить на этот вопрос, что именно делают пакеты npm, такие как bs58check? Описание такое себе

Они реализуют полное преобразование байтов в закодированную строку Base58Check.

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyzесть 61символы, не так ли?
@user218867 user218867 Нет, это не алфавит, пропущены буквы.
Хорошая вещь, которую следует добавить, это то, что base58check уменьшает количество ошибок ввода, поскольку символы в алфавите, используемые для кодирования, удаляют определенные символы, такие как символы, а также похожие ошибки, такие как lI (нижний регистр «L», верхний регистр «I»)

Может кто-нибудь объяснить, что это такое и почему оно называется кодировкой Base58Check?

Из-за названия функции в исходной кодовой базе биткойнов.

«Base58» относится к тому факту, что это формат base 58 (в нем используется 58 различных символов для кодирования данных), а «Check» относится к тому факту, что к закодированным данным добавляется контрольная сумма.

Являются ли адреса, сгенерированные без выполнения этих шагов, действительными в биткойнах?

Все сложно.

Base58Check — это просто способ закодировать ряд байтов данных в строку. Теоретически, если вы найдете другой способ создания строки, которая может быть декодирована декодером Base58Check во что-то с правильной длиной и байтом версии, результатом действительно будет действительный адрес.

Я ожидаю, что ответ на ваш вопрос - нет. Вам нужно использовать что-то хотя бы отдаленно похожее на кодировщик Base58Check, чтобы получить правильный адрес.

Чтобы ответить на этот вопрос, что именно делают пакеты npm, такие как bs58check?

Он реализует способ преобразования байтов в строки Base58Check и способ преобразования таких строк обратно в байты.

Биткойн-адрес — это последовательность битов (в более простой форме это просто открытый ключ).

Чтобы сделать его «читабельным» для человека, он преобразуется в серию букв.

Base64 — хорошо известный предыдущий алгоритм для этого, но было решено, что такие символы, как O, I, 1, l, +, / могут привести к путанице (они визуально похожи на другие или не являются буквами), поэтому 6 из 64 символа были удалены: из них имя Base58 .

Перед преобразованием добавляются биты контрольной суммы. Это гарантирует, что после преобразования в Base58 любая ошибка при расшифровке буквы приведет к недопустимому адресу при повторном преобразовании в биты и проверке контрольной суммы. Отсюда проверка Base58Check .

Поскольку Base58Check — это просто представление исходного значения битов, эти последние биты также служат адресом (например, для целей резервного копирования). Это больше зависит от того, принимает ли приложение, которое вы используете, голые биты в качестве адресов.

npm bs58 просто конвертирует биты в Base58 без вычисления и проверки контрольной суммы. npm bs58check добавляет контрольную сумму при преобразовании битов и проверяет ее при возврате из Base58 в биты.