### はじめにゼロ知識 (ZK) のドメイン固有言語 (DSL) 証明。[4] は、この分野で重要な役割を果たします。 ZKプルーフは、その中核となるように、追加情報を明かすことなく、秘密データに特定の属性が存在することを証明するという課題を解決します。 しかし、ハイレベルなアイデアを具体的な証明に変換するのは複雑です。 ここでDSLの出番となり、抽象的な概念と、システムの証明に必要な回路の表現を橋渡しします。プルーフシステム[5] は、一方の当事者が機密情報を開示することなく、他方の当事者に対して声明または請求の有効性を証明できるようにする方法または合意です。 これには、証明者が、根本的な秘密やデータを明らかにすることなく、計算の正しさや特定の知識の所有など、特定のステートメントの真実性を検証者に納得させることを可能にする一連のルールと手順が含まれます。しかし、証明システムは高レベルの概念を直接扱うことはできません。 代わりに、目的の特性を表す回路に変換する必要があります。 この高レベルの概念から回路への移行には課題があります。 ここで、回路の言語が活躍します。 回路言語は、高レベルのアイデアを表現するための構造化された形式的な方法を提供することで、この問題を解決します。過去 10 年間で、回路言語の数と多様性が大幅に増加しました。 ノワール、カイロなどの多くの回路言語の開発[6] と Leo は、フィールドがどの程度アクティブであるかを示します。 この言語の急増により、それらの特徴、類似点、相違点を比較対照することができます。 これらの言語を包括的に調べることで、回路言語の全体像をより深く理解することができます。### **TLDR;**Noir – Aztecによって開発され、暗号化の複雑さを抽象化し、あらゆるバックグラウンドの開発者がZK回路を作成できるようにします。**– o1js** – O(1) Labs によって開発されたタイプライブラリ。 開発者がスマートコントラクトを書くことを許可します。 既存のJavaおよびタイプライブラリおよびツールとうまく統合します。**– \*\*サーコム\*\*[7] ** – ZKP回路開発用に設計されています。 精度と明瞭さを提供するその機能は、主にこの特定の領域に焦点を当てています。**– Leo** – 開発者にユーザーフレンドリーな環境を提供します。 正式に検証されたコンパイラアーキテクチャは、早期のエラー検出と防止に重点を置いて使用されます。**–\*\*カイロ\*\*[8] ** – 効率性と拡張性を重視。 相互運用性は、ブロックチェーンプラットフォーム、スマートコントラクト、オフチェーンシステムと統合できる標準インターフェースを通じてサポートされています。Lurk – Lispを活用して共通回路を実装することで、従来のSNARKの限界を解決します。 ## **用語集**技術的な概念に触れるので、後続のテキストで遭遇する可能性のある複雑な用語の用語集を次に示します。Abstract Circuit Intermediate Representation (Acer) :* Noir で使用される ZK 回路の中間表現で、1 次制約システム (R1CS) にコンパイルできます。**• カスタムゲート:ZK回路での効率的かつ安全な暗号化操作のために設計された特殊なロジックゲート。• SHA-256: 入力を受け取り、固定サイズの出力を生成する暗号化ハッシュ関数。Pedersen-Merkle Check: Pedersen Promise と Merkle Tree の暗号化検証技術を使用して、データの整合性と一貫性を検証できます。• チューリング完全性: チューリングマシンをエミュレートし、十分な時間とリソースで計算可能な問題を解くことができるコンピューティングシステムの特性。継続パッシングスタイル(CPS):*、評価プロセスを管理可能なステップに分割して、均一で効率的な実行を実現するプログラミング手法です。フィールド要素 :*有限の数学的フィールド内の要素であり、暗号化スキームや計算で一般的に使用されます。## **黒**黒い[9] は、Aztecによって設計されたドメイン固有言語(DSL)であり、暗号化の広範な知識を必要とせず、または暗号化学者になることなく、ZK回路とZKプログラムの作成を簡素化します。 その主な目標は、あらゆるバックグラウンドの開発者がZK(ゼロ知識)回路を作成できるようにすることです。 Noir は、セキュリティ、シンプルさ、パフォーマンスを優先しています。 これは、暗号化セキュリティを抽象化し、高いパフォーマンスを維持しながら暗号化プリミティブの使用を簡素化する高レベルのRustのような構文を提供します。### **ZKプルーフによるスケーリングの可能性**Noirの利点の1つは、ZKプルーフが提供するプライバシー保護機能を利用できるアプリケーションの範囲を広げる可能性があることです。 これらの証明により、プライバシーが強化され、効率的な検証が可能になります。 Noir は Abstract Circuit Intermediate Representation (Acer) と呼ばれる中間表現にコンパイルされ、さらに R1CS (ランク 1 制約) と呼ばれる制約システムにコンパイルできます。 このバックエンドのプルーフシステムを言語から切り離すことで、Noir は Aztec Brettenberg、Turbo Plonk、そして Groth16 や Halo 2 などの将来の統合など、さまざまなプルーフシステムをサポートできます。### **最適化と標準ライブラリ**開発者は、暗号化操作を効率的かつ安全に実行するために特別に設計された論理ゲートの一種であるカスタムゲートを活用することで、構成証明システムレベルで回路を最適化し、速度、セキュリティ、およびさまざまなアプリケーション機能を改善できます。 この言語は、SHA-256 や Pedersen-Merkle チェックなどの最適化された機能を備えた標準ライブラリを提供し、Pedersen コミットメントとマークル ツリーを使用してデータの整合性と一貫性を検証します。! [](https://img-cdn.gateio.im/resized-social/moments-40baef27dd-627b2da8eb-dd1a6f-cd5cc0"! [ノワール語の文法を示す図]ノワール言語の構文を示す図### **コード構成とプレゼンテーションスキル**Noir は、モジュールと外部クレートによるコード編成をサポートしているため、Noir プログラム用のライブラリを簡単に作成できます。 配列、タプル、構造体などの複合データ型が提供されるため、開発者はデータをグループ化し、共通の関数を実装できます。 この言語は、for ループ、if ステートメント、論理演算子、ビット演算子などの制御フロー構造もサポートしています。 ジェネリックと一次関数は、ノワールの表現力をさらに高めるために積極的に開発されています。ノワールはまだ進化していることに注意することが重要です。 いくつかの制限と潜在的なバグがある可能性があります。 開発チームは常に言語を反復し、継続的な改善に取り組んでいます。## **o1js**o1jsの[10] は、Snarkプログラミング言語を使用してスマートコントラクトを作成するために(0)1Labsによって設計されたタイプライブラリです。 Node .jsやブラウザなどの既存のオープンテクノロジーを活用して、開発者にとってよりアクセスしやすく便利なものにします。 o1jsはType上に構築することで、開発者はJavaやTypeのライブラリやツールに関する既存の知識を活用することができます。### **統合**o1jsは、Javaおよびタイプライブラリおよびツールとシームレスに統合され、開発者に強力な機能と広範なコミュニティサポートを提供します。 この統合により、生産性が向上し、新しい開発環境を採用するための学習曲線が短縮されます。### **VS Code サポート**一般的なコード エディターである Visual Studio Code (VS Code) のサポートを提供します。 開発者は、コード補完、構文の強調表示、デバッグなどの機能を利用して、全体的な開発エクスペリエンスを強化できます。### **標準ライブラリ**O1JS は、ドメイン要素、un-64、un-32、公開鍵、秘密鍵、署名などの基本型を含む包括的な標準ライブラリを提供します。 これらの型には、暗号化スキーム、オプション データ、ブール値、および楕円曲線の処理を簡略化する組み込みメソッドが付属しています。## **サーコム**Circomは、Circuit Compilerの略で、ゼロ知識証明(ZKP)回路開発用に設計された強力なドメイン固有言語(DSL)で、Jordi Balynaとiden3チームによって作成されました。### **表現回路の定義**Circom は、その表現力豊かな構文により、開発者が ZKP アプリケーションの回路を正確かつ明確な方法で定義することを可能にします。 ただし、Circom の構文とセマンティクスは、Circom を初めて使用する人や、DSL や ZKP の概念に慣れていない人にとっては理解しにくい場合があります。 初心者の回路開発者や汎用プログラミング言語のバックグラウンドを持つ開発者にとっては、余分な労力と時間が必要になる場合があります。### **スコープの制限**Circom は ZKP 回路開発に優れていますが、その機能は主にこの特定の領域に焦点を当てていることに注意することが重要です。 その結果、幅広いコンピューティング タスクを処理するために、より汎用的な言語を求める開発者は、Circom に多少の制約を感じるかもしれません。 より広範な開発ニーズを満たすために、Circom を他のプログラミング言語やフレームワークと組み合わせて使用する必要がある場合があります。 Circom の仕組みの説明です。 ### **ツールとエコシステムの制限**Circom はさまざまな開発ツールによってサポートされており、エコシステムも拡大していますが、そのツールやリソースの利用可能性は、より確立されたプログラミング言語やフレームワークと比較して、まだ比較的限られている可能性があります。 開発者は、特定のユースケースや高度な機能に関する包括的なドキュメント、ライブラリ、コミュニティサポートを見つけるのに苦労する場合があります。 この制限は、Circomの開発速度とコミュニティの採用に影響を与える可能性があります。### **互換性に関する考慮事項**Circomの互換性は、主にsnarkjsやlibsnarkなどの一般的なゼロ知識証明システムに焦点を当てています。 これにより、これらのシステムとシームレスに統合できますが、特定の機能や制限への依存関係も生じます。 他のZKPシステムを好む、または必要とする開発者は、互換性の問題を経験したり、Circomで生成された回路を好みのシステムに適応させて統合するために追加の作業が必要になる可能性があります。## **レオ**獅子座[11] は、ゼロ知識証明アプリケーションの開発に特化して設計されたプログラミング言語です。 これは、開発者、特にブロックチェーンエコシステムの経験がある開発者にユーザーフレンドリーな環境を提供することを目的としています。 LEOはRustに似ており、アプリケーション開発に親しみやすさと利便性を生み出すように設計されたJavaのような要素がいくつかあります。Leoの注目すべき機能は、プログラムをR1CSと呼ばれる低レベルの証明形式に変換するコンパイラです。 Leoコンパイラを際立たせているのは、厳密な形式検証プロセスを経ていることです。 この検証が必要なのは、プログラミング、監査、コンパイルなど、さまざまな段階でエラーが発生する可能性があるためです。 コンパイラがプログラマの意図に従うことを数学的に保証することで、Leoは、特にL2コンテキスト、ZKロールアップ、またはLEOプラットフォームのプロプライエタリプログラムにおいて、エラーが見落とされたり悪用されたりするリスクを最小限に抑えることを目的としています。 Leo言語の文法は、最善の努力にもかかわらず、間違いは避けられないことを認識しており、Leoチームは、特に重要な価値移転を扱うシステムにおいて、早期のエラー防止と検出の重要性を強調しています。 これに対処するために、Leoの正式に検証されたコンパイラアーキテクチャは、さらなる信頼性を注入し、期待されるプログラム動作からの意図しない逸脱の可能性を減らします。言語とコンパイラに加えて、Leoはさまざまな開発者エクスペリエンスツールと機能を提供します。 これらのコンポーネントは、開発プロセスを強化し、タスクを簡素化し、効率を高めるように設計されています。 7年間の経験を活かし、イーサリアムエコシステムの進化を観察したLeoチームは、エクスプローラーなどのツール、TruffleやGanacheなどのデプロイフレームワーク、およびアプリケーションの開発とテストを簡素化するその他のリソースの進化に似たユーザーフレンドリーな環境を提供することを目指しています。## **カイロ**カイロ[12] ZKP 回線の構築プロセスを簡略化する構文を提供します。 従来のプログラミング言語からインスピレーションを得たCairoでは、開発者がZKシステムを設計する際に既存のプログラミングスキルを活用できます。 Cairoは、宣言的アプローチにより、論理的なステートメントと計算を正規化することを可能にし、ゼロ知識証明のコンテキストで現実世界のシナリオを簡単に表現できるようにします。### **効率性とスケーラビリティ**性能はZKシステムの重要な要素です。 Cairo は、効率性とスケーラビリティに重点を置くことで、この問題を解決しています。 この言語は、ZKP回路に関連する計算オーバーヘッドを最小限に抑えるために、制約の削減やループ除去などの最適化手法を採用しています。 回路設計を最適化することで、Cairoは、高スループットと低遅延を必要とするアプリケーションのプルーフ生成と検証を高速化します。### **相互運用性と統合**Cairoは、既存のソフトウェアインフラストラクチャと統合するように設計されており、開発者はZKPの機能を他のテクノロジーと組み合わせることができます。 この言語は、標準インターフェースによる相互運用性をサポートし、ブロックチェーンプラットフォーム、スマートコントラクト、オフチェーンシステムとの統合を可能にします。 この柔軟性により、分散型アプリケーション、金融システム、およびデータ検証プロトコルに強化されたプライバシー機能を実装する可能性への扉が開かれます。 Cairo SNARK CPUアーキテクチャの一例 ### **コミュニティとエコシステム**カイロプロジェクトは、その開発に貢献する開発者、研究者、愛好家のコミュニティを育成します。 ドキュメント、チュートリアル、サンプルコードが利用できるため、オンボーディングプロセスに役立ち、開発者は概念を把握し、ZKシステムの構築を開始できます。 さらに、カイロは、言語とその機能を強化するためのサポート、ツール、および研究の進歩を提供するStarkWareの広範なエコシステムの恩恵を受けています。## **潜伏**潜む[13] これは、関数型プログラミング言語であるLispを活用して汎用回路を実装することにより、従来のSNARKと回路の限界を解決することを目的としています。 Lispを使って、Lurkはスナーク回路の任意のデータ式を評価できる「」と呼ばれる汎用関数を導入します。### **コードはデータ、データはコード**Lurk の基本原則の 1 つは、プログラムをアドレス指定可能なコンテンツを持つデータとして表現することです。 このアプローチにより、Lurk プログラムの効率的な評価と検証が可能になります。 コンテンツ・アドレッシング機能により、解析プロセスが簡素化され、結果のデータは、別のコンパイル・ステップを必要とせずに、SNARKプルーバーで直接使用できます。### **SNARKでのLispの実装**汎用回路を作るために、LurkはLispのメモリアロケータの「短所」を利用した。 アロケーターは 2 つの式を結合し、ハッシュによって結果の式への参照を生成します。 2つの式が同じ参照にハッシュされていることを証明することで、Lurkはスナーク回路で計算を実行できます。### **パススタイルの続き**Lurkは、評価プロセスを管理可能なステップに分割するContinuity Passing Style(CPS)を採用しています。 各評価ステップは処理可能な計算となり、均一で効率的な実行が可能になります。 SNARK回路に明示的な継続を含めることで、評価プロセスを段階的に進めることができます。### **チューリングの完全性と再帰的能力を与える**Lispを採用することで、Lurkはチューリング完全性を達成し、SNARK回路での無限再帰をサポートします。 この重要な機能により、複雑な計算の証明と、任意の計算を実行できる汎用回路の実装が可能になります。### **効果と用途**Lurkの能力は、幅広い意味合いを持っています。 Lurkは、無限再帰、循環、条件付き制御フローをサポートすることで、SNARK回路での複雑な計算を可能にします。 これにより、検証計算、プライベートデータ処理、チューリング完全プログラムの実行など、さまざまなアプリケーションが開かれます。## **まとめ**ドメイン固有言語(DSL)の選択肢は多様であり、ゼロ知識証明(ZK)のユースケースがブロックチェーンエコシステム全体で拡大し続けるにつれて、成長し続けると予想されます。 現時点では、ZKアプリケーションを構築するための主要な言語を確立するための競争はまだ初期段階にあり、この分野でのさらなる改善が期待できることを示唆しています。ただし、ほとんどのDSLに共通する制限は、大規模なコミュニティと堅牢なライブラリによるネットワーク効果がないことです。 活気のあるコミュニティと包括的なライブラリを持つことで、開発者のエクスペリエンスを大幅に向上させることができます。 この欠点は時間の経過とともに対処される可能性がありますが、DSL 開発に関与するチームにとっては、o1js が採用したアプローチを借りて、他のライブラリとの互換性を優先することが重要です。既存のライブラリとの互換性を確保することで、DSLはより広範な開発者コミュニティの集合的な知識とリソースを活用でき、ZKアプリケーションの実装における統合の容易化、開発の迅速化、および柔軟性の向上が可能になります。 この協調的なアプローチは、開発者の利益のためにDSLに関するより強力なエコシステムの開発を促進し、最終的にはZKテクノロジーの採用と有効性を促進します。
ZK語調査:Noir、o1js、Circom、Leo、Cairo、Lurk
はじめに
ゼロ知識 (ZK) のドメイン固有言語 (DSL) 証明。[4] は、この分野で重要な役割を果たします。 ZKプルーフは、その中核となるように、追加情報を明かすことなく、秘密データに特定の属性が存在することを証明するという課題を解決します。 しかし、ハイレベルなアイデアを具体的な証明に変換するのは複雑です。 ここでDSLの出番となり、抽象的な概念と、システムの証明に必要な回路の表現を橋渡しします。
プルーフシステム[5] は、一方の当事者が機密情報を開示することなく、他方の当事者に対して声明または請求の有効性を証明できるようにする方法または合意です。 これには、証明者が、根本的な秘密やデータを明らかにすることなく、計算の正しさや特定の知識の所有など、特定のステートメントの真実性を検証者に納得させることを可能にする一連のルールと手順が含まれます。
しかし、証明システムは高レベルの概念を直接扱うことはできません。 代わりに、目的の特性を表す回路に変換する必要があります。 この高レベルの概念から回路への移行には課題があります。 ここで、回路の言語が活躍します。 回路言語は、高レベルのアイデアを表現するための構造化された形式的な方法を提供することで、この問題を解決します。
過去 10 年間で、回路言語の数と多様性が大幅に増加しました。 ノワール、カイロなどの多くの回路言語の開発[6] と Leo は、フィールドがどの程度アクティブであるかを示します。 この言語の急増により、それらの特徴、類似点、相違点を比較対照することができます。 これらの言語を包括的に調べることで、回路言語の全体像をより深く理解することができます。
TLDR;
Noir – Aztecによって開発され、暗号化の複雑さを抽象化し、あらゆるバックグラウンドの開発者がZK回路を作成できるようにします。
– o1js – O(1) Labs によって開発されたタイプライブラリ。 開発者がスマートコントラクトを書くことを許可します。 既存のJavaおよびタイプライブラリおよびツールとうまく統合します。
**– **サーコム**[7] ** – ZKP回路開発用に設計されています。 精度と明瞭さを提供するその機能は、主にこの特定の領域に焦点を当てています。
– Leo – 開発者にユーザーフレンドリーな環境を提供します。 正式に検証されたコンパイラアーキテクチャは、早期のエラー検出と防止に重点を置いて使用されます。
**–**カイロ**[8] ** – 効率性と拡張性を重視。 相互運用性は、ブロックチェーンプラットフォーム、スマートコントラクト、オフチェーンシステムと統合できる標準インターフェースを通じてサポートされています。
Lurk – Lispを活用して共通回路を実装することで、従来のSNARKの限界を解決します。
用語集
技術的な概念に触れるので、後続のテキストで遭遇する可能性のある複雑な用語の用語集を次に示します。
Abstract Circuit Intermediate Representation (Acer) :* Noir で使用される ZK 回路の中間表現で、1 次制約システム (R1CS) にコンパイルできます。
**• カスタムゲート:ZK回路での効率的かつ安全な暗号化操作のために設計された特殊なロジックゲート。
• SHA-256: 入力を受け取り、固定サイズの出力を生成する暗号化ハッシュ関数。
Pedersen-Merkle Check: Pedersen Promise と Merkle Tree の暗号化検証技術を使用して、データの整合性と一貫性を検証できます。
• チューリング完全性: チューリングマシンをエミュレートし、十分な時間とリソースで計算可能な問題を解くことができるコンピューティングシステムの特性。
継続パッシングスタイル(CPS):*、評価プロセスを管理可能なステップに分割して、均一で効率的な実行を実現するプログラミング手法です。
フィールド要素 :*有限の数学的フィールド内の要素であり、暗号化スキームや計算で一般的に使用されます。
黒
黒い[9] は、Aztecによって設計されたドメイン固有言語(DSL)であり、暗号化の広範な知識を必要とせず、または暗号化学者になることなく、ZK回路とZKプログラムの作成を簡素化します。 その主な目標は、あらゆるバックグラウンドの開発者がZK(ゼロ知識)回路を作成できるようにすることです。 Noir は、セキュリティ、シンプルさ、パフォーマンスを優先しています。 これは、暗号化セキュリティを抽象化し、高いパフォーマンスを維持しながら暗号化プリミティブの使用を簡素化する高レベルのRustのような構文を提供します。
ZKプルーフによるスケーリングの可能性
Noirの利点の1つは、ZKプルーフが提供するプライバシー保護機能を利用できるアプリケーションの範囲を広げる可能性があることです。 これらの証明により、プライバシーが強化され、効率的な検証が可能になります。 Noir は Abstract Circuit Intermediate Representation (Acer) と呼ばれる中間表現にコンパイルされ、さらに R1CS (ランク 1 制約) と呼ばれる制約システムにコンパイルできます。 このバックエンドのプルーフシステムを言語から切り離すことで、Noir は Aztec Brettenberg、Turbo Plonk、そして Groth16 や Halo 2 などの将来の統合など、さまざまなプルーフシステムをサポートできます。
最適化と標準ライブラリ
開発者は、暗号化操作を効率的かつ安全に実行するために特別に設計された論理ゲートの一種であるカスタムゲートを活用することで、構成証明システムレベルで回路を最適化し、速度、セキュリティ、およびさまざまなアプリケーション機能を改善できます。 この言語は、SHA-256 や Pedersen-Merkle チェックなどの最適化された機能を備えた標準ライブラリを提供し、Pedersen コミットメントとマークル ツリーを使用してデータの整合性と一貫性を検証します。
! [](https://img-cdn.gateio.im/webp-social/moments-40baef27dd-627b2da8eb-dd1a6f-cd5cc0.webp"! [ノワール語の文法を示す図]
ノワール言語の構文を示す図### コード構成とプレゼンテーションスキル
Noir は、モジュールと外部クレートによるコード編成をサポートしているため、Noir プログラム用のライブラリを簡単に作成できます。 配列、タプル、構造体などの複合データ型が提供されるため、開発者はデータをグループ化し、共通の関数を実装できます。 この言語は、for ループ、if ステートメント、論理演算子、ビット演算子などの制御フロー構造もサポートしています。 ジェネリックと一次関数は、ノワールの表現力をさらに高めるために積極的に開発されています。
ノワールはまだ進化していることに注意することが重要です。 いくつかの制限と潜在的なバグがある可能性があります。 開発チームは常に言語を反復し、継続的な改善に取り組んでいます。
o1js
o1jsの[10] は、Snarkプログラミング言語を使用してスマートコントラクトを作成するために(0)1Labsによって設計されたタイプライブラリです。 Node .jsやブラウザなどの既存のオープンテクノロジーを活用して、開発者にとってよりアクセスしやすく便利なものにします。 o1jsはType上に構築することで、開発者はJavaやTypeのライブラリやツールに関する既存の知識を活用することができます。
統合
o1jsは、Javaおよびタイプライブラリおよびツールとシームレスに統合され、開発者に強力な機能と広範なコミュニティサポートを提供します。 この統合により、生産性が向上し、新しい開発環境を採用するための学習曲線が短縮されます。
VS Code サポート
一般的なコード エディターである Visual Studio Code (VS Code) のサポートを提供します。 開発者は、コード補完、構文の強調表示、デバッグなどの機能を利用して、全体的な開発エクスペリエンスを強化できます。
標準ライブラリ
O1JS は、ドメイン要素、un-64、un-32、公開鍵、秘密鍵、署名などの基本型を含む包括的な標準ライブラリを提供します。 これらの型には、暗号化スキーム、オプション データ、ブール値、および楕円曲線の処理を簡略化する組み込みメソッドが付属しています。
サーコム
Circomは、Circuit Compilerの略で、ゼロ知識証明(ZKP)回路開発用に設計された強力なドメイン固有言語(DSL)で、Jordi Balynaとiden3チームによって作成されました。
表現回路の定義
Circom は、その表現力豊かな構文により、開発者が ZKP アプリケーションの回路を正確かつ明確な方法で定義することを可能にします。 ただし、Circom の構文とセマンティクスは、Circom を初めて使用する人や、DSL や ZKP の概念に慣れていない人にとっては理解しにくい場合があります。 初心者の回路開発者や汎用プログラミング言語のバックグラウンドを持つ開発者にとっては、余分な労力と時間が必要になる場合があります。
スコープの制限
Circom は ZKP 回路開発に優れていますが、その機能は主にこの特定の領域に焦点を当てていることに注意することが重要です。 その結果、幅広いコンピューティング タスクを処理するために、より汎用的な言語を求める開発者は、Circom に多少の制約を感じるかもしれません。 より広範な開発ニーズを満たすために、Circom を他のプログラミング言語やフレームワークと組み合わせて使用する必要がある場合があります。
Circom の仕組みの説明です。 ### ツールとエコシステムの制限
Circom はさまざまな開発ツールによってサポートされており、エコシステムも拡大していますが、そのツールやリソースの利用可能性は、より確立されたプログラミング言語やフレームワークと比較して、まだ比較的限られている可能性があります。 開発者は、特定のユースケースや高度な機能に関する包括的なドキュメント、ライブラリ、コミュニティサポートを見つけるのに苦労する場合があります。 この制限は、Circomの開発速度とコミュニティの採用に影響を与える可能性があります。
互換性に関する考慮事項
Circomの互換性は、主にsnarkjsやlibsnarkなどの一般的なゼロ知識証明システムに焦点を当てています。 これにより、これらのシステムとシームレスに統合できますが、特定の機能や制限への依存関係も生じます。 他のZKPシステムを好む、または必要とする開発者は、互換性の問題を経験したり、Circomで生成された回路を好みのシステムに適応させて統合するために追加の作業が必要になる可能性があります。
レオ
獅子座[11] は、ゼロ知識証明アプリケーションの開発に特化して設計されたプログラミング言語です。 これは、開発者、特にブロックチェーンエコシステムの経験がある開発者にユーザーフレンドリーな環境を提供することを目的としています。 LEOはRustに似ており、アプリケーション開発に親しみやすさと利便性を生み出すように設計されたJavaのような要素がいくつかあります。
Leoの注目すべき機能は、プログラムをR1CSと呼ばれる低レベルの証明形式に変換するコンパイラです。 Leoコンパイラを際立たせているのは、厳密な形式検証プロセスを経ていることです。 この検証が必要なのは、プログラミング、監査、コンパイルなど、さまざまな段階でエラーが発生する可能性があるためです。 コンパイラがプログラマの意図に従うことを数学的に保証することで、Leoは、特にL2コンテキスト、ZKロールアップ、またはLEOプラットフォームのプロプライエタリプログラムにおいて、エラーが見落とされたり悪用されたりするリスクを最小限に抑えることを目的としています。
Leo言語の文法は、最善の努力にもかかわらず、間違いは避けられないことを認識しており、Leoチームは、特に重要な価値移転を扱うシステムにおいて、早期のエラー防止と検出の重要性を強調しています。 これに対処するために、Leoの正式に検証されたコンパイラアーキテクチャは、さらなる信頼性を注入し、期待されるプログラム動作からの意図しない逸脱の可能性を減らします。
言語とコンパイラに加えて、Leoはさまざまな開発者エクスペリエンスツールと機能を提供します。 これらのコンポーネントは、開発プロセスを強化し、タスクを簡素化し、効率を高めるように設計されています。 7年間の経験を活かし、イーサリアムエコシステムの進化を観察したLeoチームは、エクスプローラーなどのツール、TruffleやGanacheなどのデプロイフレームワーク、およびアプリケーションの開発とテストを簡素化するその他のリソースの進化に似たユーザーフレンドリーな環境を提供することを目指しています。
カイロ
カイロ[12] ZKP 回線の構築プロセスを簡略化する構文を提供します。 従来のプログラミング言語からインスピレーションを得たCairoでは、開発者がZKシステムを設計する際に既存のプログラミングスキルを活用できます。 Cairoは、宣言的アプローチにより、論理的なステートメントと計算を正規化することを可能にし、ゼロ知識証明のコンテキストで現実世界のシナリオを簡単に表現できるようにします。
効率性とスケーラビリティ
性能はZKシステムの重要な要素です。 Cairo は、効率性とスケーラビリティに重点を置くことで、この問題を解決しています。 この言語は、ZKP回路に関連する計算オーバーヘッドを最小限に抑えるために、制約の削減やループ除去などの最適化手法を採用しています。 回路設計を最適化することで、Cairoは、高スループットと低遅延を必要とするアプリケーションのプルーフ生成と検証を高速化します。
相互運用性と統合
Cairoは、既存のソフトウェアインフラストラクチャと統合するように設計されており、開発者はZKPの機能を他のテクノロジーと組み合わせることができます。 この言語は、標準インターフェースによる相互運用性をサポートし、ブロックチェーンプラットフォーム、スマートコントラクト、オフチェーンシステムとの統合を可能にします。 この柔軟性により、分散型アプリケーション、金融システム、およびデータ検証プロトコルに強化されたプライバシー機能を実装する可能性への扉が開かれます。
Cairo SNARK CPUアーキテクチャの一例 ### コミュニティとエコシステム
カイロプロジェクトは、その開発に貢献する開発者、研究者、愛好家のコミュニティを育成します。 ドキュメント、チュートリアル、サンプルコードが利用できるため、オンボーディングプロセスに役立ち、開発者は概念を把握し、ZKシステムの構築を開始できます。 さらに、カイロは、言語とその機能を強化するためのサポート、ツール、および研究の進歩を提供するStarkWareの広範なエコシステムの恩恵を受けています。
潜伏
潜む[13] これは、関数型プログラミング言語であるLispを活用して汎用回路を実装することにより、従来のSNARKと回路の限界を解決することを目的としています。 Lispを使って、Lurkはスナーク回路の任意のデータ式を評価できる「」と呼ばれる汎用関数を導入します。
コードはデータ、データはコード
Lurk の基本原則の 1 つは、プログラムをアドレス指定可能なコンテンツを持つデータとして表現することです。 このアプローチにより、Lurk プログラムの効率的な評価と検証が可能になります。 コンテンツ・アドレッシング機能により、解析プロセスが簡素化され、結果のデータは、別のコンパイル・ステップを必要とせずに、SNARKプルーバーで直接使用できます。
SNARKでのLispの実装
汎用回路を作るために、LurkはLispのメモリアロケータの「短所」を利用した。 アロケーターは 2 つの式を結合し、ハッシュによって結果の式への参照を生成します。 2つの式が同じ参照にハッシュされていることを証明することで、Lurkはスナーク回路で計算を実行できます。
パススタイルの続き
Lurkは、評価プロセスを管理可能なステップに分割するContinuity Passing Style(CPS)を採用しています。 各評価ステップは処理可能な計算となり、均一で効率的な実行が可能になります。 SNARK回路に明示的な継続を含めることで、評価プロセスを段階的に進めることができます。
チューリングの完全性と再帰的能力を与える
Lispを採用することで、Lurkはチューリング完全性を達成し、SNARK回路での無限再帰をサポートします。 この重要な機能により、複雑な計算の証明と、任意の計算を実行できる汎用回路の実装が可能になります。
効果と用途
Lurkの能力は、幅広い意味合いを持っています。 Lurkは、無限再帰、循環、条件付き制御フローをサポートすることで、SNARK回路での複雑な計算を可能にします。 これにより、検証計算、プライベートデータ処理、チューリング完全プログラムの実行など、さまざまなアプリケーションが開かれます。
まとめ
ドメイン固有言語(DSL)の選択肢は多様であり、ゼロ知識証明(ZK)のユースケースがブロックチェーンエコシステム全体で拡大し続けるにつれて、成長し続けると予想されます。 現時点では、ZKアプリケーションを構築するための主要な言語を確立するための競争はまだ初期段階にあり、この分野でのさらなる改善が期待できることを示唆しています。
ただし、ほとんどのDSLに共通する制限は、大規模なコミュニティと堅牢なライブラリによるネットワーク効果がないことです。 活気のあるコミュニティと包括的なライブラリを持つことで、開発者のエクスペリエンスを大幅に向上させることができます。 この欠点は時間の経過とともに対処される可能性がありますが、DSL 開発に関与するチームにとっては、o1js が採用したアプローチを借りて、他のライブラリとの互換性を優先することが重要です。
既存のライブラリとの互換性を確保することで、DSLはより広範な開発者コミュニティの集合的な知識とリソースを活用でき、ZKアプリケーションの実装における統合の容易化、開発の迅速化、および柔軟性の向上が可能になります。 この協調的なアプローチは、開発者の利益のためにDSLに関するより強力なエコシステムの開発を促進し、最終的にはZKテクノロジーの採用と有効性を促進します。