Ana içeriğe geç

Komut biçimi

Her zNS işlemi, kayıt operatörünün protokol adresine gönderilen korumalı bir ZCash işlemidir; burada tutar ödemeyi, memo ise imzalı komutu oluşturur. İkisi de aynı notta yolculuk eder, böylece niyet ve ödeme ayrılmaz biçimde bağlanır — eşleştirilecek ayrı bir referans ya da fatura yoktur.

Bu sayfa, tam aktarım biçimini anlatır. Buna göre kurulmuş bir komutu hem kayıt operatörü hem de sıfır bilgi devresi kabul eder.

Yapı

Tüm komutlar iki nokta üst üste ile ayrılmış ASCII'dir ve protokol işaretçisi ile sürümle başlar:

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

Aradaki alanlar işleme göre değişir:

İşlemMemo yapısıÖdenen tutar
REG kaydetzNS:1:REG:{name}:{address}:{pubkey}:{nonce}:{sig}isim uzunluğuna göre kayıt ücreti
UPD adres değiştirzNS:1:UPD:{name}:{address}:{pubkey}:{nonce}:{sig}değişiklik ücreti
CHG sahibi devretzNS:1:CHG:{name}:{new_pubkey}:{nonce}:{sig}değişiklik ücreti
LST satışa çıkarzNS:1:LST:{name}:{pubkey}:{price}:{nonce}:{sig}değişiklik ücreti
ULT satıştan kaldırzNS:1:ULT:{name}:{pubkey}:{nonce}:{sig}değişiklik ücreti
BUY satın alzNS:1:BUY:{name}:{address}:{pubkey}:{nonce}:{sig}tam olarak ilan fiyatı

CHG için {new_pubkey}, devralan sahibin anahtarıdır; imza ise devreden sahip tarafından atılır — bir devri yetkilendiren, mevcut sahiptir.

İmzalanan mesaj

İmza, komutu sondaki :{signature} olmadan kapsar; yani işaretçiden nonce dâhil olmak üzere her şeyi:

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

Kurallar kesindir ve bunlardan herhangi birini yanlış uygulayan bir istemci, devrenin reddettiği bir imza üretir:

  • pubkey küçük harf hex'tir, 64 karakter.
  • price yalnızca LST için bulunur.
  • address yalnızca REG, UPD ve BUY için bulunur.
  • price ve nonce ondalıktır; başında sıfır, işaret veya dolgu olmaz.
  • İmza, tam olarak bu baytlar üzerinde Ed25519'dur; hex kodlu, 128 karakter.

Doğrulama katıdır: kanonik olmayan imzalar ve küçük mertebeli anahtarlar reddedilir.

Alan kuralları

İsim

KuralDeğer
Karakterlera-z, 0-9, tire
Uzunlukbölge dâhil 1–64 karakter
Büyük/küçük harfyalnızca küçük harf — isim küçük harfle saklanır ve hash'lenir
Tirelerbaşta olmaz, sonda olmaz, asla çift olmaz
Bölgeler.zcash, .zec, .private, .secure, .safe

Etiketi bölgeden ayıran tam olarak bir noktaya izin verilir.

Hedef adres

Bir ismin çözümlendiği adres, Orchard alıcısı taşıyan bir mainnet Unified Address olmalıdır. Bu alıcıya sahip olmayan adresler kabul edilmez.

Nedeni keyfî değil, pratiktir: kayıt operatörü tahsilat ve ödemelerini Orchard anahtar materyali üzerinden yapar; bu materyal ZIP 229 uyarınca Ironwood havuzunu da kapsar. Orchard alıcısı olmayan bir adrese ödeme yapılamaz, dolayısıyla ne iadeler ne de satış gelirleri için kullanılabilir.

ipucu

Ironwood yeni bir alıcı eklemez

Ironwood yeni bir değer havuzudur, yeni bir adres biçimi değil. Cüzdanlar notları oraya taşır, alım adresi ise bir Orchard adresi olarak kalır. Güncel bir cüzdanın Unified Address'i olduğu gibi çalışır.

Nonce

Nonce, imzaladığınız andaki saniye cinsinden Unix zaman damgasıdır.

  • O isim için hâlihazırda kayıtlı olan nonce'tan kesin olarak büyük olmalıdır. Eski bir imzalı komutun yeniden kullanılmasını önleyen budur.
  • Kendisini taşıyan bloğun 300 saniyeden fazla önüne geçemez; bu pay, olağan saat kaymasını soğurur ama bir nonce'un çok ileri bir tarihe park edilmesine izin vermez.

İlk kayıt için güncel herhangi bir zaman damgası yeterlidir.

Fiyat

Fiyatı yalnızca LST taşır. Tam sayı zatoshi cinsindendir (1 ZEC = 100.000.000 zatoshi) ve sıfırdan büyük olmalıdır.

Hâlihazırda listelenmiş bir ismi yeni bir fiyatla yeniden listelemek serbesttir — başka bir LST gönderin. En sonuncusu geçerlidir.

Boyut sınırı

Bir ZCash memo'su tam olarak 512 bayttır ve komutun tamamı buraya sığmalıdır. Sabit kısımlar öngörülebilir bir yer tutar:

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

Geriye isim ile hedef adresin paylaşacağı yaklaşık 295 bayt kalır. Birden çok alıcısı olan bir Unified Address uzun olabilir; dolayısıyla çok uzun bir isimle çok uzun bir adres sığmayabilir. İstemciler bu bütçeyi hesaplayıp kullanıcı ödeme yapmadan önce uyarmalı, işlemin sonradan başarısız olmasına izin vermemelidir.

Ödeme

Geçerliliği memo kadar tutar da belirler:

  • REG, isim uzunluğuna karşılık gelen kayıt ücretini tam olarak ödemelidir.
  • UPD, CHG, LST, ULT, değişiklik ücretini tam olarak ödemelidir.
  • BUY, ilan fiyatını tam olarak ödemelidir.

Uzunluk, bölge hariç etiket üzerinden ölçülür: ab.zcash, 2 karakterlik bir isimdir.

Eksik ya da fazla ödenmiş bir komut işlenmez. İşlem ve açık anahtar okunabiliyorsa tutar iç bakiyenize yazılır ve çekilebilir — bkz. Soru & Cevap.

Sıralama

Komutlar, ZCash'in ürettiği sırayla işlenir: blok yüksekliği, sonra blok içindeki işlem indeksi, sonra girdi indeksi. Kayıt operatörü sırayı seçmez ve her bağımsız indeksleyicinin farklı bir kök hesaplamasına yol açmadan sırayı değiştiremez.

Çekişmeli işlemlerde — aynı isim için iki REG ya da aynı ilan için iki BUY — bu sıradaki ilk işlem kazanır, diğerlerine tutar iç bakiyeye iade edilir.

Adım adım örnek

richard.zcash kaydı:

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.

Birkaç dakika içinde komut toplu işe alınır, ispatlanır ve çıpalanır. Bundan sonra richard.zcash, kendiniz denetleyebileceğiniz bir Merkle ispatıyla birlikte herhangi bir indeksleyici üzerinden çözümlenir.