Перейти до основного вмісту

Формат команд

Кожна операція PiNS — це екранована транзакція PIVX на протокольну адресу реєстратора, де сума є платежем, а memo — підписаною командою. І те, і інше їде в одній ноті, тому намір і оплата пов'язані нерозривно: зіставляти окремі посилання чи рахунки не потрібно.

Ця сторінка описує точний формат передавання. Команда, побудована за ним, буде прийнята і реєстратором, і схемою з нульовим розголошенням.

Будова

Усі команди — це ASCII з роздільниками-двокрапками, що починаються з маркера протоколу і версії:

PiNS:1:{OP}:{name}:…:{ed25519_pubkey_hex}:…:{nonce}:{signature_hex}

Поля між ними залежать від операції:

ОпераціяСтруктура memoСплачувана сума
REG реєстраціяPiNS:1:REG:{name}:{address}:{pubkey}:{nonce}:{sig}плата за реєстрацію за довжиною імені
UPD зміна адресиPiNS:1:UPD:{name}:{address}:{pubkey}:{nonce}:{sig}плата за зміну
CHG передача правPiNS:1:CHG:{name}:{new_pubkey}:{nonce}:{sig}плата за зміну
LST виставити на продажPiNS:1:LST:{name}:{pubkey}:{price}:{nonce}:{sig}плата за зміну
ULT зняти з продажуPiNS:1:ULT:{name}:{pubkey}:{nonce}:{sig}плата за зміну
BUY купівляPiNS:1:BUY:{name}:{address}:{pubkey}:{nonce}:{sig}рівно виставлена ціна

Для CHG поле {new_pubkey} — це ключ приймального власника, а підпис робить передавальний власник: передачу санкціонує саме теперішній власник.

Підписуване повідомлення

Підпис покриває команду без завершального :{signature} — тобто все від маркера до nonce включно:

PiNS:1:REG:richard.pivx:ps1f84lvgj…:0101…0101:1780000001

Правила тут точні, і клієнт, який порушив будь-яке з них, отримає підпис, який схема відхилить:

  • pubkeyмалий hex, 64 символи.
  • price присутній лише в LST.
  • address присутній лише в REG, UPD і BUY.
  • price і nonce — десяткові, без ведучих нулів, без знака і без доповнення.
  • Підпис — Ed25519 за рівно цими байтами, у hex-кодуванні, 128 символів.

Перевірка сувора: неканонічні підписи і ключі малого порядку відхиляються.

Правила полів

Ім'я

ПравилоЗначення
Символиa-z, 0-9, дефіс
Довжина1–64 символи разом із зоною
Регістрлише нижній — ім'я зберігається і хешується в нижньому регістрі
Дефісине на початку, не в кінці, ніколи поспіль
Зони.pivx, .private, .secure, .safe

Допускається рівно одна крапка, що відділяє мітку від зони.

Цільова адреса

Адреса, у яку розв'язується ім'я, має бути екранованою платіжною адресою PIVX Sapling основної мережі — bech32, читабельний префікс ps, рівно 78 символів. Прозорі та будь-які інші адреси не приймаються.

Довжина не довільна. Платіжна адреса Sapling — це 43 байти корисного навантаження: 11-байтовий диверсифікатор плюс 32-байтовий pk_d, що в bech32 кодується 69 символами даних плюс 6-символьна контрольна сума, тобто ps + роздільник + 69 + 6 = 78.

Причина, з якої потрібна екранована адреса, практична, а не довільна: реєстратор приймає і виплачує кошти через ключовий матеріал Sapling, тому адресу, на яку він не може заплатити, не можна використовувати ні для повернень, ні для виручки від продажів.

порада

Приймається лише сучасна форма bech32

Стара тестова форма ptestsapling… (88 символів) відхиляється в обох мережах, і схема вимагає того самого, що й реєстратор. Будь-який сучасний гаманець PIVX видає в основній мережі форму ps….

Nonce

Nonce — це часова позначка Unix у секундах на момент підписання.

  • Він має бути строго більшим за nonce, записаний для цього імені зараз. Саме це запобігає повторному використанню старої підписаної команди.
  • Він не може випереджати блок, який його несе, більш ніж на 300 секунд — цього вистачає, щоб поглинути звичайну розбіжність годинників, але не дозволяє задати nonce далеко в майбутньому.

Для першої реєстрації підійде будь-яка поточна часова позначка.

Ціна

Ціну несе лише LST. Це ціле число сатоші (1 PIVX = 100 000 000 сатоші), і воно має бути більшим за нуль.

Повторно виставити вже виставлене ім'я за новою ціною можна — надішліть ще одну команду LST. Перемагає остання.

Обмеження розміру

Memo в PIVX займає рівно 512 байтів, і вся команда має в них уміститися. Фіксовані частини витрачають передбачуваний обсяг:

PiNS:1:{OP}: … marker, version, operation 11 bytes
{pubkey} 64 hex characters 65 bytes with separator
{nonce} 10 digits today 11 bytes with separator
{signature} 128 hex characters 128 bytes
{address} 78 characters 79 bytes with separator

Адреса Sapling завжди займає рівно 78 символів, тому, на відміну від формату зі змінною довжиною, бюджет легко прорахувати: на ім'я залишається близько 218 байт — набагато більше за максимум у 64 символи, який ім'я взагалі може зайняти. На практиці команда завжди вміщується. Клієнтам усе ж варто обчислювати бюджет, а не покладатися на нього наосліп, щоб майбутнє поле ніколи не переповнило memo непомітно.

Оплата

Сума визначає коректність не менше, ніж memo:

Довжина рахується за міткою, без урахування зони: ab.pivx — це ім'я з 2 символів.

Команда з недоплатою чи переплатою не обробляється. Якщо операція і публічний ключ читаються, сума зараховується на ваш внутрішній баланс, звідки її можна вивести — див. Запитання та відповіді.

Порядок обробки

Команди обробляються в тому порядку, у якому їх створив PIVX: за висотою блоку, потім за індексом транзакції всередині блоку, потім за індексом входу. Реєстратор не обирає порядок і не може його переставити так, щоб кожен незалежний індексатор не обчислив при цьому інший корінь.

Для конкурентних операцій — двох REG на одне ім'я чи двох BUY за одним оголошенням — перемагає перша в цьому порядку, а решті кошти повертаються на внутрішній баланс.

Розібраний приклад

Реєстрація richard.pivx:

1. Generate an Ed25519 keypair. The public key is your identity across all your names.

2. Build the message to sign (note: no trailing signature field):

PiNS:1:REG:richard.pivx:ps1f84lvgj0awz…:3757ee1a…a53:1780000001

3. Sign it with the private key; hex-encode the 64-byte signature.

4. Append it to form the memo:

PiNS:1:REG:richard.pivx:ps1f84lvgj0awz…:3757ee1a…a53:1780000001:cfec7a58…04

5. Send a shielded transaction to the registrar address, with that memo, paying the
registration fee for a 7-character name.

За кілька хвилин команда потрапляє в пакет, доводиться і закріплюється в блокчейні. З цього моменту richard.pivx розв'язується через будь-який індексатор, причому з доказом Меркла, який ви можете перевірити самі.