如何使用Zypher开发可验证化链上游戏？

自从 Starknet 生态的 Dojo 提出了可验证化链上游戏（provable onchain game）的概念之后，有不少团队开始在这个领域进行探索，比如利用 NFT 状态压缩的 paima，利用默克尔树和状态铭文的 redux，等等。Zypher Network （@Zypher_Network）同样基于零知识证明技术发布了一系列开发者套件来帮助制作可验证化链上游戏。

什么是可验证化链上游戏

我们现在已经知道，游戏行业和区块链技术的结合，要么走资产上链的 GameFi 模式，要么走状态上链的链上游戏模式。对于链上游戏的普遍定义是这样的：所有的游戏逻辑、状态（资产及其他）都在链上，通过智能合约来实现。

做为智能合约平台的以太坊，天然的是一个分布式的状态机，可以做稍微简单一些的链上计算和状态验证。于是大家试着把游戏逻辑写入智能合约，如此一来，游戏成为一种无需服务器后端的去中心化游戏，并带来了更高程度的游戏规则方面的可组合性。但问题也随之而来：以太坊主网的计算能力太弱，使用成本也非常高，即便考虑使用高性能的 layer2 链或者其他公链，也无法满足链上游戏的需求

受到 layer2 rollup 的启发，既然更大规模的转账操作都可以进行链下计算链上验证，那么为什么不把游戏逻辑的执行也同样处理呢？于是可验证化链上游戏的的技术路线由此诞生。虽然说游戏逻辑由链下计算，但每一步操作都可以在链上进行验证，同样保证了游戏的去中心化和去信任化，这就是 “可验证化” 一词的来源，甚至我们可以简单的来类比：layer2 rollup 中的 TX 是普通的转账交易，而可验证化链上游戏中的 TX 是游戏的上链交易。

根据链上验证方式的不同，rollup 分为 OP-rollup 和 ZK-rollup。同样的，使用零知识证明技术的可验证化链上游戏，无论在状态验证的最终性还是性能方面都有着较为突出的优势，这也是为什么 Dojo 和 Zypher Network 选择 ZKP 来开发可验证化链上游戏的原因。

Zypher Network 开发者套件

Zypher Network 的开发者套件总共有 3 个部分，分别是 AW Engine， Secret Engine 和 Zytron kit。

AW Engine：利用 ZKP 的信息压缩能力提供可扩展性。一个使游戏能够垂直超级扩展的模块化框架。可通过电路或 zkVM 进行编程。其 z4 SDK 可以支持实时的游戏内多人事件（玩家对战）。

Secret Engine：利用 ZKP 的信息隐藏能力提供非对称信息博弈。一套零知识证明即服务（zk-as-a-service）的软件开发工具包，为需要策略机制的游戏提供信息不对称性。零知识证明（ZKP）能够在链上完全实现隐私计算和随机性，并且可以证明其公平性。

Zytron kit：Layer3 堆栈。一个主权 rollupL3 链堆栈，提供便捷的游戏基础设施部署，包括点对点层优化、服务器分片等。专为大规模多人游戏和 AW 建设设计。

零知识证明的模块化框架 AW Engine

AW Engine 负责 ZKP 电路的搭建，证明的生成和验证，因此在套件中处于核心地位。它包括以下几个部分：

Gadgets（小工具）：支持游戏电路开发中使用的各种小工具，包括基本的哈希、ecc、掩码、洗牌等。

特定应用的电路：使用特定应用的 plonk 作为 zk 证明的基本方案，通过 SDK 提供的各种小工具编写特定的游戏电路。它支持直接将电路编译成 wasm，并可以在浏览器或应用程序中运行。同时，还提供在不同虚拟机（EVM/WASM/…）上运行的验证合约，这些合约可以在不同的区块链系统中运行，实现链下生成证明和链上验证。

链上验证器：为证明者和验证者优化的 wasm，以及对所有 EVM 链的常见 solidity 验证器的支持，以及对基于 Move 的链的 Move-lang 验证器。

Z4 多人 PVP 引擎：Z4 是用于实时多人游戏的系统。它通过将玩家对战事件（PvP）外包给专门的 zk-rollup 节点来扩展多人事件处理能力。

上图描述了 AW Engine 的工作原理和架构。这个游戏引擎分为几个主要部分，我将分步骤解释每个部分的功能：

Zypher Plonk / Bulletproofs / Groth16 / STARKs: 这些都是不同的零知识证明方案。这表明游戏引擎支持多种类型的 ZKP 方案，使得游戏开发者可以根据需求选择合适的证明系统。

