Skip to main content

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

Кожная аперацыя 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, таму адрас, на які ён не можа заплаціць, нельга выкарыстоўваць ні для вяртанняў, ні для выручкі ад продажаў.

tip

Прымаецца толькі сучасная форма 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 вырашаецца праз любы індэксатар, прычым з доказам Меркла, які вы можаце праверыць самі.