仮想世界の構築: ブロックチェーン技術を使用して「デジタルの神」のために時間を確保する方法

執筆者: @therealbytes @_yonada 編集者: Justin @captainz

仮想世界のクリエイターとしての私たちの目標は、ユーザーにとって楽しくて深く魅力的な環境を作成することです。そのためには、複雑で予期せぬ動作の出現を可能にするデジタル物理設計と、既存のインフラストラクチャがこれらの動作を確実にサポートできるようにすることとの間のバランスを見つける必要があります。これを行うには、デジタル物理学の 3 つの主要な側面、すなわち時間、法則の形式、およびそれらの法則が適用される範囲を考慮する必要があります。

### 時間

私たちは、仮想世界における時間の経過を、世界の法則がそれ自体に反復的に適用されることと呼んでいます。個々のアプリケーションは、この世界の時間の流れの中の「一瞬」です。世界の時間を設計する 1 つの方法は、時間を外部時間と連続させることです。ブロックチェーンベースの仮想世界では、ブロックに含まれるトランザクションに関係なく、各ブロックは世界の一定数の過去の瞬間に対応します。これは、同期時間、または「ティック」現象として知られています。このアプローチにより、ユーザーは自分のアクションの結果をリアルタイムで確認できるため、世界をより興味深いものにすることができます。さらに、世界の滞在時間が長くなり、世界が更新され続けるため、興味深い行動が促進されます。

ただし、このアプローチには欠点もあります。一般に、タイムフレームが長くなると、より多くのコンピューティング リソースが必要になり、チェーンやサーバーの能力をすぐに超える可能性があります。また、チェーン上のすべての変更は外部ユーザーが開始したトランザクションによって開始する必要があるため、このシステムを通常のブロックチェーンに実装することも困難な場合があります。

この難しさは、一見単純に見えるもの、つまりノンプレイヤー キャラクター (NPC) を使用したオンチェーン ゲームを想像すると明らかになります。メインネット イーサリアムでは、ゲーム マップ上の各 NPC の位置を設定する更新関数を定義し、外部アカウントに定期的に呼び出して位置を更新させることができます。ただし、更新を呼び出す必要があるブロック内のガス料金に対して外部アカウントが入札されないという保証はできないため、これは信頼できない可能性があります。したがって、ゲーム内の時間構造はドリフトします(元の CryptoKitties giveBirth() 関数を例にとります。オンチェーンのガス料金が増加するにつれて、Axiom Zen は実際に、新しい NFT を確実に実行するために、giveBirth 関数を呼び出す報酬を増やす必要があります)ユーザーがキティを繁殖させた後、誕生トランザクションは 256 ブロックで呼び出されます)。外部アカウントを使用するこの方法を「手動ティッキング」と呼びます。

カスタム ロールアップにより、オンチェーンに「ティック」機能を追加する柔軟性が向上し、外部アカウントが不要になり、同期された時間の進みがプロトコルによって保証されます。この方法を「自動ティック」と呼びます。自動ティックは、外部アカウントではなくプロトコル自体によって呼び出される「ティック コントラクト」を作成することによって実装できます。

例として、@therealbytes は、自動的にティックする Conway のライフ ゲームの実装を実行する OP スタックに基づいた概念実証ティックチェーンを開発しました (このビデオデモはここで見つけることができます)。 Bytes は、修正されたシステム トランザクションを使用して、ティックティック セル オートマトン シミュレーション コントラクトを自動的に呼び出します。チェーン自体の限界を完全にテストするために、彼は 2 つの方法でゲームを実装しました。1 つはチェーン上で実行される Solidity スマート コントラクトとして、もう 1 つはチェーン自体のプリコンパイルとしてです。 Solidity 実装は、70x70 グリッドに達した後、ブロックごとに 2 回の更新 (1 ブロック/秒、または約 10,000 セル/秒) で CPU を最大限に活用していますが、カスタム プリコンパイル済みエンジンのチェーンは約 6% を使用しています。256x256 で同じレートを達成しています。より高い CPU (約 130k セル/秒) を備えたグリッド。

最終段落の最後の文では「限界に達する」がキーワードになります。ティックティック チェーンにより、さらに複雑なレイヤーが追加されます。ブロックが追加されるたびに、ゲームをシミュレートするトランザクションがより多くの状態にアクセスする必要があります。最終的に、ロールアップ ノードは生の計算 (CPU、ディスク IO など) によって制限されます。ここでの唯一の解決策は、より高容量のノードを使用することです。

「同期時間」の代わりに「非同期時間」があります。この図式では、外部時間の進行に応じて世界の時間経過も必ずしも進むわけではありません。代わりに、通常、特定のイベント (通常はユーザーのアクション) が発生すると時間が進みます。タイマーを使用しない従来のボード ゲームも同様のカテゴリに分類されます。ブロックチェーンがサポートするように設計されたモデルであるため、オンチェーンでの非同期時間を実現するのはより簡単です。ただし、世界をより面白くする可能性のあるいくつかの機能 (NPC の自動移動など) も犠牲になります。

@notdavidhuang と cha0sg0d による概念実証ゲームの初期バージョンである WildWood は、この犠牲を明らかにしています。このゲームでは、2 人のプレイヤーが攻撃的な NPC の包囲から基地を守らなければなりません。ゲームの以前のバージョンでは、NPC の移動はプレイヤー自身が移動した場合にのみトリガーされ、非同期時間の非実用的な実装でした。ティックを追加した後、NPC は移動しましたが、別の問題が残りました。チェーンは 1 秒ごとに動きます。つまり、プレーヤーが 1 秒間に複数回移動する場合、ゲームはオプティミスティック ロールアップからの更新でマップ上のプレーヤーの位置をブロードキャストする必要があります。ただし、チームメイトにはクライアントが自動的に表示されないため、プレーヤーの位置の更新に遅れが生じます。この問題を克服するために、チームは MUD のリレー サービス、つまりローカル クライアントをチェーン全体にブロードキャストするためのピアツーピア ネットワークを利用しました。これで、非同期時間から同期時間への移行が完了しました。

