Skip to main content

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

Кожная аперацыя zNS — гэта экранаваная транзакцыя ZCash на пратакольны адрас рэгістратара, дзе сума з'яўляецца плацяжом, а memo — падпісанай камандай. І тое і другое едзе ў адной ноце, таму намер і аплата звязаныя непарыўна: супастаўляць асобныя спасылкі ці рахункі не трэба.

Гэтая старонка апісвае дакладны фармат перадачы. Каманда, пабудаваная па ім, будзе прынятая і рэгістратарам, і схемай з нулявым разгалошваннем.

Будова

Усе каманды — гэта ASCII з падзельнікамі-двукроп'ямі, якія пачынаюцца з маркера пратакола і версіі:

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

Палі паміж імі залежаць ад аперацыі:

АперацыяСтруктура memoАплачваемая сума
REG рэгістрацыяzNS:1:REG:{name}:{address}:{pubkey}:{nonce}:{sig}плата за рэгістрацыю па даўжыні імя
UPD змена адрасаzNS:1:UPD:{name}:{address}:{pubkey}:{nonce}:{sig}плата за змяненне
CHG перадача правоўzNS:1:CHG:{name}:{new_pubkey}:{nonce}:{sig}плата за змяненне
LST выставіць на продажzNS:1:LST:{name}:{pubkey}:{price}:{nonce}:{sig}плата за змяненне
ULT зняць з продажуzNS:1:ULT:{name}:{pubkey}:{nonce}:{sig}плата за змяненне
BUY пакупкаzNS:1:BUY:{name}:{address}:{pubkey}:{nonce}:{sig}роўна выстаўленая цана

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

Падпісваемае паведамленне

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

zNS:1:REG:richard.zcash:u1…:0101…0101:1780000001

Правілы тут дакладныя, і кліент, які парушыў любое з іх, атрымае подпіс, які схема адхіліць:

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

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

Правілы палёў

Імя

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

Дапускаецца роўна адна кропка, якая аддзяляе метку ад зоны.

Мэтавы адрас

Адрас, у які вырашаецца імя, мусіць быць Unified Address асноўнай сеткі з прыёмнікам Orchard. Адрасы без яго не прымаюцца.

Прычына практычная, а не адвольная: рэгістратар прымае і выплачвае сродкі праз ключавы матэрыял Orchard, які згодна з ZIP 229 пакрывае і пул Ironwood. На адрас без прыёмніка Orchard нельга заплаціць, таму яго нельга выкарыстоўваць ні для вяртанняў, ні для выручкі ад продажаў.

tip

Ironwood не дадае новага прыёмніка

Ironwood — гэта новы пул вартасці, а не новы фармат адраса. Гаманцы пераносяць у яго ноты, тады як адрас атрымання застаецца адрасам Orchard. Unified Address сучаснага гаманца працуе без змяненняў.

Nonce

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

  • Ён мусіць быць строга большым за nonce, запісаны для гэтага імя зараз. Менавіта гэта прадухіляе паўторнае выкарыстанне старой падпісанай каманды.
  • Ён не можа апярэджваць блок, які яго нясе, больш чым на 300 секунд — гэтага хапае, каб паглынуць звычайнае разыходжанне гадзіннікаў, але не дазваляе задаць nonce далёка ў будучыні.

Для першай рэгістрацыі падыдзе любая бягучая часавая пазнака.

Цана

Цану нясе толькі LST. Гэта цэлы лік затошы (1 ZEC = 100 000 000 затошы), і ён мусіць быць большым за нуль.

Паўторна выставіць ужо выстаўленае імя па новай цане можна — адпраўце яшчэ адну каманду LST. Перамагае апошняя.

Абмежаванне памеру

Memo ў ZCash займае роўна 512 байт, і ўся каманда мусіць у іх змясціцца. Фіксаваныя часткі расходуюць прадказальны аб'ём:

zNS: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

Застаецца прыблізна 295 байт, якія дзеляць паміж сабой імя і мэтавы адрас. Unified Address з некалькімі прыёмнікамі бывае доўгім, таму пры вельмі доўгім імені вельмі доўгі адрас можа не змясціцца. Кліентам варта вылічваць гэты бюджэт і папярэджваць карыстальніка да аплаты, а не даваць транзакцыі праваліцца постфактум.

Аплата

Сума вызначае карэктнасць не менш, чым memo:

Даўжыня лічыцца па метцы, без уліку зоны: ab.zcash — гэта імя з 2 сімвалаў.

Каманда з недаплатай ці пераплатай не апрацоўваецца. Калі аперацыя і публічны ключ чытаюцца, сума залічваецца на ваш унутраны баланс, адкуль яе можна вывесці — гл. Пытанні і адказы.

Парадак апрацоўкі

Каманды апрацоўваюцца ў тым парадку, у якім іх стварыў ZCash: па вышыні блока, затым па індэксе транзакцыі ўнутры блока, затым па індэксе ўваходу. Рэгістратар не выбірае парадак і не можа яго пераставіць так, каб кожны незалежны індэксатар не вылічыў пры гэтым іншы корань.

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

Разабраны прыклад

Рэгістрацыя richard.zcash:

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):

zNS:1:REG:richard.zcash:u1mvnsq85wane…:3757ee1a…a53:1780000001

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

4. Append it to form the memo:

zNS:1:REG:richard.zcash:u1mvnsq85wane…: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.zcash вырашаецца праз любы індэксатар, прычым з доказам Меркла, які вы можаце праверыць самі.