なぜ証明が必要なのか?
インデクサーは PIVX ブロックチェーンをスキャンして名前台帳を構築します。しかし、なぜそれを信頼すべきなのでしょう? もしそれが:
- チェーン上で起きてもいない登録をでっち上げたら?
- 誤った手数料を請求したら?
- 同じ名前を 2 回登録したら?
- 台帳の状態を改ざんしたら?
ZK 証明はこうした疑問を取り除きます。各証明は、その登録が正しく処理されたことを示す暗号学的な証書です。誰でも独立に証明を検証できます。
各証明が検証すること
PIVX の証明生成器は、RISC-V のゼロ知識仮想マシンである SP1 を使います。ドメインを含む各トランザクションについて、生成器は zkVM 内部で次の検査を行います:
- 名前の妥当性 — 1〜64 文字、小文字の英数字とハイフン、許可されたゾーン内
- アドレスの妥当性 — 宛先アドレスが正しいネットワーク上の PIVX Sapling シールドアドレスであり、新しい bech32 形式であること
- Ed25519 署名 — 署名対象メッセージそのものに対する署名が有効で、その操作が要求する鍵によるものであること
- 操作の不変条件 — 所有権、価格の状態、nonce の順序が実行中の操作と整合していること
- リプレイ保護 — nonce がレコードの以前の nonce より厳密に大きいこと
- 状態遷移 — マークル証明が旧ルートを再構成し、新ルートがまさにこの変更を適用した結果であること
いずれかの検査に通らなければ、証明は生成できません。
証明が検査しないこと
ここでは、印象的に聞こえることより正確であることのほうが重要です:
- 支払いは回路内で検証されません。 トランザクションが正しい手数料を支払ったか、
BUYが実際に資金を 移したかはレジストラがオフチェーンで強制しており、公開された閲覧鍵でチェーンを再生する人なら誰でも確認 できます。zkVM の中でノートの所有権を証明するには、バッチ全体の現在のコストをはるかに上回る費用がかかり、 しかも複製がすでに与えている保証より弱いものにしかなりません — 回路はノートのコミットメントしか 見えませんが、再生するインデクサーは復号済みの金額とメモを見られるからです。 - 回路は入力が本物のチェーンだったことを証明しません。 このバッチが与えられたとき、その遷移がルールに 従っていることを証明するだけです。そのバッチが本物で、完全で、正しく並んだコマンド列であることは複製が 確立します — 信頼とプライバシーを参照してください。
だからこそ PiNS は不正を防ぐのではなく可視化します。誤ったバッチはそもそも証明できず、本物のチェーンから 来ていないバッチはすべての独立したインデクサーに否定されます。
公開出力
各証明は、それに恒久的に結びついた 3 つの値にコミットします:
| 出力 | 説明 |
|---|---|
old_root | この登録の前のマークルツリールート |
new_root | この登録の後のマークルツリールート |
end_block_height | その登録バッチの最後の PIVX ブロック |
end_block_height はチェックポイントのように、証明を特定の PIVX ブロックへ固定します。誰でも公開された閲覧鍵でその高さまでチェーンをスキャンし、メモと金額がバッチの主張と一致することを確認できます。