# 全链游戏-重新定义游戏服务端

By [dashuo](https://paragraph.com/@shuo) · 2023-08-07

---

过去十年，Unity和Unreal引擎的不断发展为游戏开发者带来了很多便利，使得游戏开发变得更加容易和高效。这两个引擎在客户端的图形渲染、动画效果、物理模拟等方面都取得了很大的进步，为游戏制作提供了强大的工具和资源。

![unreal 5](https://storage.googleapis.com/papyrus_images/afabac191c937817d13145e5cb863998afffd655d1fc09b14015e9e20e8e3d91.png)

unreal 5

然而，与此同时，游戏服务端的发展相对较慢，依然存在许多挑战。传统的客户端/服务端架构在面对大量玩家同时在线、服务器稳定性和安全性等方面通常会遇到困难。此外，游戏的数据和虚拟资产通常由中心化的服务器管理，这可能导致玩家对其虚拟资产的真正所有权和控制权有所限制。所有权问题也限制了开发者以玩家为中心的角度开发游戏。

很多人对全链上游戏持怀疑态度，认为它毫无意义，原因包括技术限制、用户体验不佳、缺乏完善的内容和生态系统、虚拟资产价值的不稳定性、法律和监管问题。然而，尽管有争议，全链上游戏仍在不断发展，吸引着一些支持者和投资者，他们相信这种新型游戏模式将为游戏行业带来新的机遇和创新。本文将从游戏服务端的角度来帮助读者理解，为什么全链游戏会改变游戏行业。

**全链游戏是对游戏服务端进行改造，而非客户端（图形界面）。未来成功的全链游会有多个版本的客户端，2D、3D、甚至文字版。**

换一个角度思考游戏
---------

![](https://storage.googleapis.com/papyrus_images/d4d66f419dc221eb0baa6960ddaf0102bf552751864a0814c1c5d19eef46991f.png)

[**魔兽世界国服关服最后一天别忘了下载好“电子骨灰盒”**](https://hot.cnbeta.com.tw/articles/game/1340581.htm)

全链上游戏的定义：使用**智能合约来实现全部游戏逻辑**、**状态（数值、道具等）管理**。智能合约是存储在区块链上的计算机程序，让我们能够将传统合同转换成数字化合约。 智能合约遵循 IFTTT （if this then that）逻辑结构。 这意味着它们完全按照程序设定执行并且不能更改。

当前的**互联网缺少财富保护机制**，你的游戏角色并不属于你。这个痛，国服魔兽世界玩家真的懂了。换个角度来看，**游戏不只是游戏**，游戏是迄今为止最复杂的应用程序，很多游戏都是对现实世界的模拟。如果游戏能够实现全链上运行，那么同样的技术也可以应用于现实世界中的各类软件。

当前互联网是由各种数据库之上的UI组成，这些数据库随时可能被篡改，很难被其他人信任和使用。人类一直是以推倒重来的方式发展，很难向上构建。新旧交替不可避免，但没人喜欢自己的财富被清零。只有将**区块链作为新世界的基础，人类才能完成更大的叙事。**

**自治世界**
--------

区块链是世界的另一个版本。_他们明确地将所有_叙事实体的集合保留在其状态内。此外，他们还用计算机代码正式定义了引入规则。具有区块链底层的世界使其居民能够参与共识。他们运行一个计算机网络，就每次引入新的叙事实体达成共识。

从世界的角度来看，有两个重要的区块链概念需要定义：

1.  区块链状态根
    

**状态根**是世界上_所有_实体的压缩。有了状态根，我们就可以确定任何实体是否是叙事的。相信世界的国根就等于相信世界本身。`0x411842e02a67ab1ab6d3722949263f06bca20c62e03a99812bcd15dce6daf26e`是以太坊（一个具有区块链底层的世界）的状态根，时间为世界标准时间 2022 年 7 月 21 日晚上 7:30:10。以太坊世界的所有实体都被纳入该状态根的计算中。它代表了那个世界在那个特定时间的全部内容。

1.  区块链_状态转换函数_
    

每个区块链定义了一个**状态转换函数**。它可以被认为是一个明确的引入规则。它定义了我们如何改变或引入新的叙事实体，给定一组来自人和机器的输入，以及世界的先前状态 - 一组现有的叙事实体。就比特币而言，状态转换函数定义了如何使用余额。

用以太坊（世界计算机）作为**自治世界**的服务器

![https://twitter.com/LogarithmicRex/status/1545593124839374848](https://storage.googleapis.com/papyrus_images/c8460668f4e9e694c6ff5069e6c940d0019f9abfe98fc9631433218ea1273442.png)

https://twitter.com/LogarithmicRex/status/1545593124839374848

回顾-传统游戏服务端
----------

在玩多人游戏时，玩家的设备只负责把画面渲染出来，真正负责规则判定的是游戏服务器。

**一个简单的例子是Roblox，Roblox的体验默认为多人游戏，并采用客户端-服务器模型运行。Roblox服务器是维护体验状态的最终权威，负责将所有连接的客户端与服务器保持同步。**

![reblox server-clients](https://storage.googleapis.com/papyrus_images/ba1b17e56a5edaf4cefb2c4de7276150e7c53c2457f7d28f34dd618ba1a8c244.png)

reblox server-clients

**连接到三个客户端设备的服务器**

**从服务器到一个特定客户端的通信。例如，新玩家加入游戏，服务器会用一组物品填充该玩家的背包。**

![server-client](https://storage.googleapis.com/papyrus_images/c7239077b2c7a5b4b1802fd483d0c9c8742c7d02ba125eaa8d75318ef7d129f4.png)

server-client

**从任何客户端到服务器的通信。例如，玩家按P键喝下隐形药水，并告诉服务器使该玩家的角色对所有其他玩家隐形。**

![client-server](https://storage.googleapis.com/papyrus_images/fdf0ff242e8dda1870eae9d857cb48b51959e639d85ef1ebf3041eeb3ffd819b.png)

client-server

**服务器和所有连接的客户端之间的通信。例如，服务端会通知所有玩家某个玩家使用了隐形药水。**

![boardcast](https://storage.googleapis.com/papyrus_images/eeae182440cad3ce2bf9397a98d7e3c1e2015fb9cfdfd995f32affb3937212aa.png)

boardcast

**服务端开发费用通常是多人游戏开发成本的重要组成部分，可能占到总体开发费用的30%到50%甚至更多，具体比例会因游戏的特点而有所不同。**

深入服务端技术
-------

游戏是有状态的程序，因此它取决于时间推移来产生画面变化（无论是真实时间还是逻辑时间，或者区块链时间）。例如，吃豆人游戏中模拟鬼魂不断移动的环境。多人游戏也不例外，但由于多个玩家之间的交互，情况会更复杂。

在一个游戏房间中，多名玩家同时进行交互会产生大量需要同步的数据，比如每个玩家的基本数据、变化数据、技能表现数据、伤害数据、地图数据、怪物数据等。

![](https://storage.googleapis.com/papyrus_images/072e17e6a226eef5ad6b4d68456c9d69b7eac5c3c4eb25767ec1543593ffd0c3.png)

图中显示了多客户端与服务器的交互情况。您可以看到客户端 B 的网络连接速度较慢，尽管 A 和 B 同时在**T0时刻**向服务器发送了输入，但 客户端B 的指令在**T2**到达服务器，因此服务器只有在收到所有输入后才继续处理。在这种情况下游戏的延迟取决于一场比赛中网络最差的玩家。

好消息是，回合制（Turn-based）并不受网络同步问题的影响。慢节奏游戏也不受网络同步问题的影响，例如开心农场。**国际象棋**，纸牌类游戏，也都属于延迟不敏感的游戏类型。

对于快节奏的游戏， FPS 或一些动作类游戏，网络同步问题一直在困扰游戏开发者。这类游戏，可以通过在本地（即在玩家的计算机上）运行游戏逻辑来模拟游戏，而不是等待服务器更新。但对状态同步要求更严格的游戏则需要在服务端进行滞后补偿。

滞后补偿技术
------

经典FPS游戏 **_Counter_**\-**_Strike_** 中使用了延迟补偿技术来解决网络延迟带来的状态同步问题。

![Counter-Strike](https://storage.googleapis.com/papyrus_images/e40bccc779fcc68141b0b85e779da966aea6d2c262a993373719a06e306229f7.jpg)

Counter-Strike

此屏幕截图是在服务器确认命中后立即在延迟 200 毫秒的侦听服务器上截取的。红色命中框显示客户端上 100 毫秒 + 插值周期前的目标位置。此后，当用户命令传输到服务器时，目标继续向左移动。用户命令到达后，服务器根据估计的命令执行时间恢复目标位置（蓝色碰撞框）。

由于时间测量中存在微小的精度误差，客户端和服务器的命中框并不完全匹配。对于快速移动的物体，即使是几毫秒的微小差异也可能导致几英寸的误差。

问题来了，为什么服务器上的命中检测如此复杂？让客户端告诉服务器击中不就可以了？作弊软件可以将“命中”消息注入到网络数据包中，所以，多人游戏的命中检测必须在服务端进行。

状态同步
----

在采用状态同步方案时，客户端只负责渲染画面。客户端接收着服务端传来的数据，包含玩家角色的各种属性和状态，如施放技能、移动、血量、魔法值等。然而，客户端只是根据服务端发送的消息来重放这些属性数值变化。

例如，当玩家角色要施放技能，整个过程是这样的：首先，客户端向服务端发送“释放技能”的指令。服务端于是回应客户端，“在某地以某个方向释放了某个技能”。然后，客户端根据这些信息创建出特效，并让特效沿着指定方向飞行。而服务端则会运用碰撞检测逻辑来判断技能是否与敌方英雄碰撞。当技能与敌方英雄相撞时，服务端将告知客户端，客户端便立即删除特效，并按照服务端的指示，为被击中的英雄减血，同时播放受击特效。

总之，客户端的主要任务是根据服务端传来的数据来呈现游戏的结果，而无法对游戏核心逻辑进行实质性的改变。这样的设计确保了游戏的一致性，使得所有玩家在游戏世界中都能享受相同的游戏体验。

### 游戏是有限状态机（Finite State Machine），区块链是复制状态机（Replicated State Machine）

![FSM](https://storage.googleapis.com/papyrus_images/0a1799d669e0082cb4f5ed8ef877639376842b5fd9c38d273051800629728a80.png)

FSM

**有限状态机（Finite State Machine）** ，FSM 被用来控制吃豆人幽灵的行为。它们一次只能有一种操作模式，狩猎、追赶、死亡、等待复活。在经典游戏《盟军敢死队》、《刺客信条》系列等潜行动作游戏中，每当敌人检测到玩家时，他就会从空闲状态转变为警觉[状态](https://www.youtube.com/watch?v=j44MxnmRTyc)。几秒钟后，如果玩家没有再次躲到安全的地方，NPC就会开始主动寻找他，并切换到攻击状态。

![](https://storage.googleapis.com/papyrus_images/ce7fbe21078a343037928aca8913d00dc5f6d80c4b4c6271df347ce7984daafd.png)

**复制状态机**（Replicated State Machine）是指**多台机器具有完全相同的状态，运行完全相同的确定性状态机**。 它让多台机器协同工作犹如一个强化的组合，其中少数机器宕机不影响整体的可用性。 复制状态机是实现容错的基本方法，被广泛应用于数据复制和高可用等场景。

看到这里读者或许恍然大悟，基于区块链（复制状态机）的游戏是否不需要服务端了？

最理想的情况下的确如此，每个玩家独立运行一个区块链节点，就能自动同步游戏中的所有状态更新。但由于玩家设备的内存和带宽限制，大多数玩家需要通过代理（RPC）来进行游戏，这就意味着玩家设备并不掌握全局游戏数据，那就仍然需要采用**状态同步**。

![](https://storage.googleapis.com/papyrus_images/f40718d78d67e368e1c18f85ec9aafd63910768c1e666f7a308595396496f4a9.png)

但与传统游戏服务端不同，基于区块链的多人游戏的服务端只充当消息中继的角色，它本身不会进行计算和裁定。全链游戏的服务端是可以通用的，无需代码修改就适用于各种类型的多人游戏。所以，全链游戏引擎诞生了，它负责同步区块链最新数据给每位玩家。客户端（玩家的设备）只负责把画面渲染出来。

为什么全链游戏正在流行
-----------

自治世界起源于2022年，它从MUD服务端游戏引擎诞生开始，目前由[lattice](https://github.com/latticexyz/mud)团队维护。

MUD 是一个用于开发复杂以太坊应用程序的引擎。它添加了一些用于组织数据和逻辑的约定，并抽象出低级复杂性，以便开发者可以专注于实现游戏规则。**它倡导“自治世界”作为超越链上游戏的概念，并提供开源库来解决在以太坊生态系统上构建自治世界的所有挑战。**

MUD引擎标准化了数据在链上存储的方式。有了这个标准的数据模型，MUD可以提供所有网络代码来同步智能合约和客户端状态。这包括直接从 RPC 节点或通用 MUD 索引器同步状态。

![MUD引擎特性图](https://storage.googleapis.com/papyrus_images/8dc5cfc324e67ff688cf1c5b4226bb2d49bc24f2956b0d1c7dd4132d3ad9efde.png)

MUD引擎特性图

使用MUD引擎可以让多人游戏开发变得更容易，它提供了如下功能：

*   智能合约和客户端之间的状态同步（无需代码）
    
*   通用索引器（无需代码）
    
*   共享合约状态（模块化引用）
    
*   自动类型生成（无需代码）、
    

抛开用户权益保护的问题，单纯从技术角度，全链游戏也是比现有网络游戏更先进的技术方案。与传统服务端动辄需要几万行代码相比，如今最复杂的智能合约也不超过3000行代码。

使用MUD引擎编写Solidity智能合约很像编写protobuf。Protocol Buffers（aka protobuf）是由Google 开发结构化数据序列化协议。protobuf 可以自动生成不同编程语言版本的数据操作代码。MUD引擎也有提供类似功能，但它面向智能合约。

![左侧智能合约，右侧 proto3](https://storage.googleapis.com/papyrus_images/35ea293c84bd8f40242b060017382a92721d4de5337171360346b6a2c6ba112e.png)

左侧智能合约，右侧 proto3

智能合约对规则的定义远比protobuf详细，且包含了业务逻辑，并通过代码强制执行。上图左侧代码更多些，是因为proto3并不包含业务逻辑的代码。MUD引擎会根据智能合约代码自动生成状态同步相关的代码，这让多人游戏开发变得简单便捷。总体而言，智能合约是构建下一代互联网的基础，MUD引擎并不限定在游戏领域，适用于游戏的网络技术也同样适用于其他类型的网络应用程序。这是我从2017年初识以太坊就为之兴奋的东西，使用区块链+智能合约开发者可以构建以用户为中心的软件产品。

以用户为中心的产品需要做到：**游戏和资产分离**、**应用和数据分离**。

**那些使用MUD构建链上游戏的人并不是在分叉游戏或创造自己的世界。他们正在为已经存在的“自治世界”添加新功能。**

![](https://storage.googleapis.com/papyrus_images/c57b5543a5ba21362f84322959aaee3cfd6456f61d39701b5667b5126a34fa87.png)

**使用MUD的主要产品**：

自治世界一： **OPCraft**

![](https://storage.googleapis.com/papyrus_images/82f47924e9cb113a9c0e19c5af4f1dc0e3f4672ec70f868b2292486b9f21844d.png)

OPCraft 是一个自治世界——构成 OP Craft 世界的所有元素（河流、草叶、山脉等）、它们的状态以及用户操作的历史都作为链上信息存储，并最终记录为以太坊（L1）中的交易。

OPCraft**就像一个链上版的Minecraft**，你可以探索程序生成的景观、开采矿石、放置材料和制作新物品。玩家可以建造雄伟的建筑、竖立纪念碑、改造土地；独自或和好友一起玩。

OPCraft 的网络运行在 OP Mainnet 的[OP Stack 架构](https://optimism.mirror.xyz/fLk5UGjZDiXFuvQh6R_HscMQuuY9ABYNF7PI76-qJYs?ref=blog.oplabs.co)上，通过简单的调整即可获得更高的吞吐量和更短的出块时间。

自治世界二： **Sky Strife**

![Sky Strife游戏画面](https://storage.googleapis.com/papyrus_images/02aeee84b98ea5b3cc9e34acca79c5af932a915afb25b674eacd792897b9aa52.png)

Sky Strife游戏画面

Sky Strife 是一款基于 MUD 构建的链上游戏。 它以快节奏的 RTS 战斗为特色。Sky Strife 的目标是成为一个拥有资源、逻辑和可以自由构建的经济的自治世界。社区将能够在 Sky Strife 的世界中开发链上游戏、规则集和模块。良好的扩展性和开源理念，让社区开发者有机会基于**Sky Strife的成果构建一个三国题材游戏，或者加入其他故事。**

Sky Strife是一个持续迭代的游戏，每周游戏测试是在周五上午 10:30（美国东部时间）。 在此期间，您可以期待游戏玩法和用户体验的快速变化。

**两款完全不同类型的游戏都使用MUD开发，也证明了其适用范围，相信未来会有更多游戏类型出现在全链游行列中。**

“**我预计，随着《OP Craft》、《Sky Strife》等代表性游戏的不断发展，以及基于MUD的链上游戏的出现和互操作，他们在可组合性设计方面的努力将开始显现。” -** [**derio**](https://twitter.com/yutakandori)**, Ethereumnavi’s Owner**

当前的全链游生态

![全链游生态图](https://storage.googleapis.com/papyrus_images/5a9f2782ba537cbe7ac9b98bab8ff44382ccba080238ce9cff80fae21e66561c.jpg)

全链游生态图

全链游戏引擎列表：

1.  MUD(lattice)
    
2.  Dojo
    
3.  0xCurio
    
4.  World Engine(Argus)
    

参考文献：

[https://create.roblox.com/docs/projects/client-server](https://create.roblox.com/docs/projects/client-server)

[https://engineering.monstar-lab.com/en/post/2021/02/09/Game-server-Synchronization/](https://engineering.monstar-lab.com/en/post/2021/02/09/Game-server-Synchronization/)

[https://medium.com/@qingweilim/how-do-multiplayer-games-sync-their-state-part-1-ab72d6a54043](https://medium.com/@qingweilim/how-do-multiplayer-games-sync-their-state-part-1-ab72d6a54043)

[https://developer.valvesoftware.com/wiki/Source\_Multiplayer\_Networking#Lag\_compensation](https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking#Lag_compensation)

[https://zhuanlan.zhihu.com/p/36884005](https://zhuanlan.zhihu.com/p/36884005)

[https://ethereumnavi.com/en/2023/03/22/lattice-mud-en/](https://ethereumnavi.com/en/2023/03/22/lattice-mud-en/)

[https://blog.codingnow.com/2018/08/lockstep.html](https://blog.codingnow.com/2018/08/lockstep.html)

---

*Originally published on [dashuo](https://paragraph.com/@shuo/dmVDLh5kLE5ZvX6uDJFn)*
