Формат команд
Кожна операція 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:
REGмає сплатити рівно плату за реєстрацію для цієї довжини імені.UPD,CHG,LST,ULTмають сплатити рівно плату за зміну.BUYмає сплатити рівно виставлену ціну.
Довжина рахується за міткою, без урахування зони: 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 розв'язується через будь-який індексатор, причому з доказом Меркла, який ви можете
перевірити самі.