Формат адреси в кодуванні 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 символів), розділяючи їх за допомогою тире, на групи.