Cairo 简介
Cairo(カイロ)は、チューリング完全なゼロ知識証明システム言語であり、Solidity に慣れている開発者にとっては使い方が難しく、馴染みがありません。さらに、ライブラリが不十分であり、現在サポートされているハッシュ関数は Pedersen であり、デジタル署名アルゴリズムは ECDSA です(SNARK に比べて EdDSA のパフォーマンスが悪いため、サポートされていません)。
しかし、Cairo はまだ開発初期の段階にあり、開発体験はますます向上すると信じています。
また、証明システムとして、Prover と Verifier の役割があります。STARK の Verifier はオープンソースですが、Prover ソフトウェアはライセンスで保護される予定です。 Prover は通常、公式の Verifier に証明をアップロードしない限り、商業目的で使用することはできません。
CAIRO の各文字は次の意味を表しています。
C: CPU
AIR: Algebra Intermediate Representation
O: One AIR(verifier smart contract) to rule them all
Cairo は、StarkNet 向けに開発された専用のプログラミング言語であり、StarkNet プラットフォームで実行されるスマートコントラクトを記述するために設計されています。Cairo 言語の設計原則、特徴、アプリケーションシナリオ、他のブロックチェーンプログラミング言語との比較、およびブロックチェーン領域での将来の発展について理解することが重要です。
ブロックチェーン技術の発展、特に Ethereum スマートコントラクトの普及に伴い、より効率的で安全なブロックチェーンプログラミング言語への需要がますます高まっています。Cairo(Computable Arbitrary Input Output)言語は、この需要を満たすために生まれました。特に StarkNet の STARK 証明技術と組み合わせることで、より効率的で安全なスマートコントラクトのプログラミング方法を提供します。
Cairo の設計原則
セキュリティ:Cairo はスマートコントラクトのセキュリティを向上させることを目指しています。その設計により、プログラミングエラーの可能性が減少し、複雑で安全なコントラクトの作成をサポートします。
効率性:Cairo は STARK 証明に最適化されており、大量の計算を効果的にサポートしながら、コントラクトの効率的な実行を維持します。
柔軟性:オブジェクト指向および関数型プログラミングを含むさまざまなプログラミングパラダイムをサポートし、開発者に幅広い柔軟性を提供します。
Cairo 言語の特徴
STARK 証明との密接な結合:Cairo は STARK 証明技術と密接に結合しており、ゼロ知識証明の生成と検証が可能です。これはスマートコントラクトの安全性とプライバシーを確保するために重要です。
拡張性:Cairo は高度に拡張可能なスマートコントラクトの作成をサポートし、さまざまな複雑なアプリケーションの要件に対応します。
独自のプログラミング構造:Cairo は独自の制御フローとデータ構造を導入しており、従来のプログラミング言語とは異なる特徴を持っています。
メモリモデル:Cairo は独自のメモリモデルを採用しており、コントラクトの状態を実行中に効率的に変更およびアクセスすることができます。
他のブロックチェーンプログラミング言語との比較
Cairo は他のブロックチェーンプログラミング言語(Solidity や Vyper など)と比較して、独自の利点と特徴を持っています。Solidity と比較して、Cairo はセキュリティと効率性の面で明らかな改善があります、特に複雑なロジックや大規模なデータの処理においてはそうです。ただし、Cairo の新しさから学習曲線が急であり、特に従来のプログラミング言語に慣れている開発者にとってはそうです。
アプリケーションシナリオ
Cairo は広範なアプリケーションシナリオに適しており、特に高いセキュリティと効率性が求められる DeFi(分散型金融)、ゲーム、サプライチェーン管理などに適しています。STARK 証明技術との組み合わせにより、ユーザーのプライバシーを保護する必要があるアプリケーションに特に適しています。
開発環境
Cairo には、Remix のようなブラウザ IDE である playground が提供されています。ここでは、さまざまな例やチャレンジが提供されており、コンパイルだけでなく、プルーフを直接生成してアップロードすることもできます。
注:ただし、playground ではカスタム入力をプログラムに提供するなど、一部の機能は使用できません。この場合、この機能を使用するにはローカルで開発する必要があります。
Cairo を開発するには、まず Python をインストールする必要があります。開発者がまとめた情報は、次の hackmd ドキュメントにまとめられています:https://hackmd.io/w690dpAQTsKeKZv3oikzTQ
これには概要、ローカル開発環境のセットアップ、および Cairo の基礎が含まれています(記事の長さのため、ここに内容をコピーしません)。
StarkNet Cairo
第 2 版の Cairo は、実際には第 1 版の Cairo とほぼ同じ機能を持っていますので、開発者ドキュメントで学んだ Cairo は StarkNet バージョンでは使用できないか、大幅に異なることを心配する必要はありません。Hello Cairo/How Cairo works を読み終えた後、Hello StarkNet を読むことができます。StarkNet バージョンの Cairo にスムーズに移行できます。
注 1:私がまとめたドキュメントは、第 1 版の Cairo に基づいています。
注 2:開発者ドキュメントを最後まで読んで、StarkNet バージョンの Cairo を体験した場合、これは一般的なスマートコントラクトの使用方法に似ていることに気付くでしょう - view 関数を使用してストレージ変数をクエリでき、external 関数を使用してコントラクトを実行できます(非 StarkNet バージョンでは DApp を操作する方法は異なりますが、ここでは詳細に説明しません)。
Cairo の両方のバージョンを試すことを強くお勧めします。これにより、L2 上の単独の DApp を操作する方法と、Rollup 上で他の DApp と共存する方法の違いがわかります。これは L2 の動作方法、必要な情報、なぜその情報が必要なのかを理解するのに非常に役立ちます。
StarkNet Cairo の 0.0.2 バージョンには、現時点ではいくつかの機能が不足しています:
関数で配列や構造体のパラメータを宣言することができません
コントラクト間の相互作用がまだできません
L1 は L2 のデータにアクセスできず、L2 も L1 のデータにアクセスできません。L2 間のブリッジを構築する場合、この機能は非常に重要です。
補足と個人的な感想
SNARK シリーズの proof size に比べて、STARK の proof size ははるかに大きく、proof size と検証時間に含まれるトランザクションの数にはほとんど影響しません。そのため、多くのトランザクションを 1 つの proof としてまとめることは、STARK にとって非常に有利でコストを節約する方法です(SNARK、STARK 比較表)。ただし、これは同時に欠点でもあります。DApp や Rollup の TPS が低い場合、より多くのトランザクションを収集するためにはより長い時間を待たなければならず、それ以外の場合は検証 proof の頻度を維持するためにコストを増やすしかありません。
StarkWare と zkSync は、Rollup 宇宙の概念を持っています(Rollup 宇宙という用語は正確ではありませんが、彼らの宇宙ではすべてのサブチェーンが Rollup ではなく、データの可用性の程度によって区別されるものであり、Validium、zk Porter などの設計があります)。個人的には(データの可用性の程度に基づく)選択肢が 1 つの選択肢(完全にデータが利用可能)よりも良い方法だと思いますが、実際の実現可能性は、彼らのチームがより多くの情報をリリースするのを待つ必要があります。
Rollup がより成熟するにつれて、Rollup 間の迅速なクロスロールアップサービスを提供する流動性プロバイダーの役割がますます重要になります。zk Rollup(StarkNet、zkSync など)は Optimistic Rollup(Optimism、Arbitrum など)よりもはるかに短い最終化時間を持っており、これは流動性プロバイダーのリスクを低減するのに非常に役立ちますが、現時点では zk Rollup は契約機能や L1 <-> L2 の相互作用の完成度がさらに低いです。短期的には、クロスロールアップサービスは主に Optimitic Rollup 間に制限されるでしょう。