General VM/DSL: 这指的是一种通用的虚拟机或者特定领域语言（Domain-Specific Language, DSL），用于编写和执行游戏逻辑。Zypher Network 已和 Risc Zero 官宣了战略合作，预计会把他家的通用 zkVM 集成进来。

Zypher gadgets & circuits: 这些小工具和电路是构建 ZKP 的基础模块。在零知识证明中，小工具是预先定义的函数或逻辑片段，而电路是这些小工具连接起来的更大的计算过程。

Game Proof Circuit: 游戏证明电路是整个游戏逻辑的零知识证明版本。这里会创建一种电路，用于验证游戏规则而不泄露玩家的具体行动或策略。

Prover API：证明者 API 是一个接口，开发者通过它生成证明。在游戏上下文中，这意味着证明玩家的行动是按照游戏规则进行的。

Onchain Verifier API: 链上验证者 API 是另一个接口，用于验证前述提供的证明。这是在区块链上进行的，以确保游戏的每步都是公正和透明的。

ZK Proof Market: 对于移动设备上的玩家，有一个去中心化的证明计算市场，玩家可以将证明计算外包；这进一步使链上游戏变得与硬件无关。。

Game: 链下计算的游戏部分包含实际的游戏逻辑和用户界面，允许玩家进行游戏。

Onchain Game: 提交证明到区块链后，游戏变成去中心化和去信任化的链上游戏。可以类比 layer2 中的 DA Proof 进行上链操作。

总的来说，AW Engine 利用零知识证明来保障游戏的安全性和公平性。它允许游戏逻辑被验证而不暴露任何关键信息，提供了一种建立在区块链上的游戏开发和运行的新方法。

最后让我们从开发者的角度来看下整个引擎的工作流程：

1. 开发阶段：

- 首先，开发人员选择合适的零知识证明方案（如 Plonk、Bulletproofs、Groth16 或 STARKs）。

- 然后，他们使用这些方案中的一个来创建 “Zypher gadgets & circuits”，这些是游戏逻辑的构建块。

- 这些构建块被组合成一个完整的 “Game Proof Circuit”，这是一个零知识电路，能够证明游戏状态的有效性而不泄露具体信息。

2. 证明生成（Prover API）：

- 游戏的每个动作或者状态改变都通过 “Prover API” 在后端转换成一个证明，这个证明是不可伪造的，并且不泄露任何关键游戏数据。

- 这个证明代表玩家的游戏动作或者游戏状态符合游戏规则。

3. 链上验证（Onchain Verifier API）：

- 生成的证明随后通过 “Onchain Verifier API” 提交到区块链上。

- 这个链上验证器会验证证明的有效性，确认游戏动作或者状态的合法性，确保游戏的公平性和正确性。

上面的流程并没有把 Z4 多人对战系统包括进去，实际上，ZKP 除了可以把游戏逻辑进行 “可验证化” 之外，还可以把 “多人对战系统” 进行 “可验证化” 操作。

上图是 Z4 引擎的工作流程图，可以看出，Z4 引擎支持实时多人游戏的方式，是通过创建无状态的房间来进行玩家匹配和游戏，这些房间由 zk-rollup 节点支撑，节点不保存数据。当游戏逻辑在节点上运行时，所有操作都将排序和总结，并且通过零知识证明来证实。游戏结束后，操作和结论的证明被上传到链上进行验证。Z4 节点可以不使用虚拟机直接运行游戏逻辑，从而避免了交易和 gas 费用。如果需要，也可以在节点上使用虚拟机（如 WASM/EVM）来运行游戏逻辑。整个过程旨在支持网络范围内每秒数百万甚至数十亿的交易量，以确保游戏的实时性和高并发性能。

非对称信息模块 Secret Engine

"战争迷雾" 是一种常见于游戏中的机制，典型的例子包括《星际争霸》和《魔兽争霸 3》。这种设计通过覆盖游戏地图的某些区域来隐藏信息，只有当玩家探索这些区域时，这些区域才会显示出来。这种机制增加了游戏环境的不可预测性，是所谓的非对称信息游戏的典型特征。大多数流行的 MMO 游戏都采用了非对称信息的游戏机制，这为玩家提供了更多探索和制定战略的空间。

然而，在区块链技术中，数据通常是完全公开和透明的，这使得实现非对称信息机制变得困难。但是，Dark Forest 游戏通过采用零知识证明技术 zkSNARKs，成功地在玩家需要公开提交可验证的有效动作的同时，还能保持其隐私状态。这样，Dark Forest 在区块链上创造了一个不完全信息的游戏环境。但是这种复杂的信息隐藏方法需要用到定制化的 ZK 电路编程，因此广泛的信息隐藏就无法在链上游戏中实现。

