全链游戏如何进行状态同步?

全链游戏状态同步如何进行?

FOG/AW:实现全链游戏和自治世界的技术栈

作者:Fiona, IOSG Ventures

概要

  • 全链游戏/自治世界(“FOG/AW”)是围绕Web 3的少数重要叙事之一。相比于只通过NFT连接到Web3的Web2.5应用不同,FOG/AW将游戏逻辑也放在了链上。它利用区块链作为游戏服务器,成为游戏状态的去中心化信任源。这带来了持久性、抗审查、可组合性等优点,但也限制了构建在其之上的游戏多样性和复杂性。

  • 随着游戏复杂性和可玩性要求的提高,对引擎架构提出了更多的挑战要求:比如帧数延迟、随机数、生命值恢复、连续的被动效果、计时器等等。其中时间的概念以及Ticks单位在区块链上是不一样的。Mud提供了不少思路来模拟时间流逝以及被动恢复技能。比如,当玩家在房间中移动时,交易中附带根据一些预定义的设计移动房间中的所有物品。以此感知时间和状态的变化。

  • FOG/AW技术栈可被抽象为:开发者为ui/ux和游戏核心逻辑编写前端和后端代码,然后通过游戏状态的循环来同步所有的变化,最后由索引器将新的状态反映到前端的本地设备上。

  • 对于不同链的选择上,Dojo在引领Starknet的全链生态。根据@tarrenceva的描述,Starknet有State diffs状态差异,不同于optimistic rollups,重点放在了执行输出而不是输入。对游戏的影响主要可能在于优化成本,例如国际象棋游戏:在三分钟的游戏中,可能会发生50步。通过状态差异,单个证明和最终状态可以证明“输出”。而optimistic rollups需要所有中间状态的“输入”。

定义 FOG/AW:游戏状态是如何同步的

在判断是否是FOG/AW时,关键是要确定游戏状态是如何同步的(source of truth)。

传统的Web 2.5游戏或多人游戏使用中心化的服务器来定义当前游戏状态,当玩家发送行动时,服务器会编译这些输入并将更新的结果返回给每个连接的玩家的设备。服务器处理所有的输入(tick),解决不一致的问题,并定期向玩家发送更新,提供游戏中所有元素的快照,每一个tick都更新游戏状态。游戏状态是游戏世界中每个对象的属性的时间快照。Tickrate 是指游戏服务器每秒钟计算并向玩家广播更新的游戏状态的次数。Tickrate 越高,游戏体验就越精确、越高保真。实时战略或动作游戏通常需要更高的tickrate,而回合制游戏则不需要。

而完全运行在链上的游戏中,区块链充当游戏服务器,并作为游戏状态的去中心化信任源。在这种情况下,不仅NFTs或代币有真正的所有权,连游戏者的ticks以及游戏逻辑也储存在链上。这就是为什么FOG/AW能够实现真正的所有权、持久性、抗审查性、可组合性等。在理想情况下,游戏者的每个动作都应该提交给区块链,在达成共识后,游戏状态被更新并返回到本地设备。因此,较少tickrate的游戏类型更适合完全在链上进行。

图示来源:https://www.gabrielgambetta.com/client-server-game-architecture.html

解决游戏的延迟、时间等的挑战

随着游戏复杂性和可玩性要求的提高,对引擎架构提出了更多的挑战要求,比如帧数延迟、随机数、生命值恢复、连续的被动效果、计时器等等。

  • 帧数延迟:在Web2世界中,帧数延迟在游戏开发中非常普遍,它来源于客户端渲染和用户操作的延迟。特别是对于FPS这种高tickrate游戏,一旦存在延迟,玩家体验会大大降低。解决这个问题的一种方法是使用lockstep state update,根据玩家中最高延迟的标准对所有玩家进行同步,以确保公平的游戏体验。当引入区块链并需要等待交易确认时,这种延迟问题可能会更加严重。为此,Mud引入了optimistic rendering的机制,假设用户操作成功,并在服务器同意之前(或者在这种情况下是在事务确认之前)将其进行渲染。

  • 链上生成随机数:链上生成随机数是一个经常被讨论的课题,Mud认为可以将用户行为作为随机结果的输入,在交互发生后生成。

  • 时间的概念以及Ticks:在区块链上,时间的概念以及Ticks的单位与传统的游戏开发不同。根据@SebastienGllmt的观点,在使用fraud proof概念的链上(比如Op)很难使用计时器,因为一旦出错,需要回滚,这会导致游戏体验很差。Mud提供了一些方法来模拟时间流逝和被动恢复技能。例如,增加金币随时间流逝的数量,当玩家执行需要金币的操作时,根据玩家之前的金币数量、最近一次刷新的数量和刷新率来计算玩家的金币数量。另外,在玩家在房间中移动时,交易中附带根据一些预定义的设计移动房间中的所有物品,从而感知时间和状态的变化。

  • 写脚本“作弊”也许不是问题:一些人认为对游戏系统的MEV算作弊,而防止脚本有可能轻松地产生MEV是游戏团队需要考虑的问题。在Web2的游戏开发中,需要改变思维方式,好的MEV bot可以成为游戏内的NPC。

一些最新推出的链上游戏已经在解决这些挑战方面取得了一些成果,例如Rhascau中使用了计时器和连续被动效果。基本上使用区块时间作为刻度(在当前的L2中,区块时间 = tickrate)。

FOG/AW 技术栈

