5月31日,Curio(@0xcurio)开放了Keystone,一款内置Tick和ECS全链游戏引擎的L2链,基于OP Stack制作。这种设计允许所有ECS操作(如查询和状态设置)具有比通过智能合约写入ECS状态更快的性能。通过自定义预编译,智能合约可以访问底层ECS链状态。游戏逻辑可以用Go语言写,不用Solidity,可以大规模并行化。本文将对古玩项目本身及其原理进行深入分析,并讨论它是如何实现上述目标的。
Curio由工程师兼游戏玩家张凯龙(@kzdagoof)和陈一佳(@0x1plus)于2022年创立,致力于制作由智能合约驱动的全链条游戏。这使得一种新的多人计算方式成为可能,允许所有参与者为“共享宇宙”做出贡献,创始人表示,这使得游戏几乎完全由玩家创建。该公司的第一款游戏Treaty是一款在线策略游戏,用户可以在其中编写和部署智能合约。2023年2月21日,Curio宣布完成290万美元的种子轮融资。本轮融资由贝恩资本Crypto领投,TCG Crypto、Formless Capital、Smrti Lab、Robot Ventures、Zonff Partners和多家天使投资人参与。
目前全链条游戏的叙事模式有很多,比如DeGame、自治世界等。Curio提出了自己的想法:用户生成逻辑,或简称UGL。我猜,Curio在制作他的第一个全链条游戏条约的过程中遇到了很多困难,所以他产生了制作他的第一个链条并在其中构建游戏引擎的想法。这个想法和Argus不谋而合,但不同的是Argus采用了碎片机制,而Curio走了捷径,直接采用了OP Stack。
MUD的ECS游戏框架我们先来看看MUD的ECS框架是如何工作的。如果你看过我的科普文章Mud(https://captainz . xlog . app/Shen-du-Jie-Xi-quan-Lian-you-Xi-yin-Qing-Mud),你应该知道ECS通过逻辑、数据和实体的分离,提高了游戏开发的灵活性和灵活性。编程语言是Solidity,游戏对象的属性状态存储在智能契约中。以ERC-20契约为例:ERC-20契约将每个地址的令牌余额存储在一个映射中(从地址到uint256余额)。我们可以把每个ERC-20合约看作一个有两列的表格:& # 8221;地址& # 8221;还有& # 8220;天平& # 8221;。这相当于具有单一模式值(& # 8221;天平& # 8221;)组件。表格中的每一行都是一个实体(& # 8221;地址& # 8221;)和一个组件值(& # 8221;天平& # 8221;).一个地址可以在许多独立的ERC 20合约中保持平衡,这对应于与许多独立组件值相关联的实体。在当前的ERC-20参考实现中,状态和逻辑耦合在同一个契约中。在ECS中,将有一个通用& # 8220;转移系统& # 8221;通过修改存储在令牌组件中的状态,处理将令牌从一个地址传输到另一个地址的逻辑。
由于MUD中游戏对象的属性状态存储在智能合约中,每次都会通过智能合约同步ECS的状态变化(客户端的状态同步到区块链节点),而这个同步过程不能并行进行,需要频繁调用合约。所以Curio希望通过引入预编译契约来解决这个问题。
预编译契约以太坊虚拟机(EVM)中的预编译契约是一种特殊类型的智能契约,其代码直接硬编码在以太坊节点的代码中,而不是用Solidity或其他EVM兼容语言编写。这种契约通常用于执行复杂的计算任务,因为硬编码实现通常比在EVM中解释执行的代码更有效。预编译合同通常用于优化性能和降低天然气成本。
实现预编译函数包括以下步骤:
1.选择地址:预编译函数需要一个地址。以太坊已经选择了从‘1’到‘ff’的地址(包括‘ff ’)来存储预编译的契约。
2.实现函数:预编译函数需要实现某些函数。这通常涉及到一些复杂的计算,比如椭圆曲线运算或者大整数运算。这个函数一般用Golang或者C++编写,然后直接集成到以太坊节点的代码中。
3.计算燃气成本:预编译的函数需要一个函数来计算其运行所需的燃气。该函数应根据输入数据的大小和操作的复杂程度来确定燃气成本。
4.集成到以太坊节点:预编译的函数需要集成到以太坊节点的代码中。这通常涉及修改以太坊节点的代码,以添加新的预编译契约,并重新编译和部署节点。
然后,智能协定可以通过调用预编译协定的地址来使用此预编译函数。EVM将检查在这个地址是否有预编译合同。如果有,EVM会直接调用节点代码中的硬编码函数,而不是在EVM解释执行契约代码。
需要注意的是,添加新的预编译函数需要修改以太坊的协议,这通常需要社区一致同意。另外,由于预编译函数是硬编码在以太坊节点的代码中的,所以每个运行这个新版本的以太坊节点都需要包含这个新预编译函数的代码。这意味着在实践中,添加新的预编译函数是一个复杂且经过深思熟虑的过程。
Curio的解决方案在上面关于预编译契约的讨论中,我们可以发现,虽然使用预编译契约可以大大提高性能,但是需要修改链的节点代码,重新编译部署节点。以太坊的主链根本做不到这一点。于是Curio选择了OP Stack,在这个定制的Layer2中,他们修改了节点代码,加入了ECS的预编译契约。正是通过这种定制的预编译协定,智能协定可以直接访问底层ECS链状态。因此,这种设计允许所有ECS操作(如查询和状态设置)具有更快的性能。因为OP Stack节点使用了“Go-Ethereum”客户端,所以允许Keystone游戏逻辑用Go语言编写,而不是Solidity,可以大规模并行化。
Keystone中的ECS主要是通过& # 8217;引擎& # 8217;还有& # 8217;游戏& # 8217;这两个目录由代码实现。
在& # 8217;引擎& # 8217;在目录中,我们看到了定义ECS的主要数据结构,如World和Component。世界是ECS的基本世界结构,它包括两个主要部分:实体和组件。每个组件都包含一个数据类型,用于存储实体到值和值到实体的映射。
在& # 8217;游戏& # 8217;在目录中,我们看到一些具体的游戏组件,比如PositionComp、TargetPositionComp、TagComp等。这些组件都有自己的数据类型以及是否有必要在实体中存储值(ShouldStoreValueToEntities)。
与游戏引擎集成的链的优势从上面的讨论中,我们可以看到,将ECS(实体-组件-系统)状态直接构建到定制的区块链中,可以获得比通过智能合约编写ECS状态更快的性能。这种性能提升来自以下几个方面:
1.数据结构优化:在智能合约中写入ECS状态通常需要一些非优化的数据结构,但在Keystone中,可以使用高效的数据结构(如稀疏集)来存储和操作ECS数据,从而提高查询和设置状态的速度。
2.避免智能合约执行开销:EVM(以太坊虚拟机)需要解释执行智能合约的代码,这会带来一些开销。然而,将ECS状态直接构建到区块链中可以避免这种开销,因为ECS操作是在区块链的核心代码中直接执行的,而不是通过解释来执行智能合约。
3.并行化:Keystone允许在Go中编写游戏逻辑,这意味着可以利用Go的并行和并发特性来提高ECS的运行速度。这在智能合约中是不可能的,因为EVM是单线程的。
4.预编译契约:通过使用预编译契约来访问ECS状态,可以提高ECS操作的速度。预编译契约是在区块链节点代码中直接硬编码的函数,执行速度比在EVM解释执行代码要快。
5.状态更新的优化:Keystone采用了一种方法,允许在子世界中进行状态更新,然后将这些更新应用到父世界。这种方法可以减少不必要的状态更新,从而提高状态设置的速度。
游戏《节拍器》在哪?GameTick的概念通常在游戏开发中用于管理游戏中的时间流程。每一个滴答代表游戏主循环的一个周期,可以根据这些滴答安排各种游戏事件。这就是为什么我们说传统游戏是“循环型”的。
区块链本身的状态并不包括我们通常理解的& # 8221;当前时间& # 8221;的概念。区块链基于区块的概念运行,区块以线性顺序添加到链中。虽然这些块通常包含一个时间戳,但这并不作为& # 8221;当前时间& # 8221;的度量。
Curio声称将GameTick集成到了链中,但是我搜索了整个代码库,并没有找到任何关于GameTick的代码片段,所以我很好奇Keystone是如何在区块链中实现游戏节拍的。希望Curio有机会能更详细的解释一下这个功能。然而,我的猜测是这样的。在Keystone的GameTick环境中,next_tick字段可以用于确定游戏周期的下一个周期应该何时发生。这是基于区块链节点服务器的内部时钟,该服务器用于管理游戏本身内部逻辑内的游戏进程,该进程与区块链中块的进程相分离。
本网站声明:网站内容来源于网络。如有侵权,请联系我们,我们会及时处理。
温馨提示:注:内容来源均采集于互联网,不要轻信任何,后果自负,本站不承担任何责任。若本站收录的信息无意侵犯了贵司版权,请给我们来信(j7hr0a@163.com),我们会及时处理和回复。
原文地址"epic游戏引擎怎么安装,core游戏引擎百度百科":http://www.guoyinggangguan.com/qkl/142083.html。

微信扫描二维码关注官方微信
▲长按图片识别二维码