Secret Engine 通过优化的 WASM 和预编译合约部分的解决了这一问题，通过 Shuffle SDK 实现了高性能、低成本的去中心化洗牌过程。洗牌电路和协议保证了可验证的加密计算的安全执行，确保策略元素在链上保持机密。除了扑克、大富翁、交易卡牌游戏之外，该 SDK 还可以应用于其他需要无信任和随机性的 SLG 用例，比如：

Social Deception：社交欺骗游戏中，可以保护玩家的秘密身份或策略。

Secret Placing**：** 游戏中的秘密放置动作，如隐藏单位或资源位置，可以安全实现。

Fog of War**：** 即战争迷雾，可用于确保地图的某些部分对某些玩家保密，直到某些条件得到满足。
经常用到的 SDK 是有两个：

zk-Shuffle-as-a-service**：** 玩家轮流加密和洗牌，生成一个 “密封” 的且随机排序的牌组，它提供了传统随机数生成器（如可验证随机函数，VRF）无法提供的解决方案。

zk-Matchmaking-as-a-service**：** 玩家提交一个 “证明种子” 来生成一个随机数并在链上进行匹配，整个过程可以通过 zkp 得到证明。

这张图片描述了 Shuffle SDK 的工作流程：

1. Zypher PlonK:

- Basic PlonK: 这是一种通用的零知识证明方案，允许生成证明以验证复杂计算的正确性而无需揭示其它信息。

- Shuffle selectors: 这是特定于洗牌过程的逻辑或配置，允许 PlonK 证明系统正确执行牌的洗牌操作。

2. Shuffle Circuit:

- Chaum Pedersen: 这个子组件用于确保洗牌过程的隐私。它通常与数字签名或者加密有关，在这里确保每张牌的加密是安全的。

- Reveal: 这一步涉及在需要时安全地揭示牌的身份，而不泄露其它牌的信息。

- Permutation： 这指的是洗牌的实际过程，即牌的重新排列。

- Card Model: 这定义了牌的数据模型，在创建牌的加密版本以及之后验证洗牌过程中至关重要。

3. Shuffle SDK:

- Prover SDK (Rust/WASM): 这个软件开发工具包允许游戏开发者生成零知识证明，以证明洗牌过程是正确的，而不需要揭示牌的实际顺序。

- Onchain Verifier SDK (Solidity/WASM/Move): 这个 SDK 用于创建链上验证者，验证洗牌证明的正确性。

上述介绍可能还是太抽象，我们以一个链上德州扑克为例，来说明 Shuffle SDK 的原理。

在游戏中，我们需要将 “洗好的牌堆” 结果存储在链上。这不仅作为当前洗牌的结果，同时也作为后续 ' 洗牌 ' 的公共输入，如在设置牌堆操作中所演示的。最初，设置牌堆默认存储初始化的牌堆。然而，众所周知，链上存储成本高昂，尤其是对于大数据量。一副 52 张牌由总共 208 个 uint256 类型数据组成，使得存储成本成为重要考虑因素。

Zypher 的解决方案是在洗牌后只存储部分数据在链上，具体来说，只需要存储 2n+5 张牌，其中 n 是玩家数量。鉴于目前支持最多 6 名玩家，因此最多使用 17 张牌。这意味着最终只需要将这 17 张牌存储在链上。但如前所述，链上存储的另一个目的是这些牌也将作为后续洗牌的公共输入。因此，如果只存储 17 张牌，就无法验证洗牌的正确性。

为了解决这个问题，Zypher 的 zk-shuffle 电路将额外输出完整牌堆的哈希值作为公共输入，也存储在链上。在验证 zk-shuffle 时，用户将上传洗牌前的牌堆作为公共输入，电路将计算用户上传的牌的哈希值，并与链上存储的哈希值进行比较。最后，由于只有部分数据被保存在链上，用户可能需要获取完整的 52 张牌。对此，可以使用合约事件。事件是一种极低成本的通信方式，允许用户通过监听事件获得完整的游戏数据。

总而言之，整个流程的核心是使用零知识证明保证洗牌的隐私性和正确性。通过这种方式，即使在区块链上公开记录所有操作，玩家的决策和策略也可以保持隐私。

主权 L3 堆栈 Zytron kit

Zytron Kit 是一个高度可定制的 Layer 3 主权 rollup 堆栈，支持 Zypher 的游戏引擎作为预编译合约。

