オリジナルタイトル:心配するのをやめて実行シャーディングを愛する方法
ビデオリンク: https://www.youtube.com/watch?v=A0OXif6r-Qk
講師: Scott Sunarto (@smsunarto) リサーチデーにて
記事編集者: Justin Zhao (@hiCaptainZ)
皆さんこんにちは、私の名前はスコット(@smsunarto)で、Augus Labs(@ArgusLabs_)の創設者です。今日は、私たちがしばらく触れていなかったトピックについて話します。ロールアップが時代の流行となっている中で、私たちはデータシャーディングについて話すことが多いですが、実行シャーディングについてはあまり話しません。そこで、少し忘れられた実行シャーディングのトピックを再訪しましょう。
リラックスしたトークになるでしょう。皆さんが複雑な概念を一日中聞いていることを知っているので、できるだけ実践的に保つことを目指します。このプレゼンテーションのために適切なスライドデザインを用意しました。
私を知らない方のために、面白い事実として、私は Twitter でアニメの女の子として知られています。また、ここにいるために大学の卒業式を逃したことは、両親にとっては残念なことでした。現在、私は Argus Labs の創設者です。私たちはインフラや暗号通貨の会社ではなく、ゲーム会社として自認しています。私の最大の不満の一つは、暗号ゲームの皆がツールを作りたがる一方で、コンテンツやアプリケーションを作りたがらないことです。ユーザーが実際に使用できるアプリケーションがもっと必要です。
以前、私は素晴らしい友人たちであるブライアン・グ(@gubsheep)とアラン・ロ(@alanluo_0)と共にダークフォレスト(@darkforest_eth)の共同制作者でした。ブライアンは現在 0xPARC(@0xPARC)を運営しており、私よりも何倍も賢いです。
今日のトークは実行シャーディングに焦点を当てますが、ほとんどの実行シャーディングに関する議論とは異なる文脈で行います。通常、私たちは Ethereum シャーディングや Near シャーディングのようなレイヤー 1 の文脈で実行シャーディングについて議論します。しかし、今日は文脈を少し変えたいと思います。ロールアップ環境でシャーディングがどのように見えるかを考えてみましょう。
ここでの根本的な質問は、なぜゲーム会社が独自のロールアップを設計しているのか、そしてロールアップを設計する際に World of Warcraft から何を学べるのかということです。また、ロールアップの設計空間が現在の現実を超えてどのように拡大できるかも探ります。
これらの質問に答えるために、2020 年にダークフォレストのアイデアが最初に考案された時に戻りましょう。私たちは「すべてのゲームアクションがオンチェーンのトランザクションであるゲームを作ったらどうなるだろう?」と自問しました。当時はそれはばかげた前提でしたし、今でも多くの人にとってはそうです。しかし、それは興味深い仮説だったので、私たちはそれを構築し、ダークフォレストが誕生しました。
ダークフォレストは、ZK-Snarks によって動かされる Ethereum 上の完全なオンチェーン宇宙探査 MMORTS ゲームです。2020 年当時、ZK は今日ほど人気がなく、ドキュメントはほとんど存在しませんでした。Circom の唯一の利用可能なドキュメントは、ジョルディ・バイリナ(@jbaylina)の Google ドキュメントでした。困難にもかかわらず、私たちはプロセスから多くを学び、ダークフォレストはその具現化です。
ダークフォレストは、私たちが思っていたよりも大きく成長した実験でした。私たちは 1 万人以上のプレイヤーを持ち、数兆のガスを消費し、プレイヤー同士がオンチェーンで裏切り合う多くの混乱がありました。ダークフォレストとオンチェーンゲームの最も魅力的な点は、プラットフォーム化の性質です。オンチェーンゲームを持つことで、出現する行動の設計空間が開かれ、人々がゲームと相互作用するスマートコントラクトを構築でき、ダークフォレストアリーナや GPU マイナーのような代替クライアントやゲームモードを作成できます。
しかし、大きな力には大きな責任が伴います。私たちがダークフォレストを xDai で立ち上げたとき、現在は Gnosis Chain として知られていますが、私たちはチェーンの全ブロックスペースを埋めてしまいました。これにより、DeFi、NFT、または他の xDAI 関連のものを含む他の用途にはほとんど使用できなくなりました。
では、今後どうするのでしょうか?私たちは行き詰まっているのでしょうか?オンチェーンゲームは決して現実にならないのでしょうか?それとも、オンチェーンにあるのは JPEG だけのゲームを作り続け、人々をお金が木から生えると納得させるのでしょうか?答えは、私たちはソフトウェアに物事をさせるということです。私たちの多くは、ブロックチェーンやロールアップを非常に硬直した方法で考えており、改善の余地があまりないかのように感じています。しかし、私はそうは思いません。私たちは実験し、新しい可能性を見つけることができます。
私たちは自問しました:もしゲーム専用のブロックチェーンをゼロから設計するなら、それはどのように見えるでしょうか?私たちは高いスループットが必要なので、読み書きの両方をスケールさせる必要があります。ほとんどのブロックチェーンは多くの書き込みを行うように設計されています。人々が自慢するのはトランザクション毎秒のメトリックですが、現実には読み取りも同じくらい重要です。ブロックチェーンノードから読み取れなければ、どこにプレイするかを知ることができません。これは実際に私たちがブロックチェーン構造内で見つけた最初のボトルネックです。
ダークフォレストは、オンチェーンの状態からデータを読み取る必要があったため、フルノードが過度に利用され、I/O が爆発する問題に直面しました。これにより、数千ドルのサーバーコストが発生し、xDAI チームが親切に私たちのためにカバーしてくれました。しかし、これは長期的には理想的ではありません。私たちは、書き込みトランザクション毎秒だけでなく、ブロックチェーン自体からデータを取得するための読み取りにも高いスループットが必要です。
また、ノイジー・ネイバー問題を避けるために、水平スケーラブルなブロックチェーンが必要です。人気のあるゲームが突然ブロックチェーン上で落ち始め、すべての動作を停止させることは望ましくありません。また、ゲーム用に設計された状態マシンを変更できるように、柔軟性とカスタマイズ性も必要です。これには、ゲームループを持ち、それを自己実行可能にすることが含まれます。
最後に、これはオンラインゲームアーキテクチャに不慣れな人にはやや曖昧かもしれませんが、高いティックレートが必要です。ティックはゲーム世界における時間の原子単位です。ブロックチェーンの文脈では、ブロックが時間の原子単位です。ゲームでは、ティックがあります。これは、完全なオンチェーンゲームを構築する際に、ブロックチェーンのティックの速度やブロック生成の速度がゲーム自体のティックと等しい場合にほぼ類似しています。
ティックが高いまたはブロック毎秒が高い場合、ゲームはより応答性が高く感じられます。逆に、ティックが低いと、ゲームはより鈍く感じられます。重要な点は、ブロック生成が遅れると、ゲーム内で視覚的にラグを感じることです。これはひどい体験です。もし、ゲームを失ったことでコンピュータに向かって怒鳴っているゲーマーに遭遇したことがあるなら、それは本当に厄介な状況です。
現在、私たちのロールアップは 1 秒に 1 ブロックで、これは 1 ティックレートに相当します。もっとクールなゲームを持ちたいのであれば、より高いティックレートが必要です。たとえば、Minecraft というシンプルなピクセルアートゲームは、1 秒間に 26 ティックあります。Minecraft と同じくらい応答性の高いゲームを構築するには、まだ長い道のりがあります。
一つの可能な解決策は、独自のロールアップを展開することです。一見すると、これは表面的な問題を解決するように見えますが、実際には問題の根本的な原因を解決するわけではありません。たとえば、書き込みのスループットは高くなりますが、ゲームが必要とするレベルには達しません。確かに、ゲームに 100 人のプレイヤーがいる場合、それで十分かもしれません。しかし、はるかに高いスループットを必要とするゲームを構築したい場合、現在の構造における I/O の方法により、非常に厳しい制限があります。
読み取りに関しては、パフォーマンスの向上は得られません。依然としてインデクサーに依存する必要があります。水平スケーラビリティは実際にはありません。ゲームを水平にスケールさせるために新しいロールアップを立ち上げようとすると、既存のスマートコントラクトエコシステムが断片化されます。プレイヤーが展開するマーケットプレイスは、ゲームを水平にスケールさせるために立ち上げた他のチェーンでは機能しません。これにより、多くの問題が生じます。
最後に、高いティックレートとブロック毎秒は実際には存在しません。私たちはできるだけ頑張って押し進めることができます。おそらく、1 秒に 2 ブロック、場合によっては 3 ブロックを得ることができるかもしれませんが、これらのブロックチェーンが行くところはそれが限界です。再マーシャリングなどのオーバーヘッドが多く、計算サイクルに非常に負担がかかります。
これに対処するために、私たちは 2000 年代初頭や 1990 年代後半にオンラインゲーム、特に MMO が登場した頃に目を向けます。彼らはシャーディングの概念を持っていました。これは新しい概念ではなく、過去に存在していました。データベースアーキテクチャで使用する「シャーディング」という用語は、実際には Ultima Online の参照から来ています。彼らは異なるサーバーを説明するために「シャーディング」という用語を最初に使用した一つです。
では、ゲームにおけるシャーディングはどのように機能するのでしょうか?これは一律の解決策ではありません。これはツールボックスの中のツールであり、ゲームにどのように適合させるかは文脈によって異なります。たとえば、最初のシャーディング構造は、私が「位置ベースのシャーディング」と呼ぶものです。良いメンタルモデルは、4 つの象限に分かれた直交座標図を想像することです。それぞれの象限には独自のゲームシャードがあります。シャードを越えたいときは、他のシャードに「そこに移動したい」と伝える通信を行い、次に自分のシャードにテレポートされ、以前のプレイヤーの体は置き去りにされます。これにより、サーバーの負荷を複数の物理インスタンスに分散させ、単一のサーバーにゲーム世界全体の計算を強制することを避けます。
2 番目の構造は、最近ではより一般的です。これはマルチバースシャーディングと呼ばれ、互いにミラーリングされたゲームの複数のインスタンスを持ちます。どのシャードに行くかを選択でき、デフォルトで負荷分散されているため、各サーバーが過度に混雑することはありません。
さて、ここでの重要な質問は、この概念をロールアップにどのように持ち込むかということです。これが私たちがワールドエンジンを作成した理由です。ワールドエンジンは、基本的にスタート用に設計された意見を持ったシャードシーケンサーです。過去のいくつかのトークで見られた多くのシャードシーケンサーの設計とは異なり、私たちの設計は異なり、私たちのニーズにより適しています。私たちが最適化しているのは、A、スループット、B、ロックがランタイムをブロックしないようにして、ティックレートとブロック時間ができるだけ効率的であることを確認することです。したがって、デフォルトで同期的であり、シーケンサーの設計方法は部分順序であり、各トランザクションが他のトランザクションの後に発生する必要がないようにしています。
ここでの重要なコンポーネントは、2 つの主要なものがあります。EVM ベースのシャードがあり、これはプレイヤーがゲームと組み合わせるためにスマートコントラクトを展開できる純粋な EVM チェーンのようなものです。税金を伴うマーケットプレイスを作成するなど、通常のチェーンのようになります。つまり、1 秒に 1 ブロックまたは 1 つのこと、すべての典型的なデバイスやマーケットプレイスの作業を行うのに十分です。
ここでの秘密の成分は、ゲームシャードを使用することです。これは本質的に高性能ゲームサーバーとして機能するために設計されたミニブロックチェーンです。あなたの好みに合わせてこのシャードをカスタマイズできるように、独自の実装インターフェースを持っています。基本シャードに注入するために独自のシャードを構築できます。標準的なインターフェースのセットを実装する必要があります。たとえば、Cosmos に精通している場合、Cosmos には ABC インターフェースがあります。基本的に、独自のシャードをワールドエンジンスタックに持ち込むために、同様の仕様に従うことができます。
ここでの重要な点は、現在のシャーディング構造では達成できない高いティックレートを持っていることです。ここで、私は Cardinal を紹介したいと思います。Cardinal は、ワールドエンジンの最初のゲームシャード実装です。これは、データ指向アーキテクチャを持つエンティティ・コンポーネント・システムを使用しています。これにより、ゲームを並列化し、ゲーム計算のスループットを高めることができます。最大 20 ティック毎秒の設定可能なティックレートを持っています。ここにいるブロックチェーンの人々にとっては、これは 20 ブロック毎秒です。
また、これを地理的にローカライズしてレイテンシを減少させることもできます。現在、シーケンサーは米国に基づいている可能性があり、アジアの人々はそのトランザクションがシーケンサーに到達するまでに 300 ミリ秒のレイテンシを待たなければなりません。これはゲームにとって大きな問題です。300 ミリ秒は長い時間です。200 ミリ秒のレイテンシで FPS ゲームをプレイしようとすると、それは永遠に感じられ、すでに死んでいます。
私たちにとってもう一つ重要な点は、それが自己インデクシングであることです。もはや外部インデクサーを持つ必要はありません。ゲーム内の状態をキャッシュするためにこれらのフレームワークを必要としません。これにより、インデクサーがシーケンサーのブロックに追いつこうとしているためにレイテンシの問題がない、よりリアルタイムのゲームを構築できるようになります。
また、ZK 検証を並列化するためのプラグインシステムもあります。私にとっての最も良い部分は、Go でコードを書くことができることです。ゲームを機能させるために Solidity と格闘する必要はありません。以前に Solidity でブロックチェーンゲームを構築しようとしたことがあるなら、それは本当に悪夢です。
しかし、私たちのシャード構造の重要な点は、シャードとして何でも構築できることです。シャードがどのようなものであるかの無限の設計空間のようなものです。
たとえば、ゲームコードを GO で書くのが嫌いな場合は、オプトアウトできますが、再度、私たちは多くの Cardinal の利点を保持しながら、Solidity でゲーム実装を書くことを可能にする Solidity ゲームシャードに取り組んでいます。ユニークなメモリプールと基本的なミントのノイジー・ネイバー問題を解決するための順序構造を持つ NFT ミンティングシャードを作成することもできます。ゲームアイデンティティシャードを持ち、NFT を使用してゲームアイデンティティを表現し、プライベートキーを提供することなく NFT を使用してゲームアイデンティティを簡単に取引できるようにすることもできます。これは推奨されません。
これは高レベルの構造であり、時間の制約のために深く掘り下げることはありません。ここでの重要な点は、EVM スマートコントラクトがカスタムピックアンドパスを使用してゲームシャードと組み合わせることを許可することです。私たちは Geth の周りにラッパーを作成し、彼らの間の通信を可能にします。これにより、双方向に多くの設計空間が開かれます。デフォルトで同期的であり、ロックなしでシャード間でシームレスに組み合わせ可能な相互運用性を持っています。
私たちの共有シーケンサーは、共有シーケンス構造を使用せず、総順序アトミックバンドルを優先しません。これはロックメカニズムを必要とし、メインスレッドをブロックするような問題を引き起こし、信頼性のないティックレートやブロック時間をもたらし、ゲームのラグを引き起こします。また、各シャードのブロック時間に制限を課し、サービス拒否を防ぐためにさまざまな暗号経済学や構造を必要とします。さらに、さまざまな VCR シーケンサー構造で言及されていない大きな問題があります:異なるシャードが互いに依存してデッドロックを引き起こす場合、どのようにデッドロックを解決しますか?非同期設計では、誰もが自分のやりたいことをしているだけなので、これらの問題はありません。
現実には、シャード間およびロールアップ間のアトミックバンドルはしばしば必要ありません。私たちのユースケースでは、アトミックバンドルを必要とするものは何も必要なく、ユースケースの純度のためにロールアップを設計する必要があるとは考えていません。これにより、他の興味深い特性も生じます。たとえば、各ゲームシャードは基本チェーンのために別の DA レイヤーを持つことができます。たとえば、基本シャードを使用して Ethereum にデータをプッシュし、ゲームシャードは Celestia にデータをプッシュすることができます。これにより、フルノードを実行するためのハードウェア要件を減少させることができます。基本シャード Geth フルノードを別々に実行でき、ゲームシャードノードを実行する必要がないため、Alchemy のようなものと統合しやすくなります。
まとめると、私はここで知的に正直でありたいと思います。多くの人々は、自分たちの構造がすべての問題を解決すると主張したがりますが、私たちにとってはそうではありません。私たちは自分たちの構造が私たちにとって有用であると考えていますが、あなたのユースケースには適していないかもしれません。私たちの構造がすべてのユースケースに適合するとは現実的ではありません。私たちにとっては、スループットが高く、水平スケーラビリティ、柔軟性、高いティックレートを提供しますが、癌を治すわけではありません。同期的な組み合わせを必要とする DeFi プロトコルが必要な場合、この構造はあなたにとって適切ではないかもしれません。
結論として、私は人間中心のブロックチェーンアーキテクチャの概念を本当に信じています。特定のユーザーペルソナとユースケースを念頭に置いて設計することで、すべての問題を解決しようとするのではなく、トレードオフの空間をより良くナビゲートできます。ルネサンスの時代が到来し、誰もが自分の特定のニーズに応じたロールアップを設計できるようになりました。一般的な解決策に依存するのではなく、Cambrian 爆発を受け入れるべきだと信じています。すべての人に合うようなレイヤー 1 のようにロールアップを構築しないでください。なぜなら、それは同じ問題を解決するために設計されていないからです。私は、より多くの人々がユースケースやセクター特有のロールアップ設計空間を探求するのを見ることに興奮しています。たとえば、資産交換専用に設計されたロールアップはどのように見えるでしょうか?意図ベースになるのでしょうか?オンチェーン CLOB 用に設計されたロールアップはどのように見えるでしょうか?それでは、マイクを MJ に戻します。私を招待していただき、ありがとうございました。