Aztec
概要
AztecはConfidential Txをデフォルトで実装しているzk-Rollupと言える
Private Smart Contracts(DSL)として、Noir言語を開発している.
VMは Aztec 2.0と呼ばれる
ゼロ知識証明のセットを利用して、チューリング完全な汎用計算機上(EVMなど)でネイティブアセットと特定の規格(ERC20など)に準拠したアセットの両方を保護する
ゼロ知識証明と準同型暗号によるConfidential Transactionの構築
Range Proofしたのち、暗号化された数字を計算可能になる
コレをΣプロトコルのセットとして結合し、特定の論理的記述をチェーン上で検証することを可能にする
UTXO型
zkSyncとTornado.cashのいいとこ取りみたいなイメージ?
Note Registry
ユーザーの資産残高は、そのアドレスが所有するすべての有効なNote(債券)の合計で構成される
つまり、ユーザは以下のようなNoteを切り取って取引する
https://scrapbox.io/files/62961c63cc393b001de8bf8c.png
Aztecのアピールポイントとして、ZK×Interoperabilityによるmoney Legoの形を形成できることが挙げられる。
Tornado.cashのようにPrivate Assetがサイロ化したプールが形成されてしまうのを解決するような設計になっている
より詳細には、以下のようなJoin-split transactionという構造になっている
https://scrapbox.io/files/6296296e1df267001df9544e.png
従来のデジタル資産は残高レジストリによって記述され、IDは1つの残高にリンクされる。
AZTECプロトコルでは、これをノートレジストリに置き換えている。
Noteは暗号化された残高を含み、Noteの所有者はおsのviewing keyとspending keyの両方を知っている人物と定義される
つまり、アドレス型->UTXO型
Join-split transactionでは、少なくとも1つのNoteが Note Registryから取り出される(Join)
これらのNoteは結合され、少なくとも1つの出力ノートに分割される(split)
Input NoteはNote Registryから削除され、Output Noteと入れ替わる
AZTEC検証者は、未使用のAZTEC Noteの存在を検証できなければならない(したがって、ある種の永続的な状態にアクセスできなければならない)
range proof
AZTECプロトコルは、ゼロ知識でJoin-split transactionを構築し、検証する方法について説明している。ノート残高を復号するのに必要な証人は公開されない。
AZTECプロトコルは、準同型暗号とRange Proofを組み合わせて、join-split取引の正当性を検証する。
Range Proofの構築と検証の複雑さは、証明される範囲の大きさに比例するものではなく、少なくとも検証は、3回の楕円曲線点スカラー倍算と1回のバイリニアペアリング比較で済む。
さらに、複数のRange Proofを組み合わせることができ、その場合、証明のセットを検証するには、証明ごとに4つの楕円曲線点スカラー倍算と、証明のセット全体に対して1つのバイリニアペアリング比較が必要
PLONKをベースにしており、Super Plonk, Ultra Plonkといった感じでアプデしてる
ACE
この相互運用性を実現するために、すべてのAZTEC資産は共通の信頼できるプロトコルを提供し、そのstateは単一のスマートコントラクト、AZTEC Cryptography Engine(ACE)によって管理されている
ACEには2つの主要機能がある
1. 証明の検証を特定の検証コントラクトに委任すること、
2. 検証された証明の結果、ノートレジストリ内のstateの更新指示を処理すること
2020年4月現在、7つの機能が提供されており、それぞれの機能にマッピングされたバリデータが存在する。
バリデータは、以下のようにDApps(分散型アプリ)からACEを通じて送られてきた証明(proof data)を検証し、その結果をACEに返す
https://scrapbox.io/files/62961caf7719d50021d60922.png
ERC-20コントラクトの機密バージョンである「ZkAssets」やネイティブトークンとしてのzkETHが展開されている
ZkAssetsは、ユーザーのNote Registryに保存されたり、機密取引を実行するために使われたりする。
つまり、ZkAssetsごとにNote Registryが存在し、Range Proofを検証してもらうことで取引前に資産を保有していることの証明を提出し、違うasset間の信頼性を担保しているってことかしら?
証明を検証し、特定のロジックが実行される際のフローは以下のようになる
1. 証明の構築:ユーザーはTxの正しさを証明するためのゼロ知識証明をローカルで構築する。
2. Ethereumへの接続:適切なproof dataによって、ZkAssetメソッドを呼び出し、実行したいTxを送信する
3. 証明の検証:proof dataが正しく、有効であることを検証します。このとき、proof dataはACEによって適切なバリデータへと割り当てられる
4. 関連するロジックの実行:証明が検証され、問題がなければ、適切なロジック(Confidential Transactionとか)が実行される
1~2はローカル環境での作業、3~4はオンチェーンで行われる。いずれもACEが分散的かつ公平な仲介役として機能しているのがポイントで、ディーラ的存在を排している
AZTECプロトコルのゼロ知識証明
AZTECプロトコルでは、ユーザはInputに対するコミットメントとOutputに対するコミットメントを持ち、互いのバランスを取る必要がある。コミットメントは完全に隠蔽されているため、これを直接保証することはできないが、その代わりに
ユーザは、バランスをとるコミットメントの開きを知っていることの証明を行うことができる。
そこで、AZTECプロトコルでは、非対話的ゼロ知識(non-interactive zero-knowledge:NIZK)証明が含まれており、2組のコミットメントが同じ合計になるような既知のオープニングを持つことを証明するために使用することができる。
参考資料