现有的 Dapp 基础设施，主要是 EVM，没有针对链上游戏这类需要高响应的用例进行优化，且未能提供所需的成本效率、可扩展性。MMO 和其他高性能游戏需要专用的、定制的基础设施，配备高效且可预测的计算资源。Zytron 的首个 alpha 网络，特性包括 0 gas，0.2S 区块时间，专为游戏设计的预编译合约，将在近期推出，有 10 款游戏计划作为先驱测试者。

该套件提供 4 个即插即用的核心组件：

主权 Rollup： 游戏中最重要的是可玩性，这需要在分布式系统中具有最高的可用性（CAP），并且整个系统可以快速升级和自动部署。

服务器分片： 将游戏的世界地图分布到不同的节点上，以提高单个节点的承载能力。同时，它提供了一套高效的检索算法，以快速在全球地图上的不同节点间移动，切换不同的节点服务，并同步信息。

数据兼容性： 一个对于存储抽象至关重要的组件，该协议集成了更加用户友好的关系型和缓存数据库，以加快游戏数据处理。这个功能解决了高效数据管理和快速访问的需求，这对于保持流畅的游戏体验至关重要。

定制网络： 鉴于游戏的高网络需求，该框架优化了底层的点对点 (P2P) 网络层，以支持游戏场景。这包括对小组内消息传输的优化，使用 NAT 穿越和打洞技术实现快速高效的连接。此外，网络还针对游戏设计了一种特殊的 UDP 协议，旨在将延迟保持在 10 毫秒以下。这确保了快速可靠的数据传输，这对于实时游戏体验至关重要。
主权 Rollup 是一种较新的概念，它在普通 Rollup 的基础上增加了更高级别的自主性和灵活性，允许在其上构建独立的、具有完全自治功能的区块链网络。这意味着，每个主权 Rollup 都可以拥有自己的共识机制、状态机和治理模型，同时仍然保持与主链的兼容性。

通过上面框架图，我们可以了解 Zytron 套件的各个组件功能：

1. 核心组件提供了游戏链的基础设施，允许高度的定制和优化。

- 主权 Rollup 保证了游戏的可玩性和高可用性，支持系统的快速升级和自动部署。

- 服务器分片通过将游戏世界分布在多个节点上，提高了单个节点的负载能力。

- 数据兼容性通过集成用户友好的数据库系统，确保游戏数据的快速处理。

- 定制网络优化了底层 P2P 网络层，满足游戏的高网络需求，包括优化小组间的消息传递和减少延迟。

2. 链上组件包含运行在链上的基础部分，以保障游戏逻辑的正确性和资产的安全性。

- 链上验证器确保所有交易和游戏操作都是有效和合法的。

- 智能合约作为游戏规则和逻辑的编码载体，处理玩家之间的互动和游戏状态的变更。

3. 模块组件提供了特定游戏功能和服务的实现。

- ZK 系统为隐私保护提供支持，如隐私计算和验证。

- 账户系统和即时通讯系统提供用户管理和实时通信功能。

- 监控系统用于监控网络状况和游戏运行状况。

- 房间系统、金融系统和 AI 系统提供游戏内房间管理、财务交易和人工智能支持。

- 日志系统记录所有操作和事件，以便分析和调试。

上图是 Zytron kit 堆栈的工作流程：

交易首先在 Layer 3 上产生，由 Sequencer 排序。

Runner 节点监听 Layer 1/2 的事件和 Sequencer 的输出，它们之间进行通信以执行交易并达成共识实现服务分片功能。

数据定期提交到 Celestia，用于确保数据的可用性和安全性。

客户端通过轻量级同步与 Layer 3 交互，并可以调用 Layer 3 提供的服务。

更有意思的是，前面两个引擎套件，包括 AW Engine 和 Secret Engine 都可以以预编译的形式与 Zytron kit 集成，以更为简约的形式为链上游戏提供高效、响应快速、功能丰富的基础设施。开发者也可以根据自己的需求选择相应的组件，以创建符合他们游戏设计的链环境。Zypher 不仅支持 ETH 生态，也正在积极的探索 BTC 生态中链上游戏以及 L3 的可能性，Zypher 和 BTC 的 Layer2 B² Network 官宣合作称将基于 B² Network 以及其 DA Layer B² Hub 部署链上游戏专属 Layer 3，这将是 BTC 生态中首个支持链上游戏的 Layer 3。Zypher 已经成为首批支持 BTC 生态的链上游戏开发引擎。