IIRC rust vm 将在年底包含在 1.0 版本中
定序器并行化#
我々のロードマップの最初のステップは、トランザクションの実行に並列処理を導入することです。これは、昨日リリースされた StarkNet alpha 0.10.2 で導入されました。では、並列処理とは何でしょうか。
では、「トランザクションの並列処理」とは何を意味するのでしょうか?単純に言えば、トランザクションブロックを並列に実行することは不可能です。なぜなら、異なるトランザクションは相互に依存している場合があるからです。これは以下の例で説明されています。同じユーザーからの 3 つのトランザクションを含むブロックを考えてみましょう:
- トランザクション A:USDC を ETH に交換する
- トランザクション B:NFT に ETH を支払う
- トランザクション C:USDT を BTC に交換する
明らかに、Tx A は Tx B の前に実行する必要がありますが、Tx C はそれらとは完全に独立して並列に実行できます。各トランザクションの実行に 1 秒かかる場合、並列処理を導入することでブロック生成時間を 3 秒から 2 秒に短縮することができます。
問題の核心は、トランザクションの依存関係を事前に知ることができないということです。実際、トランザクション B を実行する際に、トランザクション A の変更に依存していることがわかります。より正確に言えば、この依存関係は、トランザクション B がトランザクション A が書き込んだストレージセルから読み取るという事実に基づいています。トランザクションは依存関係グラフを形成すると考えることができます。トランザクション A からトランザクション B へのエッジが存在する場合、A が B が読み取るストレージセルに書き込むため、B の実行は A の実行の前に行われる必要があります。以下の図は、このような依存関係グラフの例を示しています:
上記の例では、各列は並列に実行できますが、これが最適な配置です(単純にトランザクション 1-9 を順番に実行するだけです)。
事前に依存関係グラフを知らないという事実に対処するために、私たちは StarkNet オーソライザに乐观并行化を導入しました。このパラダイムでは、トランザクションを楽観的に並列実行し、競合が発生した場合に再実行します。例えば、図 1 のトランザクション 1-4 を並列に実行し、その後に Tx4 が Tx1 に依存していることがわかります。したがって、その実行は無駄です(Tx1 が生成する状態に対して実行する必要があります)。この場合、私たちは Tx4 を再実行します。
乐观并行化の上には、さまざまな最適化を追加することができます。たとえば、各実行の終了を単純に待つのではなく、無効にする依存関係が見つかった場合に実行を中止することができます。
もう 1 つの例は、どのトランザクションを再実行するかを最適化することです。図 1 に含まれるすべてのトランザクションを含むブロックがオーソライザに送信され、オーソライザには 5 つの CPU コアがあるとします。最初に、トランザクション 1-5 を並列に実行してみます。もし実行の順序が Tx2、Tx3、Tx4、Tx1、最後に Tx5 である場合、Tx4 が実行された後にのみ、Tx1→Tx4 の依存関係がわかります。したがって、再実行する必要があります。単純に、Tx5 も再実行したいかもしれませんが、Tx4 の新しい実行を考慮すると、その動作が異なる可能性があるためです。しかし、実行が終了したトランザクションから構築された依存関係グラフをトラバースし、Tx4 に依存するトランザクションのみを再実行することができます。それ以降のすべてのトランザクションを再実行する必要はありません。
Cairo-VM の新しい Rust 実装#
StarkNet のスマートコントラクトは Cairo で記述され、Cairo-VM で実行されます。Cairo の仕様はCairo 論文に記載されています。現在、オーソライザは Cairo-VM のPython 実装を使用しています。VM の実装のパフォーマンスを最適化するために、VM の Rust による再実装の作業を開始しました。この作業は、Lambdaclass の素晴らしい仕事に感謝します。彼らは StarkNet エコシステムで非常に貴重なチームとなっており、この作業はすぐに成果を上げるでしょう。
VM の Rust 実装であるcairo-rsは、現在、ネイティブの Cairo コードを実行することができます。次のステップは、スマートコントラクトの実行と Pythonic オーソライザとの統合を処理することです。cairo-rs との統合が完了すると、オーソライザのパフォーマンスが大幅に向上することが期待されます。
Rust でのオーソライザの再実装#
Python から Rust へのパフォーマンス向上の移行は、Cairo VM に限定されません。上記の改善に加えて、オーソライザを Rust でゼロから再実装する計画もあります。Rust の内部的な利点に加えて、これによりオーソライザの他の最適化の機会も提供されます。いくつかの例を挙げると、Python-Rust の通信のオーバーヘッドを気にすることなく cairo-rs の利点を享受することができ、状態の保存とアクセス方法を完全に再設計することができます(現在はPatricia-Trie 構造に基づいています)。
その他の問題
-
StarkNet テストネットでは、実行トレースの制限(実行ステップ数)があり、現在は 100 万に制限されています。将来的にはより高い制限が設定される予定です。
-
Stark のカスタマイズアプリ(StarkEx のようなもの)は開発可能ですが、現時点ではエコシステムプロジェクトが使用していないため、証明コードの生成はまだブラックボックスであり、オープンソース化されていません。Starkware が将来的にオープンソース化するまで、このようなアプリは市場に参入することはできません。