Aleo ブロックチェーンはスマート コントラクトの分野でユニークであり、プライバシー保護を重視しています。その中心となるのは、Rust からインスピレーションを得た静的型付け言語である Leo プログラミング言語です。 Leo はプライベート アプリケーションの開発に特化して設計されており、安全でプライベートな分散エコシステムを構築したいクリエイターを支援します。 Leo の本当にユニークな点は、汎用のゼロ知識アプリケーションのための包括的なツールキットを導入するという先駆的な役割です。このツールキットには、テスト フレームワーク、パッケージ レジストリ、インポート パーサー、リモート コンパイラー、および定理ジェネレーターが含まれています。
Leo は、開発者がプライバシーとセキュリティを優先する分散型アプリケーションを構築できるテクノロジーを構想した、Howard Wu 率いる開発者チームによって考案されました。 Leo の設計は Rust の原則に基づいており、開発プロセス中の親しみやすさと利便性を促進するために Java のような要素をいくつか組み込んでいます。さらに、Leo は、統合テスト プラットフォーム、パッケージ レジストリ、インポート コンバーターを提供することで、開発のスピードアップと開発プロセスの簡素化を目指しています。この統合により、開発者はインフラストラクチャの問題に悩まされることなく、アプリケーションのコアロジックに集中できるようになります。
Leo の顕著な機能は、プログラムを低レベルの R1CS 証明形式に変換するコンパイラーです。 Leo コンパイラーは、厳格な形式的検証プロセスにおいて独特です。脆弱性は初期プログラミングから監査およびコンパイルまでの複数の段階で発生する可能性があるため、この検証は非常に重要です。 Leo は、厳密な数学的チェックを実施してコンパイラーがプログラマーの意図と一致していることを確認することで、特に L2 コンテキスト、ZK ロールアップ、または Leo プラットフォーム上のプライベート プログラムにおいて、検出されないエラーや潜在的な脆弱性のリスクを軽減することを目指しています。
ZK プログラミング言語について説明した記事
ゼロ知識証明 (ZKP) は、入力データのプライバシーを保護しながら計算の正確さを検証できる強力な暗号化ツールです。この重要なインフラストラクチャの不可欠な部分として、ドメイン固有言語 (DSL) は、ZKP 回路の開発および検証プロセスを簡素化する上で重要な役割を果たします。これらは、抽象的な概念をシステムの証明に必要な正確な回路表現に結び付ける際に重要な役割を果たし、両者の間の重要な橋渡し役として機能します。
システムを証明する際の重要な課題の 1 つは、抽象的な高レベルの概念を実際の回路に変換することです。しかし、DSL の出現により、これらの抽象的な概念をより具体的かつ達成可能な方法で構造化した表現が容易になることで、この課題に対処できます。
過去 10 年間にわたり、DSL の数と多様性が大幅に増加するのを目の当たりにしてきました。この分野での活動は、Noir、Leo、Zinc などのさまざまな回路言語の開発に反映されています。 Circom のような汎用オプションが必要な場合でも、Cairo などの特定のプラットフォーム用にカスタマイズされたソリューションが必要な場合でも、ZKP 回路を作成するための幅広い言語とフレームワークから選択できます。
この記事では、開発者が積極的に利用している主要な ZK プログラミング言語を調査し、各言語の優れた機能を分析します。
TLDR;
カイロ バイ スターウェア
STARK 証明をサポートする汎用コンピューティング プログラムの中核言語である Cairo は、StarkNet と StarkEx の成功に重要な役割を果たし、イーサリアム メインネット上のアプリケーションのスケーラビリティを推進してきました。 Cairo が、dYdX、Sorare、Immutable X などを含むさまざまなアプリケーションのサポートにおいて重要な役割を果たしていることは言及する価値があります。 「Cairo」という名前は、「CPU Algebraic Intermediate Representation」の略語に由来しています。ゼロ知識証明の分野では、アセンブリ言語に似た役割を果たし、C、C++、Solidity などの低レベル プログラミング言語に慣れている開発者にとっても簡単に始めることができます。
Rust に触発された Cairo は、開発者がセキュリティとユーザーフレンドリーな開発に重点を置いた Starknet スマート コントラクトを作成できるようにします。 Cairo には、ZK 回路の作成を簡素化し、ユーザーが Cairo プログラム内でさまざまなタスクを実行できるようにする強力な構文があります。さらに、Cairo の大きな利点は拡張性であり、新しい機能を柔軟に導入できることです。
ZK システムでは、効率と拡張性が重要な要素であり、カイロはこれら 2 つの側面を強調することでこの要件を満たしています。この言語には、制約の削減やループの削除などの最適化戦略が統合されており、ZK 回路に通常伴う計算負荷が軽減されます。 Cairo の回路設計の最適化により、プルーフの生成と検証が高速化され、高スループットと最小限の遅延を必要とするアプリケーションに最適です。
カイロの拡大は目覚ましく、過去 2 年間でフルタイムの開発者が異常に増加しました。カイロの用途はブロックチェーンに限定されず、計算検証が必要なあらゆる状況において重要であるため、この急増はカイロの適応性を浮き彫りにしています。その結果、開発者による Cairo の採用がさらに大幅に増加すると予想されます。
2023 年 9 月 28 日、Starknet はプログラミング言語 Cairo v2.3.0 への重要なアップグレードを開始しました。このリリースは、コントラクトをよりモジュール化する上での大きな前進を示し、新機能、ストレージ オプション、イベント管理の導入によりスマート コントラクトの可能性を高めます。これらのコンポーネントの統合により、コントラクト機能を拡張する柔軟な方法が提供され、サードパーティ モジュールがコントラクトの機能を強化できるようになります。
亜鉛 by ZkSync
Zinc は、zkSync プラットフォーム上でスマート コントラクトと SNARK 回路を作成するために設計されたプログラミング言語です。 Rust 構文を使用し、Solidity の要素を組み込み、独自の機能を提供します。
ジンクのユニークな点は、その使いやすさです。安全なコードを作成するために、一次制約システム (R1CS) の複雑な詳細をすべて理解する必要はありません。亜鉛は不変性を強調し、本質的に機能的なものとします。これは、不変のデータと関数の評価を優先することにより、副作用を軽減し、よりクリーンでエラーが発生しにくいスマート コントラクト コードの作成を促進することを意味します。
さらに、Zinc にはオーバーフローの可能性を防ぐ安全な数学演算が含まれており、すべての演算の安全性が保証されます。無限ループや再帰がないなど、いくつかの制限がありますが、Zinc はコンソール ログ トレースを通じてデバッグ プロセスを簡素化します。これらのトレースにより、テスト ネットワークまたはメイン ネットワーク上の問題を追跡および解決するプロセスが簡素化され、デバッグ エクスペリエンスが向上します。
ノワール バイ アステカ
Noir は、Rust に基づいて Aztec によって開発されたオープンソース DSL で、暗号化の深い知識がなくても ZK 回路と ZK プログラムの作成を簡素化するように設計されています。これは始めるのが最も簡単な言語の 1 つと考えられており、あらゆる証明システムと互換性のある ZK アプリケーションを作成するのに適しています。 Noir は、セキュリティ、シンプルさ、パフォーマンスに重点を置いています。これは、暗号セキュリティを抽象化し、高いパフォーマンスを維持しながら基本的な暗号プリミティブの使用を簡素化する、高レベルの Rust のような構文を提供します。
Noir には、ZKP が提供するプライバシー保護機能を活用できるアプリケーションの範囲を拡大するという大きな利点があり、それによってプライバシーと検証の効率が向上します。 Noir は Abstract Circuit Intermediate Representation (Acer) と呼ばれる中間表現にコンパイルされ、さらに R1CS にコンパイルできます。バックエンド証明システムを言語自体から分離することで、Noir は、Aztec Brettenberg、Turbo Plonk、および Groth16 や Halo2 などの将来の統合を含むさまざまな証明システムをサポートできるようになります。
この言語は、SHA-256 (固定サイズの出力を生成する暗号化ハッシュ関数) や Pedersen-Merkle チェック (データの整合性と一貫性暗号化を保証するために Pedersen コミットメントとマークル ツリーを使用する方法) などの効率的な機能を含む標準ライブラリを提供します。検証技術)。 Noir の設計は Rust に似ており、関数、サブモジュール、ユーザー定義型 (構造体)、条件、ループ、グローバル定数など、アプリケーション開発者にとって馴染みのある機能が含まれています。さらに、Noir の表現力をさらに強化するために、ジェネリック関数やファーストクラス関数の開発にも継続的な努力が払われています。
Noir はまだ開発中のものであり、いくつかの制限や潜在的なバグがある可能性があることに注意してください。ただし、開発チームは言語の継続的な改善と最適化に取り組んでいます。
o1js by 0(1) Labs
以前は SnarkyJS として知られていた o1js は、SNARK プログラミング言語を使用してスマート コントラクトを作成するために 0(1)Labs によって開発されたタイプ ライブラリです。 Node.js やブラウザ互換性などの確立されたテクノロジーを活用して、開発者にとって簡単なアクセスと使いやすさを保証します。
o1js は Java および TypeScript のライブラリおよびツールとシームレスに統合でき、開発者に強力なエコシステムと広範なコミュニティ サポートを提供します。この統合により、開発プロセスが簡素化され、新しい開発環境の導入に伴う学習曲線が短縮されます。さらに、広く使用されているコード エディターである Visual Studio Code (VS Code) を完全にサポートしており、開発者はコード補完、構文の強調表示、デバッグなどの機能を最大限に活用して開発エクスペリエンスを向上させることができます。
o1js は本質的に、ZK 証明を作成するために必要な主要なツールを提供する多用途の ZK フレームワークです。基本的な算術演算、ハッシュ、署名、ブール演算、比較などを含む、さまざまな組み込みの証明可能な演算をカバーする、多様な ZK プログラムの作成をサポートします。 o1js フレームワークを使用すると、クライアント側で実行されプライベート入力を持つスマート コントラクトである、Mina プロトコル上に zkApps を構築できます。
2023 年 9 月初旬に、0(1)Labs チームが SnarkyJS から o1js に移行することを発表し、パフォーマンスの向上への取り組みを強調したことは注目に値します。特に注目すべきは、ライブラリのロード時間 (メイン スレッドをブロックする可能性があるプロセスである o1js のインポートに必要な時間を指す) の 3 ~ 4 倍の短縮を達成したことです。 Web アプリケーションの場合、ロード時間は Java の実行タイミングとページ全体のレンダリングの両方にとって非常に重要です。さらに、チームは、ユーザー インターフェイスの構築エクスペリエンスを向上させるために、Mina zkApp CLI も更新し、信頼性と明瞭性を高めるためにアーカイブ ノード API をさらに改善することを発表しました。
レオ by アレオ
Aleo ブロックチェーンはスマート コントラクトの分野でユニークであり、プライバシー保護を重視しています。その中心となるのは、Rust からインスピレーションを得た静的型付け言語である Leo プログラミング言語です。 Leo はプライベート アプリケーションの開発に特化して設計されており、安全でプライベートな分散エコシステムを構築したいクリエイターを支援します。 Leo の本当にユニークな点は、汎用のゼロ知識アプリケーションのための包括的なツールキットを導入するという先駆的な役割です。このツールキットには、テスト フレームワーク、パッケージ レジストリ、インポート パーサー、リモート コンパイラー、および定理ジェネレーターが含まれています。
Leo は、開発者がプライバシーとセキュリティを優先する分散型アプリケーションを構築できるテクノロジーを構想した、Howard Wu 率いる開発者チームによって考案されました。 Leo の設計は Rust の原則に基づいており、開発プロセス中の親しみやすさと利便性を促進するために Java のような要素をいくつか組み込んでいます。さらに、Leo は、統合テスト プラットフォーム、パッケージ レジストリ、インポート コンバーターを提供することで、開発のスピードアップと開発プロセスの簡素化を目指しています。この統合により、開発者はインフラストラクチャの問題に悩まされることなく、アプリケーションのコアロジックに集中できるようになります。
Leo の顕著な機能は、プログラムを低レベルの R1CS 証明形式に変換するコンパイラーです。 Leo コンパイラーは、厳格な形式的検証プロセスにおいて独特です。脆弱性は初期プログラミングから監査およびコンパイルまでの複数の段階で発生する可能性があるため、この検証は非常に重要です。 Leo は、厳密な数学的チェックを実施してコンパイラーがプログラマーの意図と一致していることを確認することで、特に L2 コンテキスト、ZK ロールアップ、または Leo プラットフォーム上のプライベート プログラムにおいて、検出されないエラーや潜在的な脆弱性のリスクを軽減することを目指しています。
サーコム by iden3
ZK 回路開発用に特別に設計された DSL である Circom は、Jordi Baylina と iden3 チームの共同作業の成果です。 Circom コンパイラは Rust で書かれており、その主なタスクは Circom 言語で書かれた回路をコンパイルすることです。特に、Circom は Dark Forest や Tornado Cash などの優れた現実世界の ZK アプリケーションの頼りになる選択肢となっています。その人気の理由は、最適化された WASM 証明による高速なブラウザ証明、rapidsnark による効率的なサーバー側証明、効率的なオンチェーン検証などの優れたパフォーマンスによるものです。
ただし、Circom の機能は主に ZK 回路開発に焦点を当てているため、より広範囲のコンピューティング タスクの処理にはあまり適していない可能性があることを認識することが重要です。より広範囲の開発ニーズに対応できるさらなる機能を求めている開発者は、Circom の機能が多少制限されていると感じるかもしれません。この場合、開発者は、より広範な開発ニーズを満たすために、他のプログラミング言語またはフレームワークを組み合わせる必要がある場合があります。
Circom の互換性は、snarkjs や libsnark など、広く使用されている ZKP システムに主に重点を置いています。この互換性により、これらの広く使用されているシステムとのシームレスな統合が保証されますが、同時に、Circom 回路がこれらの依存関係に関連する特定の機能と制限を継承することも意味します。代替の ZKP システムを好む、または代替の ZKP システムを必要とする開発者は、互換性の問題に直面したり、Circom が生成した回路を好みのシステムに適応させて統合するために追加の作業が必要になる場合があります。
Lurk by Lurk Lab
Lurk は、Scheme と Common Lisp の影響を受けた静的スコープの Lisp 方言であり、zk-SNARK を使用してプログラムの実行の正しさを直接証明できるというユニークな機能を備えており、コンパクトで効率的な検証を可能にします。
Lurk の主な用途は次のとおりです。
Lurk は、汎用回路を構築するときに Lisp の「cons」メモリ アロケータを最大限に活用します。このアロケーターは式を結合し、ハッシュを介して参照を生成します。重要なのは、2 つの式が実際に同じ参照にハッシュされることを証明することです。この検証により、Lurrk はスナーク回路内で計算を実行できるようになります。
Lurk は、無限再帰、ループ、条件付き制御フロー、および Groth16、SnarkPack+、Nova などの複数のバックエンド証明システムのサポートなど、非常に豊富な機能を備えています。この多用途性により、検証計算、プライベート データ処理、スナーク回路内でのチューリング完全プログラムの実行など、さまざまなアプリケーションへの扉が開かれます。
要約
ZK アプリケーションの多様性の増加に伴い、DSL には ZK 分野での開発の幅広い展望があります。 DSL を成功させる鍵は、開発者のエクスペリエンスを豊かにするために、活発なコミュニティと豊富なライブラリを構築することです。既存のライブラリとの互換性を優先する DSL は、より広範な開発者コミュニティの知識とリソースを活用できます。このアプローチにより、よりスムーズな統合が促進され、開発が加速され、ZK アプリケーションを実装する際の柔軟性が向上します。この協力的な取り組みは、DSL を中心としたより堅牢なエコシステムを育成するために不可欠であり、開発者に具体的なメリットを提供し、ZK テクノロジーの導入と有効性をさらに推進します。