原标题:私が心配するのをやめて、実行シャーディングを愛するようになった理由
動画リンク: https://www.youtube.com/watch?v=A0OXif6r-Qk
講演者: Scott Sunarto (@smsunarto) リサーチデーにて
記事編集: Justin Zhao (@hiCaptainZ)
皆さんこんにちは、私は Scott (@smsunarto) で、Augus Labs(@ArgusLabs_)の創設者です。今日は、私たちがしばらく触れていなかったトピックについて話したいと思います。ロールアップが時代の主流となるにつれて、実行シャーディングについての議論はデータシャーディングほど頻繁ではなくなりました。そこで、少し忘れられたこのトピック、実行シャーディングを再考してみましょう。
これは軽いトークになるでしょう。皆さんが複雑な概念を一日中聞いてきたことを知っているので、できるだけ実用的な議論にしたいと思います。このプレゼンテーションのために適切なスライドデザインを用意しました。
私を知らない方に面白いことを言うと、私は Twitter でアニメの女の子として知られています。ここに来るために大学の卒業式を逃したことは、両親を非常に不満にさせました。現在、私は Argus Labs の創設者です。私たちは自分たちをゲーム会社だと考えており、インフラや暗号通貨の会社ではありません。私の最大の悩みの一つは、暗号ゲームの分野にいるすべての人がツールを構築したがるのに、コンテンツやアプリを作りたがらないことです。私たちは、ユーザーが実際に使用できるアプリがもっと必要です。
以前、私は賢い友人の Brian Gu (@gubsheep) と Alan Luo (@alanluo_0) と共に Dark Forest (@darkforest_eth) を創造しました。Brian は現在 0xPARC (@0xPARC) を運営しており、彼は私よりもずっと賢いです。
今日の議論は実行シャーディングに焦点を当てますが、大多数の人が実行シャーディングについての議論に不慣れな背景の中で行います。私たちは通常、Layer1、例えばイーサリアムのシャーディングや Near のシャーディングの文脈で実行シャーディングについて議論します。しかし、今日はその背景を変えたいと思います。ロールアップ環境でのシャーディングがどのようなものか考えてみましょう。
ここでの基本的な問題は、なぜゲーム会社が自分自身のロールアップを構築するのか、そして私たちが『ワールド・オブ・ウォークラフト』からロールアップを設計するために何を学べるかということです。さらに、ロールアップの設計空間が現在の現実をはるかに超えていることを探求します。
これらの質問に答えるために、2020 年に戻りましょう。その時、Dark Forest のアイデアが初めて考案されました。私たちは、自分たちがすべてのゲームアクションをチェーン上のトランザクションにするゲームを作ったらどうなるかと自問しました。その時、この前提は馬鹿げていると思われ、今日の多くの人にとってもそうです。しかし、これは面白い仮定なので、私たちはそれを構築し、Dark Forest が誕生しました。
Dark Forest は、完全にイーサリアムに基づいた全チェーン空間探索 MMORTS ゲームで、ZK-Snarks によって駆動されています。2020 年に戻ると、ZK は今日ほど人気がなく、ほとんど文書がありませんでした。Circom の唯一の利用可能な文書は、Jordi Baylina (@jbaylina) の Google Docs でした。困難に直面しながらも、私たちはプロセスから多くを学び、Dark Forest はこれらの学びの具現化です。
Dark Forest は、私たちが想像していたよりも大きな実験です。私たちは 10,000 人以上のプレイヤーを持ち、数兆のガスを費やし、ゲームは混乱に満ち、人々はチェーン上で裏切り合っています。Dark Forest とチェーン上ゲームの最も魅力的な点は、プラットフォーム化の本質です。全チェーンゲームを持つことで、新たな行動の設計空間の扉が開かれ、人々がゲームと相互作用するスマートコントラクトを構築したり、Dark Forest Arena や GPU マイナーのような代替クライアントやゲームモードを作成することが可能になります。
しかし、巨大な力には巨大な責任が伴います。現在 Gnosis Chain と呼ばれる xDai 上で Dark Forest を立ち上げたとき、私たちは最終的にチェーンの全ブロックスペースを埋め尽くしました。これにより、DeFi、NFT、または他の xDAI の何かを含む他のすべてのことに対して、チェーンは基本的に使用できなくなりました。
さて、今後どうするのでしょうか?私たちは行き詰まっているのでしょうか?全チェーンゲームは決して現実にならないのでしょうか?それとも、JPEG の小さな画像だけをチェーン上に作成し、人々を説得してお金が木から生えていると言うべきなのでしょうか?答えは、私たちがソフトウェアに物事をさせることです。私たちの多くは、ブロックチェーンやロールアップに対する見方が非常に硬直しており、あまり改善の余地がないように思えます。しかし、私はそうは思いません。私たちは実験を行い、新しい可能性を見つけることができます。
私たちは自問します:もし私たちがゲームのためだけにブロックチェーンをゼロから設計するなら、それはどのようなものになるでしょうか?私たちは高いスループットが必要なので、読み書きの拡張が必要です。ほとんどのブロックチェーンは、大量の書き込みを行うように設計されています。毎秒の取引数 TPS は人々が自慢する指標ですが、実際には読み取りも同様に重要です。ブロックチェーンノードから読み取れなければ、プレイヤーの位置をどうやって知るのでしょうか?これは実際に私たちがブロックチェーン構築で発見した最初のボトルネックです。
Dark Forest は、全ノードが大量に使用され、I/O が爆発的に増加するという問題に直面しました。なぜなら、私たちはチェーン上の状態からデータを読み取る必要があったからです。これにより、数千ドルのサーバーコストが発生し、これらのコストは xDAI チームが私たちのために寛大に負担してくれました。しかし、これは長期的には理想的ではありません。私たちは高いスループットが必要であり、毎秒の書き込み取引だけでなく、ブロックチェーン自体からデータを取得するための読み取りも必要です。
私たちはまた、ノイジー・ネイバー問題を回避するために水平にスケーラブルなブロックチェーンが必要です。人気のあるゲームが突然ブロックチェーン上で問題を起こし、すべての作業が停止することを望んでいません。また、私たちは柔軟性とカスタマイズ性が必要で、状態機械を変更してゲームデザインに適応させることができる必要があります。これには、自己実行するゲームループを持つことが含まれます。
最後に、重要ではないとは言えませんが、オンラインゲームアーキテクチャに不慣れな人にとっては少し曖昧かもしれませんが、高いティックレートが必要です。ティックはゲーム世界における時間の原子単位です。ブロックチェーンの文脈では、ブロックが時間の原子単位です。ゲームでは、ティックがあります。これは、全チェーンゲームを構築する際にほぼ同じであり、ブロックチェーンのティックまたはブロック生成の速度がゲーム自体のティックに等しいのです。
したがって、私たちが必要とするのは、高いスループット、水平にスケーラブルで、柔軟にカスタマイズ可能で、高いティックレートを持つブロックチェーンです。このような設計が、ゲームのためにゼロから設計されたブロックチェーンのニーズを満たすことができます。
もしあなたがより高いティックレートや毎秒より多くのブロックを持っているなら、ゲームはより反応が良く感じられます。逆に、ティックレートが低いと、ゲームはより鈍く感じられます。重要なことは、ブロック生成に遅延があると、ゲーム内で明らかな遅延を感じることです。これは悪い体験です。もしあなたがゲームに負けてコンピュータに向かって叫んでいる怒りのプレイヤーを扱ったことがあるなら、それは絶対に悪い状況です。
現在、私たちのロールアップは毎秒 1 ブロックで、これは 1 ティックに相当します。もっとクールなゲームを作りたいなら、より高いティックレートが必要です。例えば、Minecraft というシンプルなピクセルアートゲームは、毎秒 26 回のティックがあります。私たちは、Minecraft のように反応が良いゲームを構築するにはまだ長い道のりがあります。
一つの可能な解決策は、自分たちのロールアップを展開することです。一見、問題を解決しているように見えますが、実際には問題の根本原因を解決していません。例えば、書き込みスループットが向上しますが、ゲームが必要とするレベルには完全には達しません。もちろん、あなたのゲームに 100 人のプレイヤーがいる場合、それは十分です。しかし、より高いスループットが必要なゲームを構築したい場合、現在の構築方法の I/O により、非常に厳しい制限があります。
読み取りに関しては、実際にはパフォーマンスの向上は得られません。あなたはまだインデクサーに依存する必要があります。実際の水平スケーラビリティは得られません。ゲームを水平にスケーリングするために新しいロールアップを起動しようとすると、既存のスマートコントラクトエコシステムを壊すことになります。プレイヤーが展開したマーケットは、ゲームを水平にスケーリングするために起動した他のチェーンと連携できなくなります。これにより、多くの問題が発生します。
最後に、高いティックレートと毎秒のブロック数は少し難しいですが、私たちはそれを推進するために最善を尽くすことができます。毎秒 2 ブロック、場合によっては 3 ブロックを得ることができるかもしれませんが、これはこれらのブロックチェーンが到達できる最遠の地点です。なぜなら、再マーシャリングのようなことが計算サイクルに非常に依存しているからです。
この問題を解決するために、私たちは 21 世紀初頭と 20 世紀 90 年代末に、MMO のようなオンラインゲームが登場したときに戻りました。彼らはシャーディングという概念を持っていました。これは新しい概念ではなく、過去に存在していました。私たちがデータベースアーキテクチャで使用する「シャーディング」という言葉は、実際には Ultima Online の引用から来ています。彼らは最初に「シャーディング」という言葉を使って、異なるサーバーを説明しました。
では、ゲーム内のシャーディングはどのように機能するのでしょうか?これは一刀両断の解決策ではありません。これはツールボックスの中の一つのツールであり、あなたがそれをゲームにどのように適応させるかは具体的な状況によります。例えば、最初のシャーディング構造は、私が位置ベースのシャーディングと呼ぶものです。良い思考モデルは、デカルト座標系が 4 つの象限に分割され、それぞれの象限に独自のゲームシャードがあると想像することです。シャードを横断したいときは、別のシャードに通信を送り、「そこに移動したい」と言います。そうすると、あなたはシャードに転送され、以前のプレイヤーの身体は残ります。これにより、サーバーの負荷を複数の物理インスタンスに分散させ、1 つのサーバーがゲーム全体の計算を行うことを強制しません。2 つ目の構造は現在より人気があります。それはマルチユニバースシャーディングと呼ばれ、複数のゲームインスタンスが互いにミラーリングされています。あなたは行きたいシャードを選ぶことができ、デフォルトで負荷分散されるため、各サーバーが過度に混雑することはありません。
さて、重要な質問は、この概念をロールアップにどのように持ち込むかということです。これが私たちが World Engine を作成した理由です。World Engine は、私たちのフラッグシップインフラであり、基本的には起動のために設計された意見のあるシャーディングソーターです。私たちが過去のいくつかの議論で見た多くのシャーディングソーターの設計とは異なり、私たちの設計は私たちのニーズにより適しています。私たちが最適化した方向は、A、スループット、B、ロックが実行時間を妨げないことを確認し、ティックレートとブロック時間をできるだけ効率的に保つことです。したがって、デフォルトで同期されており、部分的なソートの方法でソーターを設計しています。強制的な全体ソート(各トランザクションが別のトランザクションの後に発生する必要がある)ではありません。
ここでの重要な構成要素は、私たちには 2 つの主要なものがあるということです。EVM ベースのシャーディングがあり、これは純粋な EVM チェーンのようなもので、プレイヤーはその上にスマートコントラクトを展開し、ゲームと組み合わせて、税金を伴うマーケットを作成することができます。それは通常のチェーンのようなものです。毎秒 1 ブロックやそのようなもので、すべての典型的なデバイスやマーケットのためのものを行うのに十分です。
ここでの秘密の成分は、私たちがゲームシャーディングも使用しているということです。これは本質的に高性能ゲームサーバーとして設計されたミニブロックチェーンです。私たちは「自分の実装を持ち込む」インターフェースを持っており、これによりあなたはこのシャードを好みに応じてカスタマイズできます。あなたは自分のシャードを構築し、基盤のシャードに注入することができます。標準のインターフェースを実装するだけで済みます。あなたが馴染みのある Cosmos のように、Cosmos には ABC インターフェースがあります。基本的に、これを類似の仕様に統合し、自分のシャードを World Engine スタックに持ち込むことができます。
ここでの重要な点は、私たちが現在のシャーディング構造では実現できない高いティックレートを持っているということです。これが私が Cardinal を紹介したい理由です。Cardinal は World Engine の最初のゲームシャーディング実装です。これはエンティティ - コンポーネント - システム(ECS)を使用し、データ指向のアーキテクチャを持っています。これにより、私たちはゲームを並行化し、ゲーム計算のスループットを向上させることができます。これは、最大毎秒 20 回のティックレートを持つ可配置のティックレートを持っています。ここでのブロックチェーンの人々にとっては、毎秒 20 ブロックということです。
私たちはまた、地理的に位置を特定して遅延を減少させることができます。例えば、アメリカにソーターがあり、アジアの人々はトランザクションがソーターに到達するのを待つために 300 ミリ秒の遅延を強いられるかもしれません。これはゲームにとって大きな問題です。なぜなら、300 ミリ秒は長い時間だからです。もしあなたが 200 ミリ秒の遅延を持つ FPS ゲームをプレイしようとしたら、それは基本的にあなたはすでに死んでいるということです。
私たちにとってもう一つ重要なポイントは、それが自己インデックス化されているということです。私たちはもはや外部インデクサーを必要としません。私たちはゲーム状態をキャッシュするためにこれらのフレームワークを必要としません。これにより、私たちはインデクサーがソーターのブロックを追いかけている間に遅延の問題を抱えることなく、よりリアルタイムのゲームを構築することができます。
私たちはまた、ZK 検証などを並行化するためのプラグインシステムを持っています。少なくとも私にとって最良の部分は、あなたが Go でコードを書くことができることです。もはや Solidity を使ってゲームを動かす必要はありません。もしあなたが Solidity を使ってブロックチェーンゲームを構築しようとしたことがあるなら、それは悪夢です。
しかし、私たちのシャーディング構造の重要な点は、あなたがシャードとして何でも構築できるということです。基本的に、それらは無限の設計空間のようなもので、シャードが何であるかということです。
仮にあなたが Go でゲームコードを書くのが好きでないなら、他の方法を選ぶことができます。しかし、私たちは Solidity でゲームを実現できる Solidity ゲームシャーディングを開発中であり、これは Cardinal の多くの利点を保持しつつ、コードを書く可能性を提供します。あなたはまた、独自のメモリプールとソート構造を持つ NFT ミントシャードを作成し、基本的なミントのノイジー・ネイバー問題を解決することもできます。あなたはさらに、NFT でゲームアイデンティティを表現するゲームアイデンティティシャードを作成し、プライベートキーを共有するのではなく、NFT を通じてゲームアイデンティティを簡単に取引できるようにすることもできます。
これは高度なアーキテクチャであり、今日は時間の関係であまり深い詳細には触れません。重要なのは、私たちが EVM スマートコントラクトをカスタムのピックアンドパスを使用してゲームシャーディングと組み合わせることを許可しているということです。私たちは Geth の周りにラッパーを作成し、それらの間で通信を可能にし、双方向で大量の設計空間を開きます。私たちはデフォルトで同期しており、ロックなしでシャード間でシームレスに相互運用できるようにします。
私たちの共有ソーターは特異であり、グローバルソートを優先する原子束の共有シーケンス構造を使用していないため、ロックメカニズムが必要なく、メインスレッドをブロックするような問題を引き起こさず、結果として不安定なティックレートとブロック時間を引き起こし、ゲームに遅延をもたらします。また、各シャードのブロック時間に制限を設け、サービス拒否を防ぐためのさまざまな暗号経済学と構造が必要です。さらに、私は多くの VCR ソーター構造で見られない大きな問題に触れたいと思います:異なるシャードが互いに依存し、デッドロックを引き起こす場合、どうすればよいでしょうか?非同期設計によって、これは問題ではありません。なぜなら、誰もが自分のやりたいことをしてから、放置するからです。
実際、シャード間の原子束やロールアップは通常必要ありません。私たちの使用ケースに対して、原子束を必要とするものは必要ありませんし、私たちが使用ケースの純度に基づいてロールアップを設計するべきだとは考えていません。これにより、他の多くの興味深い特性が生まれます。例えば、各ゲームシャードは基盤チェーン用の個別の DA 層を持つことができます。例えば、基盤シャードを使用してデータをイーサリアムにプッシュし、ゲームシャードは Celestia(データ可用性委員会のようなもの)にデータをプッシュできます。また、ゲームシャードノードを実行せずに基盤シャード Geth 全ノードを単独で実行できるため、全ノードのハードウェア要件を減らすことができ、Alchemy などのものとの統合が容易になります。
要約すると、私はここで率直に言いたいのですが、多くの人が自分たちの構造がすべての問題を解決できることを望んでいますが、私たちはそうではありません。私たちは自分たちの構造が私たちにとって有用であると考えていますが、あなたの使用ケースには適用できないかもしれません。私たちの構造がすべての人に適用できると仮定するのは非現実的です。私たちにとって、それは私たちのニーズに合致し、高いスループット、水平スケーラビリティ、柔軟性、高いティックレートを提供しますが、それは癌を治すものではありません。もしあなたが同期可能な DeFi プロトコルを必要とするなら、この構造はあなたには適していないかもしれません。
全体として、私は人本(human-centric)ブロックチェーンアーキテクチャの概念を心から信じています。特定のユーザーの役割や使用ケースを中心に設計することで、すべての人の問題を解決しようとするのではなく、より良いトレードオフが可能になります。ルネサンスの時代が到来しました。誰もが自分の特定のニーズを満たすために自分のロールアップを設計できるようになり、一般的な解決策に依存する必要はありません。私は、寒武紀の大爆発を受け入れるべきだと思います。すべての人に合うようにロールアップを構築するのではなく、同じ問題を解決するために役立たないものです。私は個人的に、より多くの人々が使用ケースに基づいたより多くのロールアップ設計空間を探求することを楽しみにしています。例えば、資産交換のために特別に設計されたロールアップはどのようなものになるでしょうか?それは意図に基づくものでしょうか?チェーン上の CLOB(中央限価注文薄)のために特別に設計されたロールアップはどのようなものになるでしょうか?ここで、マイクを MJ に渡します。招待してくれてありがとう。
英語版:
https://captainz.xlog.app/Why-does-Argus-Build-FOC-Gaming-INFRA-Using-Sharding