クローズドフォームとオープンフォームの法則

ワールド構築者は、仮想世界が開いた形式の表現に従うか、それとも閉じた形式の表現に従うかを決定する必要もあります。閉じた形式の式には固定数の演算があります。ただし、オープン形式 (または再帰的) で表現される演算の数は、指定された変数に応じて増加します。オープン形式の表現では、世界の法則を既知の状態に繰り返し適用することによってのみ、世界の将来の状態を計算できます。ドワーフ要塞のような複雑なグラフィック環境は通常、このカテゴリに分類されます。一方、閉じた形式の表現では、Age of Empires II のリソース抽出率など、過去の状態とその間の経過時間 (将来のユーザー アクションによって状態が変更されないと仮定して) から将来の状態を計算できます。

オープン フォームは、現実世界と同様に予測不可能であるため、仮想世界をより興味深いものにすることができます。世界の将来の状態を予測するには、ますます多くの時間とコンピューティング リソースが必要になります (オンチェーンで実装された Conway のライフ ゲームが良い例です。時間内にゲームを実行する必要があるため、任意の将来の状態を計算することはできません)。さらに、単純な微視的な相互作用から、予期しない巨視的な動作が現れる可能性があります。閉じた形式によって統治される世界では、これらの創発的な行動は通常、ユーザー (開いた形式の場合と同様にユーザー自身) のアクションを通じて外部でのみ発生し、世界の物理自体の内部では発生しません。

オープンフォームとクローズドフォームの間のトレードオフには、時間のバランスと同様のバランスが関係します。閉じた形式では、世界の潜在的な面白さが薄れる可能性がありますが、計算効率も高くなります。クローズドフォームは同期時間または非同期時間で使用できます。ブロックチェーン上に実装すると、時間同期に関してオープン フォームに比べて大きな利点があります。コストは期間を問わず一定であるため、オンチェーンの状態はユーザーがトランザクションを送信したときにのみ更新され、最後の更新から時間が経過した後の状態に設定されるように設計できます。

時間と形状の範囲

オンチェーンダイナミクスに対する現在の標準的なアプローチ、「遅延更新」として知られるアプローチを考えてみましょう。遅延更新では、プレーヤーがアクションの開始と終了を開始しますが、その間の時間は直接計算されるのではなく、シミュレートされます。たとえば、プレイヤーは 1 番目のチャンクにリンゴの木を植え、10 番目のチャンクでリンゴを収穫します。プレイヤーが時間単位ごとに 1 個、合計 9 個のリンゴを収穫できるように、遅延更新ロジックを作成できます。これは、閉じた形式の関数 (ブロックごとに 1 つのリンゴなど) を使用する更新ロジックにはまったく問題ありませんが、プレーヤーのアクション間の入力に基づいてファーミング ロジックが変更される場合は失敗します。ブロック 5 で大雨がリンゴの成長率を高め、ブロック 7 でイナゴの大群が作物をほぼ壊滅させた場合、ブロック 10 では、実際にすべての条件を適用しない限り、プレイヤーがリンゴを何個収穫できるかは問題ではありません。発生したイベント (新しい状態に追いつくのに十分な計算能力がありません)。それでも、遅延更新は特定の Mob (成長率が固定された植物など) を安価に計算するには最適ですが、動的な世界のための完全なツールボックスとしてはまだ十分ではありません。

現実の世界では、時間はどこにでも存在し、同時に過ぎ、宇宙は潜在的に無限です (相対性理論の複雑な問題はありますが)。しかし、仮想世界では必ずしもそうとは限りません。

まず、仮想世界は明確に制限される可能性があります。一般に、陰謀の可能性は規模が大きくなるほど増大します。200 億個の銀河の世界では、原子 2 個の世界よりも多くのことが起こっていますが、計算コストも同様に増加します。これらの関係は両方とも、前述した 2 つのトレードオフ、つまり時間の経過と物理的形状に密接に関連しています。

第二に、仮想世界のどこでも時間が経過する必要はありません。世界の計算負荷を軽減するために、世界を異なる時間経過を持つ個別の領域に分割することができます。たとえば、ユーザーのアクティビティがある領域ではより複雑で高価な物理ルールを使用し、アクティビティのない場所ではより単純な物理ルールを使用することができます。このアプローチの欠点は 2 つあります: ワールドが一貫性がなく、完全性に欠けているように見える可能性があり、ワールド ルールの設計スペースが制限され、ユーザーの混乱を避けるようワールド構築者に圧力がかかることになります。ある地域の影響が離れた地域に影響を与えることはあり得ず、2 つの地域の間の空間は時間が凍結されます。物理法則が適用されるエリアのサイズは、世界が必要とするリソースと達成できる楽しみのレベルに影響を与える重要な設計上の考慮事項です。

仮想世界の構築: ブロックチェーン技術を使用して「デジタル神」の時間を確保するには?

興味深く魅力的な仮想世界を作成するには、計算効率と楽しさのバランスを注意深く取る必要があります。これには、どのタイプの時間 (同期または非同期) を使用するかを決定し、世界を支配する物理法則の形状を評価することが含まれます。物理法則が適用される領域のサイズも重要な決定事項です。これらの選択を慎重に行うことで、ワールド構築者は、ワールドの計算負荷を管理するのに興味深い状態に保つことができるだけでなく、他の開発者にイノベーションのための非常に肥沃な基盤を提供することもできます。

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • 共有
コメント
0/400
コメントなし
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)