来源:金色财经
我们在FOG系列的第一部分中对链上游戏和游戏引擎进行了概述,感谢Sylve,Tarrence,Andy,Alvirus,KevinIain对本文的支持。
链上游戏和引擎还处于早期阶段。像MUD和Dojo这样的游戏引擎虽然已经能够用于产品研发,生态系统中已经有开发者正在在使用,但还有很长的路要走。游戏引擎通常会经历巨大的网络效应,因为许多游戏都基于它们的框架并向框架添加功能。
在链上游戏生态中,最大的网络效应来自于游戏的可组合性和可扩展性,以及游戏资产与其他基于相同生态系统和引擎的游戏的结合。随着开源库允许开发人员在社区的帮助下解决技术问题,引擎的粘性也呈指数级增长。
如果我们想象游戏引擎生态系统的进化,它们的网络效应和价值累积层可能如图所示。模块/验证器市场很容易被类似于GnosisSafe模块的引擎层吞没。默认情况下,AW层是可组合的,但这取决于游戏开发者和玩家对可组合性级别的选择。许多公司正试图在这个堆栈中捕获2层或更多的层。
至此,让我们深入探讨在线游戏开发的主要挑战以及游戏引擎如何解决这些问题。区块链游戏引擎所面临的问题:
CryptoKitties,AxieInfinity,LootRealms发布时,无一不造成了整个网络的拥堵。他们是如何解决的?他们分别创建了自己的链,即Flow、Ronin和LootChain。链上游戏需要更多的计算资源,而所有游戏都将争夺区块空间。因此,有资金支持的商业化团队自然而然会选择建立自己的应用特定的L2扩展层。他们与Caldera、Conduit、Eclipse、AltLayer等RaaS(RollupasaService)提供商合作。目前流行的L2框架似乎是OPStack,我们预计随着ArbitrumOrbit、StarkwareL3和ZkSyncHyperchains等技术的成熟和可供生产使用,这种情况将发生变化。
12月CryptoKitties发行时造成网络拥堵的请求数
Argus还介绍了他们的新产品——插入数据可用层的EVM第2层。这是基本分片(baseshard)。我们不知道更多关于它的细节,但它让我们想起了Len的Momoka。EVM基础层将使其他游戏开发者能够为他们的游戏构建高度可定制的执行层gameShards,并且baseShard将成为为整个ArgusL2带来可组合性的层。
在区块链上,只有等交易确认后,合约状态才会发生改变。如果你想让f(a)触发f(b),这个过程只能等待。因此,游戏中的延迟似乎是不可避免的。在以太坊上,这将是15秒,直到区块被解决,以及另外30-45秒以克服重组风险。
通过使用ticks,游戏中的状态可以在不用等待交易完成的状态下自动改变。Tick频率可以理解为更新的频率。竞争性MMO游戏的tick率通常为20-30秒,RTS游戏的tick率可能高达60秒。现在大多数游戏开发者都在制作MMO游戏,所以20秒的tick频率是比较理想的。Rollups上平均的区块时间为1-2秒(Momoka连接PolygonPoS的时间为每2秒),Argus的新解决方案拥有20个tick/秒的tick频率,是目前行业中最快的。
0xCurio团队是第一个使用自定义L2s(通过Caldera)来优化更快tick率的商业团队。他们已经在OPStack上创建了第一个tick链应用,并可能与他们的游戏(如treaty.earth)一起发布。
网络上对游戏平均tick频率的讨论
MUD背后的故事是,Lattice团队一直在尝试创建新的链上游戏,并遇到了同样的后端问题。所以他们决定创建一个可以被普遍采用的链上游戏开发框架。除了可组合性外,还有两个关键挑战:合约和玩家客户端之间的更快状态同步和易于升级(修改/更新内容)而无需在每次升级时重写索引器(自动索引器)。
在本文中,我们将假设在同一游戏引擎框架上构建的所有应用程序都具有可组合性。
本文将介绍四个项目,它们都在争夺最大区块链游戏引擎标准的地位。其中两个是公共产品,另外两个是由过去筹集资金的商业团队建造的。让我们深入了解一些更高级的问题以及团队如何解决它们。
MUD是最受欢迎的游戏引擎,为EVM上95%以上的在线游戏提供游戏引擎。Lattice的游戏引擎引入了Store,它可以用类似于关系数据库的方式表示链上数据。使用Store而不是编译器驱动的存储的好处是合约数据的可升级性和大规模的gas成本。
状态更新也会自动发出事件,因此自动索引器无需自定义配置即可索引整个状态。与Solidity的静态数据相比,新数据(表)可以在运行时添加,从而实现可升级性。存储成本与为每个状态手动发出事件相当,但MUD比原生Solidity更有效地打包数据,因此从长远来看更便宜。
Store:是使用solid的编译器驱动存储的另一种方案。在合约中存储数据是消耗Gas的,并且在Solidity中是静态/不可检视的,这意味着接口/应用程序必须假设它们所进行的调用是正确的。通过Store的链上数据库,应用程序的合约存储现在可以被链下索引器、前端或另一个合约进行索引。使用Store的好处是合约数据的可升级性和大规模gas成本的考虑。
Mode:这是一个链下索引器,使用PostgresDB。它可以索引EVM上的任何MUD应用程序,主要用于与MUD客户端进行更快的状态同步。
World:是一个框架,包括使用存储、系统、无权限创建、访问控制、模块等。综上所述,World合约是一个具有集中状态和合约逻辑的单一合约。它可以在链上插件和一套改进的开发者工具的帮助下扩展。引入MUD的每个新插件都会为下一个加入的开发人员增加框架和引擎的价值。
一些例子:
DojoEngine是由Starknet开发者开发的公共游戏引擎。这是唯一可验证的游戏引擎,并且其验证是为游戏引擎的架构和工具而生。
在这种情况下,可证明性意味着相同的游戏循环可以在rollup的序列器或本地客户端(如浏览器)上得到证明。使用dojo,用户可以编写证明逻辑来执行客户端,并且只在链上进行验证,成本很低。这也使反作弊和乐观更新等功能成为可能,即使顺序器仍在验证玩家的交易,逻辑也会在玩家的浏览器上实现。
他们的数据存储方案类似于MUD的Store,但针对可证明性和有效性证明的特性进行了定制。他们使用Torii提供自动可验证的索引。索引使用存储差异完成,提供O(1)索引,并使用存储证明支持世界状态的客户端可验证性。Dojo支持部署到Starknet以及高性能的第3层序列器,如Katana和Madara。Dojo提供了Katana(一个本地开发网络)、Sozo(一个用于部署、更新和与游戏交互的命令行接口)和Torii(一个可验证的索引器)。Dojo提供了一个rustsdk,可以为浏览器编译成WASM,在基于rust的游戏中使用(即使用Bevy),并为Unity和Unreal(正在开发中)提供绑定。
游戏开发者被鼓励用Cairo编写应用程序。Cairo是一种类似rust的语言,用于为一般计算创建可证明的程序。在Dojo上构建的一个优点是,您可以引入使用zkps原生的战争迷雾机制,而不必在Solidity上的Cir