# World Engine：专为全链游戏设计的分片Rollup框架

By [Gametaverse 中文頻道](https://paragraph.com/@gametaverse) · 2023-08-03

---

> 原作者：Scott Sunarto (@smsunarto)  
> 翻译润色：Justin（@hicaptainz）

   
Scott 在上周参加 Modular Summit 了，以下内容是 Argus 目前的最新进展报告。我觉得好玩的地方是：World Engine 居然可以和 MUD 搭配使用的

   
大家好，感谢你们参加今天的峰会。我在这里要讨论一个项目，这个项目占据了我们过去一年的大部分时间。然而，你们很快就会发现，这个故事的时间线远远超过这个时间框架。  
  
在联合创办 Argus 之前，我是 Dark Forest 的创造者之一，这是以太坊上的第一个完全链上游戏，使用了 ZK snarks。Dark Forest 的诞生是由一个简单的问题驱动的：我们能否创建一个每个动作都是链上交易的游戏？在 2020 年，这是一个激进的主张。许多人质疑一个完全链上游戏的可行性，因为区块链技术的速度慢。尽管有这种怀疑，我们的好奇心驱使我们开发了 Dark Forest。  
  
Dark Forest 是一个太空探索游戏，有数千名玩家在链上战斗，扩大他们的帝国。在发布的第一周，我们有超过 10,000 名玩家，并在以太坊测试网上花费了数万亿的 gas。这种高水平的活动最终迫使我们从测试网转移到侧链。然而，即使是侧链，因其可扩展性而受到赞誉，也证明是不够的。我们很快就填满了整个区块空间，推高了 gas 成本，使侧链实际上无法使用。  
  
尽管有这些限制，对全链游戏的热情仍然很高。在 Dark Forest 之后，我们看到投资者、创始人、建设者和黑客的激增，他们在 Dark Forest 的遗产上建设。像 Lattice 和 Primordium 这样的公司开发了更容易的全链游戏开发框架和全链游戏。我们也看到了在 EVM 之外的其他生态系统中的发展，比如 Starknet 上的 Dojo。  
  
现有区块链技术的限制源于我们与其他人共享链的事实。如果像 Dark Forest 这样的另一个游戏存在于同一链上，那么这条链就无法有效地运行。这让我们开始质疑是否应该放弃全链游戏的概念。然而，我们决定探索如何构建更好的全链游戏。  
  
我们开始了一段旅程，从一个关键的认识开始：我们把区块链架构视为理所当然。尽管有各种各样的 L1 和 L2，但它们都看起来很相似。他们都声称有更好的共识机制，更快的 VM，更好的欺诈证明者，和更快的 ZK 证明者。然而，这些声明往往缺乏支持的基准。所有这些努力都是为了创建另一个 DEX 或铸造另一个 NFT，这些都可以在任何其他链上部署。  
  
我们决定从一个不同的角度来看待区块链架构。我们质疑了经典的区块链架构，它似乎在模仿比特币或以太坊。我们意识到，其他的区块链，无论是 L1 还是 L2，都在试图为每个人建立一个区块链，而没有考虑特定的用例或用户角色。  
  
我们选择了一条不同的道路。我们决定为特定的用户群体构建最好的区块链：游戏开发者和玩家。我们明白，游戏与典型的应用有着巨大的不同。例如，像 Twitter 这样的社交媒体平台在一个事件驱动的运行时操作（enent-driven runtime），类似于区块链。用户触发一个事件，比如发布一条推文，这会导致状态转换。  
  
另一方面，游戏在一个循环驱动的运行时操作（loop-driven runtime）。即使没有用户输入，状态转换也会继续发生。火继续燃烧，水继续流动，作物继续生长，日夜的循环继续。这个基本的区别让我们重新思考如何为游戏构建一个更好的区块链。  
  
这里需要理解的关键点是，网络应用中的状态转换，如智能合约，并不需要用户输入。例如，在 Uniswap 中，如果用户想要交易 Token A 和 Token B，他们提交一个交易，然后交易就被执行。这个过程是事件驱动的。  
  
然而，我们很快就意识到，传统区块链的事件驱动性质与运行游戏状态机并不兼容。因此，我们探索了游戏使用的循环驱动运行时。游戏引擎就是专门为支持这种循环驱动运行时而构建的。  
  
在循环驱动的运行时中，游戏进程被称为 "ticks"，它们是时间的原子单位。每个游戏循环在一个 tick 中执行。tick rate 越高，游戏感觉越流畅。例如，现代游戏如 Counter-Strike 或 Valorant 有高 tick rate，使得它们感觉更加流畅。相比之下，旧的游戏由于 tick rate 较低，通常感觉比较迟钝。  
  
在区块链的背景下，这些 ticks 可以与区块进行比较，区块是状态转换发生的单一时间单位。如果一个 tick 或区块感觉慢，它可能会对游戏体验产生负面影响。  
  
我们认为，游戏本质上是循环驱动的，因为许多游戏状态转换并不是由外部输入触发的。例如，游戏中的重力并不依赖用户按下一个按钮；它无论用户输入如何都会存在。  
  
确定性的交易排序也是至关重要的。例如，如果你想对一个用户造成伤害，游戏应该先对用户进行健康恢复还是先造成伤害？使用传统的排序，你无法预测或控制哪些状态转换先被应用，这会导致游戏循环中的问题。  
  
通过循环驱动的区块链，我们保持了可组合性，这就是我们为什么想要使用区块链作为游戏运行时的原因。这种方法允许实时游戏玩，模糊了区块链和传统游戏服务器之间的界限。它还使得开发比以前更复杂的游戏成为可能。  
  
然而，要构建一个可扩展的游戏服务器区块链，我们需要水平可扩展性。游戏并不是在一个服务器上玩的；它们分布在许多服务器上。一个 roll-up 在一台计算机上运行，并受到物理计算限制。因此，我们需要一种新的策略来控制交易。  
  
传统的游戏服务器，特别是那些性能密集型的大型多人在线游戏 (MMOs)，使用分片的概念。分片是一种工具，不是如何构建你的游戏的处方书。例如，在基于位置的分片中，一个笛卡尔坐标可以被划分为四个图表。当玩家从一个分片移动到另一个分片时，会向另一个分片发送一条消息，然后玩家被传送到那里。  
  
第二种方法涉及到使用一个被称为多重分片的概念，这对于玩过 MMO 游戏的人来说是一个熟悉的概念。在这样的游戏中，当玩家登录时，他们会被提供多个服务器供他们选择。这是一个类似的构造，存在着不同的状态或游戏世界，玩家可以选择加入哪一个。  
  
通过循环驱动的运行时和水平可扩展性，我们也希望实现优秀的可组合性。然而，在 roll-up 中实现这一点可能看起来超出了现实。这就是为什么我们创建了 World Engine。我们意识到标准的 roll-up 不能按照我们的期望运行，所以我们自己动手构建了我们需要的解决方案。这就像 1990 年代，当 3D 游戏引擎还不是随处可得的时候，开发者不得不自己构建它们。

![](https://storage.googleapis.com/papyrus_images/610d5de710aff078bf47dfbfa06f74b198d62b19c32e8c75837f574754c836b9.png)

   
World Engine 分为两个关键部分。第一部分是核心，由两个关键元素组成：EVM Base Shard，一个支持分片的混合执行层和排序器，以及 Game Shard，一个高性能的游戏引擎加执行层。除此之外，还有一些周边组件，如用于客户端 - 服务器通信的事务中继和网络代码，以及用于像 Dark Forest 这样的 ZK 游戏的 ZK Cloud 证明器。

![](https://storage.googleapis.com/papyrus_images/aaf26b4ec6157c8354b7311f513e948470327dcda5612e580b07d9bc959eef29.png)

   
World Engine 的核心是围绕我们的排序器设计的。虽然其他的排序器，如共享序列重构，优化了原子可组合性，但我们认为原子可组合性被高估了，特别是在游戏的背景下。因此，我们完全异步，消除了在 EVM Base Shard 运行时下需要锁的需求。  
  
我们有一个全局的 EVM 链，玩家可以在上面部署智能合约来与游戏进行组合，创建市场和 DEXes。我们在 Polaris 之上构建了这个，Polaris 是一个与 Cosmos SDK 兼容的 EVM 模块，允许我们比其他解决方案能够实现的更大程度地定制 EVM。  
  
在 EVM Base Shard 排序器之上运行的是 Game Shard，一个设计为高性能游戏服务器的高性能迷你区块链。Game Shard 被设计为对状态机和 VM 无感知。我们构建了一个类似于 Cosmos SDK EBCI 的抽象层，允许你定制你的分片，或者通过实现一套标准的接口来构建你自己的分片。

![](https://storage.googleapis.com/papyrus_images/20c6e2a3f547b321890613a9e02793872d0b141afd00aa7f19074090bd1f46c9.png)

   
我们还构建了第一个游戏分片实现，以提供一个示例。我们使用了一个 ECS 实体组件系统，这是游戏引擎中的一个常见特性，我们的构造优先考虑将实体组件系统作为一等公民。这意味着状态机本身的每一个对象或原语都被视为一个实体。该系统还有一个可配置的 tick rate，允许你定制你的游戏的速度。  
  
最好的部分是，你不需要依赖索引器。你可以在区块链上快速读取，而不必处理索引器中最终一致性的缺失。此外，你可以用 Go 编写你的代码，无需与限制性的智能合约语言斗争。

![](https://storage.googleapis.com/papyrus_images/8d4c73f9cef4da6977052adb11fd1d23fee46999ca99c680962463c4c9837558.png)

   
由于我们的抽象层，分片本质上是无感的，所以你可以构建其他的分片构造，如一个坚实的游戏分片来补充你的 cardinal 游戏分片。你还可以构建一个带有自定义规则的 NFT minting 分片，一个使用 NFT 表示你的游戏身份的游戏身份分片，并允许交易游戏身份。我们不使用锁，所以我们不必阻塞主线程，使游戏分片运行时尽可能可靠，避免任何延迟。我们不再需要依赖加密经济构造。

![](https://storage.googleapis.com/papyrus_images/7e466977b7a11bc5ce30808514fc541124c58868d2c15acc76934af4366d5306.png)

   
每个分片可以有不同的 DA 批处理压缩策略。你可以对分片进行地理定位，以减少游戏延迟。你也可以将游戏分片作为一个独立的游戏服务器运行，所以你不必担心在第一天就要部署 roll-up。

![](https://storage.googleapis.com/papyrus_images/c9ccf0a6a9ebfbc493b60408633280aec5bbbcc7b0816693cff3bd4a0382a331.png)

   
我们在游戏分片之上构建了各种游戏，比如一个 Agar.io 的克隆，这在传统上是不可能的。我们也使用了一个混合模型，你可以在 solidity 上使用现有的游戏引擎框架，并将其与 World Engine 结合。未来由你来决定。你可以使用我们的 cardinal 堆栈，做一个混合，或者构建你自己的游戏分片。这就像是全链游戏的 Kubernetes，一个你的游戏的混合和匹配乐高。

![](https://storage.googleapis.com/papyrus_images/2972040e11b2cb891d1861676b2de91bd272d582ea5a5e2ef2da36d23b9a4612.png)

  

![](https://storage.googleapis.com/papyrus_images/b4926d85a34f4a1727559a4916d7a1fdcb112b5c3b6ab81e6af1f7d37c4fc1f2.png)

  

World Engine 现在在我们的 GitHub 上开源，我们欢迎新的贡献者。如果你对构建你的第一个 World Engine 游戏感兴趣，我们今天晚些时候会举办一个研讨会。明天，我们也将主持游戏跟踪，一个面板，和一个关于全链游戏的讲座。  
  
总的来说，让我们构建更酷的 roll-ups。我们现在正处于 roll-up 的复兴时期。roll-ups 允许我们扩展区块链，并利用底层 L1 的安全性。然而，我们仍然生活在一个非常以 EVM 为中心的 roll-up 架构的概念中。这只是起点，而不是终点。我们的目标是以用户和应用为中心的 roll-up 构造。感谢你的聆听。

英文版链接：  
[https://captainz.xlog.app/World-Engine-Sharded-Rollup-Framework-for-Onchain-Game](https://captainz.xlog.app/World-Engine-Sharded-Rollup-Framework-for-Onchain-Game)

---

*Originally published on [Gametaverse 中文頻道](https://paragraph.com/@gametaverse/world-engine-rollup)*