FOG/AW引擎框架是一个开发者工具栈,可以让开发者利用区块链作为服务器和信任源构建游戏。同时,它也解决了一些当前存在的问题:

  • 由于缺乏标准/现成的框架,构建链上的FOG/AW应用的效率较低;
  • 缺乏模块化和代码重用性;
  • 缺乏可组合性。随着FOG/AW引擎的发展,链上游戏可以变得更加有趣和富有想象力。

为了更好地理解,这类引擎的一般技术流程是:开发者为ui/ux和游戏核心逻辑编写前端和后端代码,然后通过游戏状态的循环来同步所有的变化,最后由索引器将新的状态反映到前端的本地设备。

不同的引擎正在开发各自的技术栈,使运行在链上的游戏可以顺畅运行。这些技术栈由三个关键部分组成:链、核心开发栈和游戏前端。它们都有自己的创新,在去中心化和游戏复杂性之间做出了权衡。

  • 游戏前端:包括传统引擎如Unity、Unreal等以及react/Threejs等语言和强大的工具提供渲染等功能,增强游戏可玩性和体验感必不可少的一环。以上项目基本都能提供相关SDK供开发者使用。

  • 核心开发栈:设计一套方案能让游戏逻辑运行在区块链上,并实现与前端的同步。关键组件包括合适的数据库结构(用于定义游戏行为和逻辑),以及游戏状态的同步和返回。

  • 链:大部分选择了Ethereum、Optimism和Starknet进行构建。

不同协议的设计如下图所示。以Mud V2为例,看看它的运作流程:

  1. 开发者使用一些Web2的前端工具在Mud中编写代码,利用这些强大的功能如渲染使得游戏更具视觉效果和趣味性;
  2. 同时,开发者使用Mud的智能合约框架(Mud World)来编写游戏的人物、物品以及具体的运行逻辑,如英雄从一个地点移动到另一个地点,并发起对该地点的讨伐,在什么情况下能够成功占领等;
  3. 以上动作及游戏状态会被记录在Mud Store上,它是一个链上的数据库,负责全局游戏状态,是游戏状态同步的信任来源;
  4. 当玩家对某一事件发起行动时,比如英雄对某一地点进行讨伐,实际上是玩家在前端本机上点击了鼠标并提交了该命令上链,在开发者的游戏设计逻辑和当前Store里的游戏状态的基础上,产生了一个结果,该结果被更新至新的游戏全局状态,并同步上链;
  5. Mud上的游戏支持Web、Mobile等各种前端,但可能会面临复杂的索引需求,Mode是为此而开发的一个链下索引器。

下图展示了不同协议是如何设计它们的技术栈的。以Mud V2为例:

然而,这些框架设计上存在着不同之处:

  • 大多数框架遵循Mud V1的设计,并使用ECS作为游戏开发的数据结构。ECS是一种编写和呈现游戏逻辑的方式。Mud V2对此进行了改进,数据被定义在Tables和Systems中,允许使用其他数据标准,这给予开发者更多选择,使其更具扩展性。

  • 大多数框架使用去中心化的数据库,因为区块链自然地成为游戏状态和数据库的可信来源。Mud试图实现全链上的存储,将整个应用程序状态保存在EVM中,并没有牺牲去中心化来实现更高的tickrate或引入链下结合的解决方案。

  • 由于许多游戏类型,如FPS,需要较高的tickrate,而由共识产生的区块链仅能处理区块时间的变化,因此tickrate成为需要解决的一个重要问题。Curio和Argus在自己的设计中尝试在链的层面上增加tickrate。

  • 对于不同链的选择,Curio和Loot选择在Caldera上构建Op stack chain,而Dojo则主导Starknet的全链生态。根据@tarrenceva的描述,Starknet具有State diffs状态差异的特点,与optimistic rollups不同,它注重执行输出而不是输入。这对游戏主要的影响可能在于优化成本,例如国际象棋游戏中,可能会进行50步的游戏。通过状态差异,单个证明和最终状态可以证明“输出”,而optimistic rollups则需要所有中间状态的“输入”。

目前,已经有一些游戏构建在这些引擎之上,例如Mud和Dojo都举办了黑客松以吸引开发者构建应用,Curio也刚刚在ETHCC上发布了魔兽争霸的迷你游戏演示。

这些引擎和技术组成了FOG/AW生态的重要组成部分,正在成为公链竞争的关键生态。通过Lattice提出的AW(自治世界),FOG/AW不仅限于游戏,还包括社交、金融等众多属性。构建在其之上的虚拟世界,即Metaverse,将呈现出丰富多样的游戏、社交、金融等融合应用。

参考资料: 1. https://mirror.xyz/matchboxdao.eth/d3lVAOa9Bi0kY-caoUT3lDC6E61mWJqtP1q6tME4xGY 2. https://jumpcrypto.com/writing/defining-on-chain-gaming/ 3. https://www.oneqode.com/what-is-a-game-server/ 4. [https://medium.com/@qingweilim/how-do-multiplayer-game-sync-their-state-LianGuairt-2-d746fa303950](https://medium.com/@qingweilim/how-do-multiplayer-game-sync-their-state-LianGuairt-2-d746fa303950) 5. https://latticexyz.notion.site/Building-Autonomous-Worlds-with-MUD-39d5eb5d31034589bc54a2053efb4c56 6. https://twitter.com/tarrenceva/status/1660686571270705152 7. https://book.dojoengine.org/framework/sozo/overview.html 8. https://www.youtube.com/watch?v=A0OXif6r-Qk