# Starknet：复杂链上游戏的发动机

By [Starknet 中文](https://paragraph.com/@starknet-zh) · 2023-11-13

---

> **原文**：[**Building Complex, Fully Onchain Games with Starknet**](https://www.starknet.io/en/posts/developers/building-complex-fully-onchain-games-with-starknet)**  
> 翻译及校对**：[「Starknet 中文社区」](https://twitter.com/StarkNet_ZH)  
> **转载请注明出处**

* * *

概要
--

*   Starknet 使复杂创新的全链上游戏成为可能
    
*   目前两款游戏即将发布：Loot Survivor 和 Influence
    
*   这两款游戏都使用了街机账户、乐观客户端渲染、自主世界这类 Starknet 独有的功能，开启了真正的链上游戏新纪元
    
*   Starknet 会推动复杂全链上游戏的发展
    

在[之前关于 Starknet 链上游戏现状的文章](https://mirror.xyz/starknet-zh.eth/Mgv_g_PRTMAIrkQ4C213_KTe1OT0J3xi7FE38-mau5M)中，我们介绍了正在以太坊 L2 Starknet 上开发的最具创新性的游戏项目 — [Realms：Eternum](https://realms.world/)、[Loot Survivor](https://loot-survivor.vercel.app/) 和 [Influence](https://www.influenceth.io/)。文中，我们还讨论了基于 STARK 证明、受 Rust 启发，用于在 Starknet 上编写智能合约的语言 — Cario，以及 Cario 如何支持首批真正的链上游戏。

本文分享 Loot Survivor 和 Influence 这两款游戏的开发者在正式发布前的最新进展。我们会详细介绍他们所开发的独特功能，以及开发团队如何利用 Starknet 的技术优势，打造出在其他平台上难以实现的去中心化链上游戏。

Loot Survivor
=============

[Loot Survivor](https://loot-survivor.vercel.app/) 是一款单局付费的策略游戏。玩家在每局游戏中只有一条生命。玩家的游戏任务是寻找并强化武器、与野兽战斗，并获得奖励。玩家要与七十多多只野兽、六十个障碍和数十种武器互动。

这种单次生命游戏的优点在于，如果玩家的英雄死亡，玩家可以轻松地开始新一局游戏，而不会损失大量的 NFT 投入。

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

玩家可以连接他们的 Argent 或 Braavos 钱包，或者使用电子邮件地址登录来开始游戏。此外，仅使用电子邮件地址登录（由 Argent 提供支持）还能在后台自动创建一个钱包。

尽管上述的登录方式看似简单直接，但自 web3 问世以来，web3 游戏领域一直缺乏这样便捷的登录方式，但这正是 web3 的迫切需求，Starknet 上的账户抽象使这种便利性成为可能。

玩家可以在登录之后可以选择武器，游戏之旅就这样开始了。

游戏错综复杂的剧情和众多可能性的背后，隐藏着复杂的游戏架构。让我们探讨一下 Loot Survivor 背后的团队采用了哪些新思路和新概念来打造这首款真正自治的链上游戏。

街机账户
----

当玩家开始游戏时，系统会提示他们为游戏创建一个类似于「一次性」账户的街机帐户。这种「即用即扔」账户的创建得益于 [Cario](https://www.cairo-lang.org/) 语言的账户抽象（Account abstraction）特殊功能（详见[本文](https://www.cairo-lang.org/)）。

街机账户的优势在于，用户可以直接在链上发送某些类型的交易，而无需每次执行操作时都要签名。虽然每次进行链上操作时，在钱包点击「签名」和「发送」是一项重要的安全措施，但对于游戏玩家而言，由于游戏会话中需要执行众多操作，这种操作不切实际。在 Starknet 上，避开重复签名步骤的举措，提供了许多便利，也不会带来安全风险。

乐观客户端渲染
-------

链上游戏的另一个主要问题是，用户发送交易后，必须等待网络接受交易后才能继续进行游戏。这会拖慢游戏速度，使游戏无法进行。但正如前文提到的，现在玩家可以在游戏里选择跳过这一步，从而带来更好的用户体验。

这正是 Loot Survivor 通过在客户端实施乐观更新所实现的。当用户完成一项操作时，交易会在本地客户端模拟执行，如果交易没有失败，游戏就会乐观地继续进行。

单次存储合约
------

Loot Survivor 游戏是完全链上游戏的一个新兴范例 — 游戏状态的任何部分都不会存储在链下。在 Loot Survivor 中，与玩家相关的完整状态（例如生命值、经验值、武器和配件）都存储在一个 252 字节的 Cario [felt](https://book.cairo-lang.org/ch02-02-data-types.html?highlight=felt#felt-type) 中。任何更改玩家状态的操作或操作组都会造成单次存储更新，这意味着多个状态更改也会聚合到单次存储更新中。由于[独立的存储更新的数量](https://docs.starknet.io/documentation/architecture_and_concepts/Network_Architecture/fee-mechanism/)决定了交易费用，因此游戏内操作相关的 gas 费用也会大幅降低。

基于熵的机器人抵抗力
----------

链上游戏通常会提供经济激励，让玩家赢得奖励（大多数情况下以代币作为激励）。但这种经济激励也将鼓励用户去利用系统。为了应对这个问题，Loot Survivor 使用全局游戏熵结合玩家的单独熵的方式来决定游戏情节。

全局熵是一个变量，任何人都可以通过调用名为 rotate\_game\_entropy() 的外部公共函数来进行调整。假定游戏社区会运行定期调用 rotate\_game\_entropy() 函数的机器人，来不断更改变量，确保没有人能利用对变量的了解来欺骗系统。

此外，每位玩家在开始游戏时都会获得一个独立的熵。这就保证了尽管游戏熵相同，玩家的游戏结果也会各不相同。每次执行操作时，全局熵都会与玩家熵相结合，从而在每局游戏中产生不同的结果。

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

Loot Survivor 已在测试网发布，[随时可以开始游戏](https://goerli-survivor.realms.world/)。除了有机会成为首款完全链上游戏之一的早期测试者，您还能赚取代币！投入到 Loot Survivor 街机的代币中，将有一部分会作为奖励分配给全球排行榜前三名的玩家。

Influence
=========

Influence 是一款玩家驱动的大型多人在线（MMO）太空策略游戏。游戏剧情围绕着人类被迫逃离地球多年后，在未来一个无人居住的星系进行太空殖民的剧情展开。

这款游戏有三个阶段：开发、探索和冲突。[最新的游戏更版本](https://influenceth.substack.com/p/flight-path-to-game-launch?utm_source=profile&utm_medium=reader2) — 「有限主网发布」，允许玩家探索在游戏的第一阶段 — 「开发」中即将开放的广阔的小行星空间。在当前版本中，玩家可以将他们的资产从以太坊主网跨链到 Starknet，命名他们的小行星，组建团队，并完成远程小行星扫描。这是一项游戏操作，可以设置小行星的奖励和稀有度，并发布有关小行星的信息 ，例如哪些资源可用，但不会详细描述这些资源的丰富程度和位置。

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

该游戏已进入测试阶段，完全可玩的预发布版已进入制作的最后阶段。 在开发像  Influence  这类的链上游戏所需的主要[功能](https://wiki.influenceth.io/en/docs/press-kit)方面，Cario 一直发挥着至关重要的作用。

账户抽象
----

Influence 团队正与 Argent 密切合作，利用会话密钥提供账户抽象优势。会话密钥支持创建临时会话，可用于代表用户发送交易而无需请求签名。这些会话密钥仅允许代表用户调用某些特定功能，在无需反复请求玩家许可的情况下发送可以多个交易。

下面是创建会话密钥的代码示例：

    import { Signer, ec } from "starknet"
    
    // gets signer with random private key you need to store if you want to reuse the session
    const sessionSigner = new Signer()
    
    const requestSession: RequestSession = {
      key: await sessionSigner.getPublicKey(),
      expires: Math.floor((Date.now() + 1000 * 60 * 60 * 24) / 1000), // 1 day in seconds
      policies: [
        {
          contractAddress: "0x...",
          selector: "doAction"
        }
      ]
    }
    

_（_[_来源_](https://docs.argent.xyz/starknet/aa-use-cases/session-keys-experimental-feature)_）_

操作日志
----

每当玩家在游戏中提交一个操作，该操作就会立即反映在游戏的操作日志中，为玩家参与游戏并做出决策提供即时反馈。因此，玩家不必深入了解区块链技术的复杂细节，比如交易可能存在的不同状态：发送、待处理、L2 确认或 L1 批准。在新的链上游戏时代，玩家无需了解区块链的这些技术细节就能享受游戏。这些细节都被抽象化处理掉了。

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

左侧紫色部分为操作日志。操作在链上验证后，就会完成并向玩家发送通知。

自主世界
----

Influence 和 Loot Survivor 都在开发与自主世界兼容的游戏。在自主世界的游戏中，代码的编写必须做到，即使游戏背后的原始开发者停止发布新功能，其他人也可以基于游戏的智能合约继续开发。这意味着同一游戏（以及游戏内资产/资源）可以有多个用户界面。

为了激励团队开发自己的前端界面，这些游戏的开发者通常会为界面开发者提供激励，鼓励他们基于现有智能合约进行构建。例如，游戏内的 SWAY 代币（或者是 Loot Survivor 中的 LORDS）的特定百分比会被转移到 UI 开发者指定的钱包中，从而为他们的研发提供资金。

链上游戏的前沿
=======

链上游戏的前沿领域广阔无垠，尚待开发。像 Influence 和 Realms 这样的团队正处于前沿，不断迭代新的范式来创造真正永恒的链上游戏和自主世界。Starknet 和 Cairo 已成为塑造这一游戏未来的关键工具。

现在就来 [Influence](https://www.influenceth.io/) 或 [Realms](https://www.realm.art/) 开始游戏吧。

如果您对在 Starknet 开发游戏 dApp 感兴趣，请查看我们的[《Starknet 之书》](https://book.starknet.io/)。

---

*Originally published on [Starknet 中文](https://paragraph.com/@starknet-zh/starknet-18)*
