AztecがL2上でプライベートとパブリックな実行を統合する方法を学ぶ

学習コンテンツicon

Aztec(AZTEC)で学ぶ:Ethereum L2上のプライバシー重視のスマートコントラクト

導入:Aztecは、プライバシーを最優先するLayer 2で、開発者がプライベートおよびパブリックなステートとプライベートおよびパブリックな実行を備えたスマートコントラクトを構築でき、オンチェーン上ですべてを公開することなく、通常のDeFiのように感じられる「選択的プライバシー」アプリを実現します。

Aztecとは?

Aztecは、必要に応じて公開のコンポーザビリティをサポートしながら、プライバシーを設計の中心に置いたLayer 2ネットワークです。
重要なアイデアはシンプルです:
  • 機密性の高いユーザー操作(残高、本人情報、意図、戦略)のためのプライベート実行およびプライベートステート。
  • グローバルに表示される必要のあるもの(公共の流動性、公共の契約ロジック、共有状態)の公開実行と公開状態。
そのため、Aztecは「すべて公開」または「すべて非公開」の選択ではなく、ハイブリッドアプリをサポートしています。

Aztecでのトランザクションの仕組み

Aztecは実行を二つの別々の環境に分割します:
  1. プライベート実行環境(PXE)— ユーザー側で動作

プライベート関数は、プライバシーを最大化するためにPXE(ピクシーと発音)内でクライアントサイドで実行されます。
PXE:
  • プライベート関数をローカルで実行します
  • 鍵とノートを保持
  • プライベートな操作用のゼロ知識証明を生成します
  • aztec.js(TypeScript)に含まれており、Nodeまたはブラウザで実行可能です
  1. パブリックVM(AVM)— Aztecノード上で動作

公開関数はAztec仮想マシン(AVM)上で実行され、概念的にはEVMに似ている(したがって、「ガス効率の直感」はSolidityに似ている)。

方向性執行ルール(重要)

取引はプライベート → パブリックへと流れます:
  • プライベート関数は、後で実行されるパブリック関数をキューに追加できます。
  • パブリック関数はプライベート関数を呼び出せません。
その分離は意図的なものです。パブリックネットワークはプライベート実行に「アクセス」できないようにする必要があります。

プライベートステートとパブリックステート:ノート、ヌリファイア、ツリー

Aztecはプライバシーに応じて異なるステートモデルを使用します:

プライベートステート = UTXOスタイルの「ノート」

プライベート状態はノート(UTXOに似たデータの塊)として保存されます。プライバシーを守るために:
  • ノートは追加専用のUTXOツリーに追加されます
  • ノートが「使用済み/削除された」場合、ヌリファイラーが生成されます
  • ヌルフィーカーは別途のヌルフィーカツリーに保存されます。
これにより、ノートのプライベートな内容を公開せずに、「一度のみ使用済み」というルールをネットワークが強制できます。

パブリックステータス = 口座のようなパブリックストレージ

パブリックステートはEthereumに似た動作をします:
  • パブリックデータツリーに保存されています
  • 直接更新され、オンチェーンで表示されます
開発者のポイント:
  • プライベートステート作業 = 約束 + ヌリファイア(データを明かさずに正しさを証明)
  • パブリックステートワーク = 直接更新(通常のブロックチェーンストレージ動作)

アカウント抽象化:すべての口座がスマートコントラクトです

Aztecはプロトコルレベルでネイティブなアカウント抽象化を備えています:
  • EOA(シンプルな「キーペア口座」)は存在しません
  • すべての口座はスマートコントラクトです
  • 開発者は以下の項目について独自のルールを定義できます:
    • 認証(署名、マルチシグ、パスキー、カスタムロジック)
    • 認可ポリシー(制限、権限、セッションキー)
    • ノンス/リプレイ保護
    • 手数料支払い戦略(異なるトークンでの手数料支払い、スポンサーモデルなど)

これはDoS(「検証にコストがかかる」問題)に対してなぜ有効なのか

Aztecのモデルは、複雑な検証をクライアントサイドで実行します:
  • クライアントは「検証に成功した」というZK証明を検証して生成します。
  • シーケンサーは一定サイズの証明を検証します
  • したがって、検証の複雑さがネットワーク検証コストを急増させることはありません
これにより、チェーンを遅くすることなく「パワーユーザー」口座のロジックを実現できます。

Aztec口座(プライバシー重視)のキー

各Aztec口座は3つの鍵ペアで裏付けられています:
  • ヌルフィアーキーペア:ノートヌルフィアの計算に使用されます
  • ��信者向けにメモを暗号化するために使用される受信用ビューキーペア
  • 送信者用のノートを暗号化するために使用される外出用ビュー鍵ペア
アカウントはスマートコントラクトであるため、自動的に署名鍵ペアを備えていません。認証はアカウントのコントラクト設計に委ねられます。

認証ウィtness:「無制限承認」より安全

Aztecは、リスクの高い「無制限承認」パターンを認証証人(AuthWit)で置き換えます:
  • 永続的に無制限の権限を付与するのではなく、
  • ユーザーは特定のパラメータで特定のアクションを許可します
これは、優れたUX(バッチ処理、自動化)を維持しながら、継続的な承認リスクを軽減することを目的としています。

NoirでAztecを構築する

Aztecのスマートコントラクトは、証明可能なプログラム/コントラクトを記述するためのZKに特化した言語Noirで書かれています。ドキュメントからの重要な警告:プライベート関数は、証明のパフォーマンスに関する直感が通常の実行とは異なるため、劣化するほど非最適な方法で記述される可能性があります。したがって、「高性能なNoirの書き方」を学ぶことが重要です。