如何在技术上为传统游戏开发者创造更好的GameFi链游环境

时间:2024-06-20  分类:电子

有没有一种infra级别的项目能够解决上述问题呢?TabiChain可能是非常接近Web3游戏终极解决方案之一的项目,其核心概念是全能执行层(OmniExecutionLayer):开发者无需再关心各种VM或运行环境的区别,直接使用自己熟悉的、甚至是可以自定义的运行环境,直接开发或者移植的游戏。


除此以外,TabiChain还拥有模块化的共识、安全层等特性,一切都是模块化和可定制化的,以满足不同游戏和应用的需求。


全能执行层:按照开发者需求来选择执行环境


我们来回忆一下,区块链的本质是什么。有人可能会说是去中心化的不可篡改的账本。但如果更接近技术本质来说,应该说是:状态机在分布式网络中的可验证的永久状态同步。


也即,区块链实际在维护一个全网公认的状态机和其运转的状态:



因此,一个链的共识体系中,并不一定只能存在一种执行层(如只有EVM),不论多寡,只要这条链能验证其上多个执行层的状态,让每个游戏都运行在自己的环境中,就可以解决我们上面说的种种问题


在Tabi中,每个游戏或dApp可以构建自己独立的一个Service。所有Service将各自产生的区块提交至链的共识系统内;SupervisorNodes中包含了所有Service中的运行时/VM,来校验service区块的状态。


Tabi的全能执行层的核心可以看做一个具有多态能力的VM,因此叫做PolymorphismVM。


对于已有的区块链VM而言,PolymorphismVM需要将该VM囊括入自身的运行环境中,并提供相应的接口调用方法。囊括这个概念在这里有两种具体的实现:


共享世界状态:类似Ethermint,在Cosmos上提供了对EVM的支持。但EVM仅仅是一个表层,专注于用户交互、合约操作等,让所有的用户侧的操作看起来是在EVM上实现的。但这些操作最终的结果和数据,还是会存储在其他Cosmos模块中。所以这种EVM兼容性其本质是最底层数据的映射。


因此这种映射关系,也可以拓展到其他VM上,比如Ethermint可以再加一层SVM的模块,这层SVM和EVM其实对应的都是一份底层数据。


这就类似于在PC上使用VMWare来启动一台Windows虚拟机,VMWare不仅可以访问虚拟机内部的虚拟硬盘,也可以访问物理电脑的硬盘。如果此时再启动一台Mac的虚拟机,它也可以用同样的方式来挂载物理磁盘中的数据。这样其实就实现了多台虚拟机对同一个世界的资源与状态的共享。


TabiChain的MainService的将采用这种世界状态共享的形式。因此只要有对相应VM的适配,基于该VM开发的dApp可以选择直接部署在MainService上而非另起一个service。


独立世界状态:由于不同应用和游戏的需求迥异,有些游戏有自定义的运行时,将所有VM大一统地通过共享世界状态的方式囊括进PolymorphismVM中并不适合所有情形。因此独立的世界状态也是需要的,这种实现方式相对简单,对数据完全对立的Service而言也是最契合的。


但不论采用何种形式,都必须能被SupervisorNodes进行验证,也即PolymorphismVM中包含了所有实现方式的VM或Runtime。


Web2游戏移植案例


PolymorphismVM具有高度的可定制性,特别是对于Web2开发者来说,他们可以使用自己熟悉的语言和框架,将任何业务逻辑移植到PolymorphismVM上。


假设Minecraft现在想要移植到Tabi,大致的流程为:



至此所有的流程就结束了。


对开发者而言这些改动是在原有的Java语言和框架下完成的。对于任何其他开发方式的游戏也是同样的道理。对用户而言游戏的交互也没有明显的改变。显然,这种移植Web2游戏的方式非常迅速和高效,有可能成为Web3游戏massadoption的基础范式。


游戏STR状态转换函数细节


上述例子是Web2游戏移植的大致流程。我们还需要对细节了解更多。这次我们用通用的而非具体某个游戏的例子来展示,全能执行层中的运行时会涉及到的细节。


基本上,定制一个游戏的运行环境可以被视为在区块链上创建某个游戏的状态机,在Tabi中叫做StateTransitionRuntime。


STR可以通过以binary或module的形式集成入PolymorphismVM。


在类似区块链的系统中,我们需要确保输入的透明度、状态转换的公开可见性以及全局状态的表达能力。为了满足这些需求,我们需要构建具有以下特性的运行时:



下列组织结构是该STR中必不可少的一些内容。Tabi默认会提供一个SDK来方便开发者制作该运行时。


WorldDB


在实践中,游戏或应用程序很可能会使用不止一个数据库,而这些数据库可能是不同的类型。让我们假设特定的游戏同时使用了关系型数据库和键值型数据库。


以下是一个简单的关系型数据库的例子: