原标题:心配をやめて実行シャーディングを愛するようになった方法
動画リンク: 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's (@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 チームが私たちのために寛大に負担してくれました。しかし、これは長期的には理想的ではありません。私たちは高いスループットが必要であり、毎秒の書き込み取引だけでなく、ブロックチェーン自体からデータを取得するための読み取りも必要です。
また、私たちは Noisy Neighbor 問題を回避するために水平にスケーラブルなブロックチェーンが必要です。人気のあるゲームが突然ブロックチェーン上で問題を起こし、すべての作業が停止することを望んでいません。また、私たちは柔軟性とカスタマイズ性が必要で、状態機械を変更してゲームデザインに適応させることができる必要があります。これには、自己実行するゲームループを持つことが含まれます。
最後に、重要ではないですが、オンラインゲームアーキテクチャに不慣れな人にとっては少し曖昧かもしれませんが、高いティックレートが必要です。ティックはゲーム世界における時間の原子単位です。ブロックチェーンの文脈では、ブロックが時間の原子単位となります。ゲームでは、ティックがあります。これは、全チェーンゲームを構築する際にはほぼ同じであり、あなたのブロックチェーンのティックまたはブロック生成の速度がゲーム自体のティックに等しいことになります。
したがって、私たちが必要としているのは、高いスループット、水平にスケーラブル、柔軟でカスタマイズ可能、そして高いティックレートを持つブロックチェーンです。このような設計が、ゲームのためにゼロから設計されたブロックチェーンのニーズを満たすことができるのです。
もしあなたがより高いティックレートや毎秒より多くのブロックを持っているなら、ゲームはより反応が良く感じられます。逆に、ティックレートが低いと、ゲームはより鈍く感じられます。重要なことは、ブロック生成に遅延があると、ゲーム内で明らかな遅延を感じることです。これは悪い体験です。ゲームに負けてコンピュータに向かって叫ぶ怒りのプレイヤーを扱ったことがあるなら、それは絶対に悪い状況です。
現在、私たちのロールアップは毎秒 1 つのブロックを持ち、これは 1 回のティックに相当します。もっとクールなゲームを作りたいなら、より高いティックレートが必要です。例えば、Minecraft というシンプルなピクセルアートゲームは、毎秒 26 回のティックがあります。私たちは、Minecraft のように反応が良いゲームを構築するにはまだ長い道のりがあります。
一つの可能な解決策は、自分たちのロールアップを展開することです。一見問題を解決するように見えますが、実際には問題の根本原因を解決していません。例えば、より高い書き込みスループットを得ることができますが、ゲームが必要とするレベルには達しません。もちろん、もしあなたのゲームに 100 人のプレイヤーがいるなら、それは十分でしょう。しかし、より高いスループットを必要とするゲームを構築したい場合、現在の構築における I/O の方法のために非常に厳しい制限があります。
読み取りに関しては、実際にはパフォーマンスの向上を得ていません。あなたは依然としてインデクサーに依存する必要があります。真の水平スケーラビリティは得られません。ゲームを水平にスケールするために新しいロールアップを起動しようとすると、既存のスマートコントラクトエコシステムを壊すことになります。プレイヤーが展開したマーケットは、ゲームを水平にスケールするために起動した他のチェーンと連携できなくなります。これにより、多くの問題が発生します。
最後に、高いティックレートと毎秒のブロック数は少し難しいですが、私たちはそれを推進しようと努力することができます。おそらく毎秒 2 つのブロック、あるいは 3 つを得ることができるかもしれませんが、これはこれらのブロックチェーンが到達できる最も遠い場所です。なぜなら、再マーシャリングのような事柄が計算サイクルに非常に依存しているからです。
この問題を解決するために、私たちは 21 世紀初頭と 20 世紀 90 年代末に、MMO のようなオンラインゲームが登場した時期を振り返りました。彼らはシャーディングと呼ばれる概念を持っていました。これは新しい概念ではなく、過去に存在していました。私たちがデータベースアーキテクチャで使用する「シャーディング」という言葉は、実際には Ultima Online の引用から来ています。彼らは最初に「シャーディング」という言葉を使って、異なるサーバーを説明しました。
では、ゲーム内のシャーディングはどのように機能するのでしょうか?これは一刀両断の解決策ではありません。これはツールボックスの中の一つのツールであり、どのようにそれをゲームに適応させるかは具体的な状況によります。例えば、最初のシャーディング構造は、私が位置ベースのシャーディングと呼ぶものです。良い思考モデルは、デカルト座標系が 4 つの象限に分割され、それぞれの象限に独自のゲームシャードがあると想像することです。シャードを横断したいときは、別のシャードに通信を送り、「そこに移動したい」と言います。そして、あなたはあなたのシャードに転送され、以前のプレイヤーの身体を残します。こうすることで、サーバーの負荷を複数の物理インスタンスに分散させ、1 つのサーバーがゲーム全体の計算を行うことを強制しません。第二の構造は現在より人気があります。これはマルチユニバースシャーディングと呼ばれ、複数のゲームインスタンスが互いにミラーリングされています。あなたは行きたいシャードを選ぶことができ、デフォルトで負荷分散されるため、各サーバーが過度に混雑することはありません。
さて、重要な問題は、この概念をロールアップにどのように持ち込むかです。これが私たちが 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 の多くの利点を保持しつつ、コードを書く可能性を提供します。あなたはまた、基本的な鋳造の Noisy Neighbor 問題を解決するために、独自のメモリプールとソート構造を持つ NFT 鋳造シャーディングを作成することもできます。あなたはさらに、NFT を使用してゲームアイデンティティを表すゲームアイデンティティシャーディングを作成し、プライベートキーを共有するのではなく、NFT を通じてゲームアイデンティティを簡単に取引できるようにすることができます。
これは高度なアーキテクチャであり、今日は時間の関係であまり深く掘り下げることはできません。重要なのは、私たちが EVM スマートコントラクトをカスタムのピックアンドパスを使用してゲームシャーディングと組み合わせることを許可することです。私たちは Geth の周りにラッパーを作成し、これらの間で通信を可能にし、双方向で多くの設計空間を開きます。私たちはデフォルトで同期的であり、シャーディング間でシームレスに相互運用でき、ロックなしで行えます。
私たちの共有ソーターは独特であり、グローバルソートを優先する原子束の共有シーケンス構造を使用しないため、ロックメカニズムが必要であり、主スレッドをブロックするような問題を引き起こし、結果として不安定なティックレートとブロック時間をもたらし、ゲームに遅延を引き起こします。また、各シャードのブロック時間に制限を設け、サービス拒否を防ぐためにさまざまな暗号経済学と構造が必要です。さらに、私は多くの VCR ソーター構造で見られない大きな問題を見ています:異なるシャードが互いに依存してデッドロックを引き起こす場合、どうすればよいのでしょうか?非同期設計によって、これは問題ではありません。なぜなら、皆が自分のやりたいことをして、放置するからです。
実際、シャード間の原子束とロールアップは通常必要ありません。私たちの使用ケースにとって、原子束を必要とするものは必要なく、私たちが使用ケースの純度を中心にロールアップを設計すべきだとは考えていません。これにより、他の多くの興味深い特性が生まれます。例えば、各ゲームシャーディングは基盤チェーン用の個別の DA レイヤーを持つことができます。例えば、基盤シャードを使用してデータをイーサリアムにプッシュし、ゲームシャーディングは Celestia(データ可用性委員会に類似)にデータをプッシュできます。また、ゲームシャーディングノードを実行せずに基盤シャーディング Geth 全ノードを単独で実行できるため、全ノードのハードウェア要件を減らすことができます。これにより、Alchemy などの事物との統合が容易になります。
要約すると、私はここで率直に言いたいのですが、多くの人が自分たちの構造がすべての問題を解決できることを望んでいますが、私たちはそうではありません。私たちは自分たちの構造が私たちにとって有用であると考えていますが、あなたの使用ケースには適用できないかもしれません。私たちの構造がすべての人に適用できると仮定するのは非現実的です。私たちにとって、それは私たちのニーズに合致し、高いスループット、水平スケーラビリティ、柔軟性、高いティックレートを提供しますが、癌を治すことはできません。もしあなたが同期可能な DeFi プロトコルを必要とするなら、この構造はあなたには適していないかもしれません。
全体として、私は人本(human-centric)ブロックチェーンアーキテクチャの概念を心から信じています。特定のユーザーの役割や使用ケースを中心に設計することで、すべての人の問題を解決しようとするのではなく、より良いトレードオフを行うことができます。ルネサンスの時代が到来しました。誰もが自分の特定のニーズを満たすために自分のロールアップを設計できるようになり、汎用の解決策に依存する必要はありません。私たちは寒武紀大爆発を受け入れるべきだと思います。すべての人に合うレイヤー 1 のようにロールアップを構築するのではなく、それは同じ問題を解決するためには役に立たないからです。私は個人的に、より多くの人々が使用ケースに基づいたより多くのロールアップ設計空間を探求するのを楽しみにしています。例えば、資産交換のために特別に設計されたロールアップはどのようなものになるでしょうか?それは意図に基づくものでしょうか?チェーン上の CLOB(中央限価注文薄)のために特別に設計されたロールアップはどのようなものになるでしょうか?ここで、マイクを MJ に渡します。招待してくれてありがとう。
英語版:
https://captainz.xlog.app/Why-does-Argus-Build-FOC-Gaming-INFRA-Using-Sharding