メインコンテンツまでスキップ

コマンド形式

PiNS のすべての操作は、レジストラのプロトコルアドレス宛のシールドされた PIVX トランザクションであり、 金額が支払いで、メモが署名済みのコマンドです。どちらも同じノートの中を運ばれるので、意図と支払いが不可分に 結びつきます — 突き合わせるべき別の参照番号や請求書はありません。

このページは正確なワイヤ形式を示します。これに沿って組み立てたコマンドは、レジストラとゼロ知識回路の どちらにも受け入れられます。

構造

すべてのコマンドはコロン区切りの ASCII で、プロトコルマーカーとバージョンから始まります:

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

その間のフィールドは操作によって変わります:

操作メモの構成支払額
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

ルールは厳密で、クライアントがどれか 1 つでも誤れば、回路が拒否する署名ができてしまいます:

  • pubkey小文字の 16 進数、64 文字です。
  • priceLSTのみ現れます。
  • addressREGUPDBUYのみ現れます。
  • pricenonce は 10 進数で、先頭のゼロ・符号・パディングはいずれも不可です。
  • 署名はまさにそのバイト列に対する Ed25519 署名で、16 進数エンコードの 128 文字です。

検証は厳格です。正準でない署名や小さな位数の鍵は拒否されます。

フィールドのルール

名前

ルール
文字a-z0-9、ハイフン
長さゾーンを含めて 1〜64 文字
大文字・小文字小文字のみ — 名前は小文字で保存・ハッシュされます
ハイフン先頭不可、末尾不可、連続も不可
ゾーン.pivx.private.secure.safe

ドットはラベルとゾーンを分けるちょうど 1 つだけが許されます。

宛先アドレス

名前が解決される先のアドレスは、メインネットの 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 だけです。整数の satoshi(1 PIVX = 100,000,000 satoshi)で、ゼロより大きくなければ なりません。

すでに出品済みの名前を新しい価格で出し直すことは許されています — もう 1 度 LST を送ってください。最も 新しいものが有効になります。

サイズの上限

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 文字をはるかに上回ります。実際のところ コマンドは必ず収まります。それでもクライアントは予算を前提にせず計算すべきです。そうすれば将来 フィールドが増えても、メモを黙って溢れさせることはありません。

支払い

有効性はメモと同じくらい金額によって決まります:

  • REG は名前の長さに応じた登録料をちょうど支払わなければなりません。
  • UPDCHGLSTULT変更料をちょうど支払わなければなりません。
  • BUY は出品価格をちょうど支払わなければなりません。

長さはゾーンを除いたラベルで数えます:ab.pivx は 2 文字の名前です。

支払いが不足または超過したコマンドは処理されません。操作と公開鍵が読み取れる場合、金額は内部残高に計上 され、出金できます — 質問と回答を参照してください。

順序

コマンドは PIVX が生成した順序で処理されます。ブロック高、次にブロック内のトランザクションインデックス、 次に入力インデックスの順です。レジストラは順序を選べませんし、すべての独立したインデクサーに別のルートを 計算させることなく並べ替えることもできません。

競合する操作 — 同じ名前に対する 2 つの REG、または同じ出品に対する 2 つの 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 はどの インデクサー経由でも解決でき、しかもあなた自身で検証できるマークル証明が添えられます。