有没有一种infra级别的项目能够解决上述问题呢?TabiChain可能是非常接近Web3游戏终极解决方案之一的项目,其核心概念是全能执行层(OmniExecutionLayer):开发者无需再关心各种VM或运行环境的区别,直接使用自己熟悉的、甚至是可以自定义的运行环境,直接开发或者移植的游戏。
除此以外,TabiChain还拥有模块化的共识、安全层等特性,一切都是模块化和可定制化的,以满足不同游戏和应用的需求。
我们来回忆一下,区块链的本质是什么。有人可能会说是去中心化的不可篡改的账本。但如果更接近技术本质来说,应该说是:状态机在分布式网络中的可验证的永久状态同步。
也即,区块链实际在维护一个全网公认的状态机和其运转的状态:
每一次输入都是确定的,被记录在每个区块中;
状态转换函数是确定的,具体表现为区块链客户端中的VM或运行时;
状态的输出也是确定的,也被记录在每个区块中;
因此,一个链的共识体系中,并不一定只能存在一种执行层(如只有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。
PolymorphismVM具有高度的可定制性,特别是对于Web2开发者来说,他们可以使用自己熟悉的语言和框架,将任何业务逻辑移植到PolymorphismVM上。
假设Minecraft现在想要移植到Tabi,大致的流程为:
略微修改Minecraft服务端代码(Java,其他语言同理),将需要上链的数据移动到一个数据库(或一组)中,并将所有可能导致该DB发生变化的函数(也即状态转换函数)也挑选出来。
将该数据库和这些函数,打包为一个JAR包,可以理解为Java的一种可执行程序。最后再加上JRE也即Java的运行环境。这一整体加载入PolymorphismVM中,最终其所有数据都会上链。
将其他与上链无关的后端逻辑(如组队、聊天等)将运行在链下服务器中。
在TabiChain中启动一个Service,并通知SupervisorNodes中的PolymorphismVM加载相同的JRE。
至此所有的流程就结束了。
对开发者而言这些改动是在原有的Java语言和框架下完成的。对于任何其他开发方式的游戏也是同样的道理。对用户而言游戏的交互也没有明显的改变。显然,这种移植Web2游戏的方式非常迅速和高效,有可能成为Web3游戏massadoption的基础范式。
上述例子是Web2游戏移植的大致流程。我们还需要对细节了解更多。这次我们用通用的而非具体某个游戏的例子来展示,全能执行层中的运行时会涉及到的细节。
基本上,定制一个游戏的运行环境可以被视为在区块链上创建某个游戏的状态机,在Tabi中叫做StateTransitionRuntime。
STR可以通过以binary或module的形式集成入PolymorphismVM。
在类似区块链的系统中,我们需要确保输入的透明度、状态转换的公开可见性以及全局状态的表达能力。为了满足这些需求,我们需要构建具有以下特性的运行时:
世界数据库(WorldDB)包含应用内需要记录在区块链上的所有用户数据。这些数据应该是有价值和重要的,因此需要一种类似区块链的结构来确保其可用性。因此,并非所有数据都需要记录在区块链上。例如,在游戏中,用户的聊天内容一般并不重要是可丢弃的,因此不需要放在区块链上。
它能够表达完整的世界状态。在许多场景中,比如在游戏中,这种表达不一定意味着高度的可跟踪性一个简单的累加器就足够了,这意味着像默克尔树这样的数据结构并不总是必需的。然而,无论使用什么样的数据结构来代表世界状态,至关重要的是世界数据库的世界状态可以以摘要形式表达。
任何可以引起世界数据库变化的功能被称为状态转换函数,并应该封装在状态转换运行时中。任何在运行时之外对世界数据库的修改都应该被视为非法并拒绝。
输入和输出接口应该符合InputInterpreter和BlockProposer的设计。这一点相对简单,在这里不做详细说明。
下列组织结构是该STR中必不可少的一些内容。Tabi默认会提供一个SDK来方便开发者制作该运行时。
在实践中,游戏或应用程序很可能会使用不止一个数据库,而这些数据库可能是不同的类型。让我们假设特定的游戏同时使用了关系型数据库和键值型数据库。
以下是一个简单的关系型数据库的例子:
以上就是如何在技术上为传统游戏开发者创造更好的GameFi链游环境的全部内容,望能这篇如何在技术上为传统游戏开发者创造更好的GameFi链游环境可以帮助您解决问题,能够解决大家的实际问题是非常好学习网一直努力的方向和目标。