Формат адреса в кодировке RS

From Nxt Wiki
Jump to: navigation, search
This page is a translated version of the page RS Address Format and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎русский • ‎українська

Начиная с версии 1.0.1 Nxt, для пользователей стала доступна кодировка аккаунтов Nxt в виде Reed-Solomon кода.

Этот формат адресации улучшает надежность, вводя избыточность в код аккаунта, которая помогает обнаружить и исправить ошибки, при вводе и использовании номера аккаунта Nxt.

Адреса в указанной кодировке, всегда имеют вид:

NXT-XXXX-XXXX-XXXX-XXXXX

... где X не двусмысленное число или буквенный символ (поэтому символы O, и I не используются, а также число 1). Адреса всегда начинаются с "NXT-", и разделяют дефисами адрес на группы 4, 4, 4, и 5 знаков. Адреса регистро-независимые.

1 Предпосылки

Формат по умолчанию для номеров аккаунта Nxt - числовой 64-битный идентификатор, который получен из приватного ключа аккаунта. Ранние последователи Nxt жаловались, что этот формат создавал неудобства и порождал ошибки, так как были многочисленные случаи, когда единственный неправильно напечатанный символ приводил к ситуации, когда средства отправлялись на неверный/несуществующий аккаунта.

Код Reed-Solomon с коррекцией ошибок решает эту проблему, добавляя избыточность к адресам. Другие варианты также исследовались (хэш MD5, цифры контрольной суммы, и т.д.), но формат Reed-Solomon был выбран потому что:

  • коллизия учетной записи совпадает с форматом адреса по умолчанию;
  • основная коррекция ошибок системы может использоваться, чтобы помочь пользователям во вводе адресов;
  • у некоторых языков программирования нет родной функции хеширования MD5, и внедрение Reed-Solomon более просто, чем MD5.

1.1 Преимущества адресов в формате Reed-Solomon

  • шанс случайной коллизии адреса, используя реализацию в Nxt 4"контрольных битов", 1 на миллион (20-битная избыточность)..
  • Это позволяет до 2 опечаток в адресе быть исправленными.
  • Это гарантирует, что могут быть обнаружены до 4 опечаток.
  • длина адреса всегда - 17 символов и всегда снабжается префиксом "NXT". Это делает адреса легко определяемым, как принадлежащий Nxt
  • Реализация для C++, PHP, и JavaScript могут быть найдены по адресу: https://drive.google.com/file/d/0B7kbeA6whDvNWVczbEtvQ1YtZGc

2 Кодирование Nxt адресов в код Reed-Solomon

  • Это не является обязательным в этом формате, но для унификации отображения всех адресов, они отображаются в верхнем регистре.
  • Адрес разделен знаком тире на группы по 4 символа, а последняя группа содержит 5 символов, но это не является обязательным при вводе адреса.
  • Старые числовые адреса также используются и поддерживаются для обеспечения обратной совместимости.

Примеры адресов в кодировке RS:

NXT-3DH5-DSAE-4WQ7-3LPSE
NXT-K4G2-FF32-WLL3-QBGEL

3 Технические подробности

Первое и самое важное правило состоит в том, что никакая схема коррекции ошибок не безупречна/не безошибочна: 'Вы не можете полагаться постоянно на коррекцию ошибок.

Проблема несколько парадоксальна: или Вы можете сделать простую да/нет проверку корректности адреса, которая даст Вам одну на миллионе коллизий, или Вы можете попытаться исправить ошибки. При этом, вы не можете сделать оба действия.

Проблема здесь в том, что алгоритм Reed-Solomon гарантируется только исправление до 2 выявленных ошибок. Если есть больше чем 2 ошибки, присутствующие в записи адреса, он будет производить ложные срабатывания с вероятностью около 10% и транзакции также будут направляться неправильным адресам.

Думайте об этом алгоритме как о том, который может предположить ошибку, но не как алгоритм который однозначно определяет ошибки.

Reed-Solomon (RS) адрес в Nxt кодируется следующим образом:

  1. Берется оригинальный 64-битный ID аккаунта, добавляется 1 нулевой бит, чтобы достичь длины 65 бит, а затем получившийся адрес разделяется на тринадцать 5-разрядных "символов" (65 / 5 = 13).
  2. Символы выстраиваются, от меньшего к большему биту, в прямой последовательности, то есть бит 0-4, 5-9, 10-14 и т.д. до 60-64
  3. Добавляются 4 символа четности (20 бит), рассчитанные по правилам Reed-Solomon кодирования из наших 13 символов из первого шага (которые остаются нетронутыми). Это создает 13 + 4 = 17 символов кодового слова.
  4. Символы кодового слова перемешиваются в предопределенном порядке, и кодируются 1 к 1 как символы алфавита (из 32 символов), разделяя их при помощи тире, на группы.