演讲者:Scott Sunarto (@smsunarto) 在模块峰会
文章编辑:Justin Zhao (@hiCaptainZ)
大家好,感谢您参加今天的峰会。我在这里讨论一个在过去一年中占据我们大部分时间的项目。然而,正如您将很快发现的,这个叙述远远超出了这个时间框架。
在共同创办 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,它们似乎都很相似。它们都声称拥有更优越的共识机制、更快的虚拟机、更好的欺诈证明者和更快的 ZK 证明者。然而,这些声明往往缺乏实质性的基准。这些努力的目标都是为了创建另一个 DEX 或铸造另一个 NFT,这可以在任何其他链上部署。
我们决定从不同的角度看待区块链架构。我们质疑经典的区块链架构,这似乎模仿比特币或以太坊。我们意识到,其他区块链,无论是 L1 还是 L2,都在试图为所有人构建一个区块链,而没有考虑特定的用例或用户角色。
我们选择了一条不同的道路。我们决定为特定用户构建最佳区块链:游戏开发者和玩家。我们理解游戏与典型应用程序截然不同。例如,社交媒体平台如 Twitter 在事件驱动的运行时中运作,类似于区块链。用户触发一个事件,比如发布推文,这会导致状态转变。
而游戏则在循环驱动的运行时中运作。即使没有用户输入,状态转变仍然会继续发生。火焰继续燃烧,水继续流动,作物继续生长,昼夜循环继续。这一根本差异使我们重新思考如何为游戏构建更好的区块链。
这里需要理解的关键点是,Web 应用程序中的状态转变,例如智能合约,并不需要用户输入。例如,在 Uniswap 中,如果用户想用 Token A 交换 Token B,他们提交一笔交易,交易就会执行。这个过程是事件驱动的。
然而,我们很快意识到,传统区块链的事件驱动特性与运行游戏状态机并不兼容。因此,我们探索了游戏使用的循环驱动运行时。游戏引擎专门构建以支持这种循环驱动的运行时。
在循环驱动的运行时中,游戏进程被称为 “滴答”,这是时间的原子单位。每个游戏循环在一个滴答中执行。滴答率越高,游戏的响应性就越强。例如,现代游戏如《反恐精英》或《Valorant》具有高滴答率,使其感觉更具响应性。相比之下,滴答率较低的旧游戏往往感觉迟钝。
在区块链的背景下,这些滴答可以与区块进行比较,区块是状态转变发生的单一时间单位。如果一个滴答或区块感觉缓慢,它可能会对游戏体验产生负面影响。
我们相信游戏本质上是循环驱动的,因为许多游戏状态转变并不是由外部输入触发的。例如,游戏中的重力并不依赖于用户按下按钮;它会继续存在,无论用户输入如何。
确定性交易排序也是至关重要的。例如,如果您想对用户造成伤害,游戏应该先对用户施加生命恢复,还是先造成伤害?使用传统排序,您无法预测或控制哪个状态转变先应用,从而导致游戏循环中的问题。
通过为游戏构建一个循环驱动的区块链,我们保持了可组合性,这也是我们希望将区块链作为游戏运行时的原因。这种方法允许实时游戏,模糊了区块链和传统游戏服务器之间的界限。它还使得开发比以往更复杂的游戏成为可能。
然而,要构建一个可扩展的游戏服务器区块链,我们需要横向可扩展性。游戏并不是在单个服务器上进行的;它们分布在许多服务器上。一个 roll-up 在一台计算机上运行,并受到物理计算限制的约束。因此,我们需要一种新的策略来控制交易。
传统游戏服务器,特别是那些性能密集型的游戏,如大型多人在线游戏(MMO),使用分片的概念。分片是一种工具,而不是构建游戏的处方。例如,在基于位置的分片中,笛卡尔坐标可以分成四个图。玩家从一个分片移动到另一个分片时,会向另一个分片发送消息,玩家被传送到那里。
第二种方法涉及使用一种称为多重分片的概念,这对玩过 MMO 游戏的人来说并不陌生。在这样的游戏中,玩家登录后会看到多个服务器供选择。这是一个类似的构造,其中存在不同的状态或游戏世界,玩家可以选择加入。
通过循环驱动的运行时和横向可扩展性,我们还追求出色的可组合性。然而,在 roll-up 中实现这一点可能看起来超出现实。这就是我们创建世界引擎的原因。我们意识到标准的 roll-up 无法按我们所需的方式运作,因此我们决定自己构建所需的解决方案。这类似于 1990 年代,当时 3D 游戏引擎并不容易获得,开发者不得不自己构建它们。
世界引擎分为两个关键部分。第一部分是核心,由两个关键元素组成:EVM Bayshore,一个具有分片支持的混合执行层和排序器,以及 Game Shard,一个高性能的游戏引擎加执行层。除了这些,还有外围组件,如交易中继和客户端 - 服务器通信的网络代码,以及用于像 Dark Forest 这样的 ZK 游戏的 ZK Cloud 证明者。
世界引擎核心围绕我们的排序器设计。虽然其他排序器如共享序列重建优化了原子可组合性,但我们认为在游戏背景下,原子可组合性被高估了。因此,我们完全采用异步方式,消除了在 EVM 基础分片中运行时对锁的需求。
我们有一个全球 EVM 链,玩家可以部署智能合约与游戏进行组合,创建市场和 DEX。我们在 Polaris 之上构建了这一点,Polaris 是一个与 Cosmos SDK 兼容的 EVM 模块,使我们能够在很大程度上自定义 EVM,而不是依赖其他解决方案。
在 EVM 基础分片排序器之上运行的是 Game Shard,一个高性能的迷你区块链,旨在作为高性能游戏服务器。Game Shard 设计为状态机和虚拟机无关。我们构建了一个类似于 Cosmos SDK EBCI 的抽象层,允许您根据自己的喜好自定义分片或通过实现一组标准接口构建自己的分片。
我们还构建了第一个游戏分片实现,以提供示例。我们使用实体组件系统,这是游戏引擎中的常见特性,构建优先考虑实体组件系统作为第一公民。这意味着状态机上的每个对象或原始对象都被视为一个实体。该系统还具有可配置的滴答率,允许您自定义游戏的速度。
最棒的是,您不需要依赖索引器。您可以在区块链上快速读取,而无需处理索引器中缺乏最终一致性的问题。此外,您可以使用 Go 编写代码,消除了与限制性智能合约语言作斗争的需要。
由于我们的抽象层,分片在本质上是无关的,因此您可以构建其他分片构造,例如一个坚固的游戏分片,以补充您的基数游戏分片。您还可以构建一个具有自定义规则的 NFT 铸造分片,一个游戏身份分片,用 NFT 来代表您的游戏身份,并允许交易游戏身份。我们不使用锁,因此不必阻塞主线程,使游戏分片运行时尽可能可靠,避免任何延迟。我们不再需要依赖加密经济构造。
每个分片可以具有不同的 DA 批处理压缩策略。您可以地理定位分片以减少游戏延迟。您还可以将游戏分片作为独立的游戏服务器运行,因此您不必担心在零日部署上的 roll-up。
我们在游戏分片上构建了各种游戏,例如 Agar.io 克隆,这在传统上是不可能的。我们还采用了混合模型,您可以在 Solidity 上使用现有的游戏引擎框架,并将其与世界引擎结合。未来由您来决定。您可以使用我们的基数堆栈,进行混合,或构建自己的游戏分片。这就像是链上游戏的 Kubernetes,是您游戏的混合搭配乐高。
世界引擎现在在我们的 GitHub 上开源,欢迎新贡献者。如果您有兴趣构建您的第一个世界引擎游戏,我们今天晚些时候将举办一个研讨会。明天,我们还将举办游戏轨道、一个小组讨论和关于链上游戏的演讲。
最后,让我们构建更酷的 roll-up。我们目前正处于 roll-up 文艺复兴时期。Roll-up 使我们能够扩展区块链并利用底层 L1 的安全性。然而,我们仍然生活在一个非常以 EVM 为中心的 roll-up 架构概念中。这只是起点,而不是终点。我们的目标是以用户和应用程序为中心的 roll-up 构造。感谢您的倾听。