撰文:Arrow
SocialFi 的仿盘一再而出,全链游戏在 ChinaJoy 之间的风头都被盖过了。这段时间我一直在思考未来 Web3 Game 的潜在路径,最有前景的先放在前面:ZKP(零知识证明)+Fully On-Chain Games(全链游戏)。
我从八月初就体验了@Zypher_Games 里基于 ZKP(零知识证明)的全链游戏 zBingo,目前 2048 和德扑还在研制中,这对于公平竞技是个非常重要的转折点。
先说结论:ZKP 未来一定会在①带有随机属性的策略游戏 和 ②不完全信息公开的全链游戏 中成为重要的基础设施。
对于 ZKP+Fully On-Chain 的游戏讨论我们分两种:
①带有不完全信息公开的全链上游戏;
②带有随机属性的竞技性游戏。
全链游戏比如 Dark Forest 这个以《三体》中黑暗森林为名的策略游戏也是以随机性为玩点,主打 Fully On-Chain Games (全链上游戏)+MMORTS(大型多人在线即时战略游戏)+ 战争迷雾(fog of war)。
战争迷雾就代表着未知全貌,作为一款隐藏信息游戏,需要进行验证秘密信息的计算,基于 ZK 设计的点有很多。
对于全链游戏来说,其最大的特点是所有的数据和操作都存储在链上,数据完全存在于透明的数据层上,这样的话隐私保护就是个大问题——总不能我去攻打你的城池,对手不需要派斥候监视,只需要监控链上数据就能知道我的所有信息吧?
而德普、日麻,还是 Bingo、扑克这种带有随机数属性的策略性棋牌游戏就更需要了,首先应该做的就是全链化,加上 ZKP 的赋能。要不然我怎么能信庄家的良心呢?
或许大家在玩某些竞技游戏的过程中,玩到一定程度后会突然发现,为什么随机掉落的装备和血瓶变少了?为什么翻出来的牌越来越差了?这恐怕并不仅仅是简单的运气问题。未来的项目方(庄家)恐怕需要自证没有进行黑箱操作。
对于一种具有随机性的竞技性的游戏来说,线下直接经由人手或者机器进行随机性的分配,有一句话叫「十赌九输」,这既是游戏机制的胜率设置,也存在着一定的内幕操作。
而线上的置信度就更差了,作为一个没有开源的竞技类 app——我们几乎可以肯定项目方会随着对局和段位的不同,进行机制和概率的调整。
所以未来的线上具有随机性分配的竞技游戏,项目方如果不加以对 ZKP(零知识证明)技术作为自己重要的基础设施搭建,用以自证。恐怕很难令人信服。
zkSNARK——实现信息隐藏的关键
零知识证明技术具有完备性,正确性和零知识性三个特点,即证明了结论又不需要透露任何细节。其技术来源更是可以体现简约性,在同态加密的背景下,验证难度要远远低于生成证明难度。
在零知识证明的结构中,涉及两个角色:「证明者」和「验证者」。证明者根据系统输入的知识创建证明,而验证者有能力确认证明者在不知道输入或重新计算自己的情况下真实地评估了计算。
ZKP 绝对不是一个陌生的概念。比如 Zk-Rollup,作为一种有效证明机制为以太坊的扩容提出了新的方案。之前大家忙着撸空投做交互的 zkSync,其核心即使用 ZK 将多个操作包到一个证明里,在链下完成大多数计算工作。
再或者 zkSNARK 中的 SNARK 代表「Succinct Non-Interactive Arguments of Knowledge」,即简洁非交互式知识性论证。其中:简洁是因为 zkSNARK 中的证明只有几百个字节,这使得验证者可以轻松快速地检查证明是否正确;而非交互式证明使验证者无需质疑证明者提交的陈述。
我们刚刚提到过,对于一个全链上游戏来说,所有的数据和操作都存储在链上,数据完全存在于透明的数据层上就很难保障隐私。比如:随机的生成坐标、玩家的出生点、你手中剩余的手牌、你打出的每一张牌——都可以通过链上数据进行查询。
而在 zkSNARK 的技术支持下,玩家可以保持自己的隐私状态,同时公开提交可验证的有效动作。这样,参与者就不需要再向链上直接提交自身链上行为的具体操作信息,而只需要提交对该操作行为的承诺以及哈希有效的零知识证明即可,也就不必担心别人知道自己的底牌.
对于全链游戏——不完全信息的隐私有哪些需求呢?像国际象棋、中国象棋这类完全不需要隐私,只需要进行策略博弈的游戏当然不需要进行 ZKP 的技术加成。
但是对于麻将棋牌、不完全信息的策略游戏——尤其是 GameFi 和竞技来说就要小心了。
所以对于以下三种游戏来说还是很有必要的:
①具有部分信息隐藏要求的全链游戏
②需要洗牌和抽签的纸牌形全链游戏
③全链异步游戏(Full chain of asynchronous games)
补充一下,异步游戏是指实现非实时的玩家游戏互动机制。
实例:Zypher Games 的全链 ZK+ 游戏的机制
对于这三种类型的游戏,我们就拿 Zypher Games 中,现有基于自主研发的 zk-Game SDK 设计的三款游戏机制来说明,如何实现全链上游戏开发所需要的链上信息不对称。
其中全链异步游戏可以直接参考 Dark Forest。Zypher Games 还推出了通用的零知识游戏引擎 (UZKGE),帮助全链游卡牌游戏的开发,比如计算的可证明性,可扩展性和并发性,以及链上数据 / 信息不对称。
zBingo:具有部分信息隐藏要求的全链游戏
宾果游戏好像在西方比较流行,所以这个游戏怎么玩的我还研究了好久。
游戏的规则就是:
首先你会获得一张「随机生成」的填有 136 间随机数的卡片,当然这个生成也是基于 ZK 实现的。玩法比较简洁:
①开局你会获得一张由 1 到 36 之间的随机数填充的 5x5 网格卡,这个网格卡的具体布局是随机生成的,而且只有你知道。
②匹配完成后,玩家轮流在自己的网格卡上选择数字。选定的号码被公布,并为网格卡上有该号码的任何玩家标记。
③第一个完成两条线(水平、垂直或对角线)的玩家赢得回合。
其实玩法还是蛮简单的,主要聊聊机制,来看一看你的 Gas 都花在了哪里。
①生成一张随机数组成的网格卡,所以第一笔签名用在了这里;
②网格卡的加密需要使用一次性加密密钥。在加密的签名操作之前,你可以随意的生成一张网格卡,但是在这笔加密完成后就无法更改;
③提交加密的网格卡并进入配对过程,这是第一笔 Gas 费用的支出;
④Matchmaking,为你匹配你的对手,这是第二笔 Gas 费用的支出;
⑤接下来就是每一步都要出 gas 了,每掀开一张卡片,就要支付本次的费用;
⑥结束,上传证明,进行 If 操作判断。胜者可以获得 zBingo 盲盒,后续能开出 Zynizens NFT。
我测算了一下,经过两局 zBingo 游戏结束,一共花费了 0.0031 个 BNB,平均一把下来要交的 gas 费大概两块四毛钱。
其实玩这种休闲小游戏的 gas 还是不低的,主要是因为全链上游戏每一步都要 gas,所以后续更期待坎昆升级后,更低的费用和更快速的操作了。
zACE:需要洗牌和抽签的纸牌形全链游戏
最后我们再来聊一下棋牌类的全链游戏在机制上的设计区别。zACE 就展示了一个基于 Zypher Games 的 zk-Game SDK 用于开发的、需要洗牌和发牌的纸牌游戏,类德州扑克游戏。
实际上,SDK 通过优化的 wasm 和预编译的合约,实现了高性能、低成本的去中心化洗牌过程。它的链上随机性不再需要传统的 VRF,实现去中心化,进行公平洗牌和博弈。
VRF,指验证随机函数。可验证随机函数(VRF)是一种随机数生成器(RNG),可以通过加密手段来验证随机性。包括 Algorand、Cardano、Internet Computer 和 Polkadot 在内的许多 L1 区块链都在共识机制中使用了 VRF 来随机选择出块节点。
然而,由于区块链网络具有高度确定性,在链上通常无法获得安全的 RNG 随机数生成器。
使用链上区块哈希生成随机数存在被矿工或验证者操控的风险,这些负责验证的个体可以选择放弃对他们自身不利的区块,重新进行随机数的生成,直到对其有利。这也是为什么 ZKP+ 全链化的重要性。
Z2048:全链 2048
Zypher Games 平台的开发者准备推出一款名为《Z2048》的游戏,这是一款基于流行的休闲滑动数字游戏 2048 改编的全链游游戏。
玩法:
在 4 * 4 方块格子里面,初始盘面上有随机的两个数字 2,玩家使用方向键移动盘面上的数字,使得同一个方向上相同的数字相加并移动到方向的另一侧,每移动一次就会在盘面上上随机的位置新增一个 2 或 4;
玩家最后获得的数字达到 2048 可以选择上传 ZKP 结束游戏,或者继续挑战更高分数。如果盘面完全卡死无法移动则游戏结束。
平台 NFT 可以增加游戏时间和复活权益。在这个游戏中 ZKP 运用于实现可扩展性方面。
ZKP-Proved:在这里,智能合约不要求每一步都提交到链上——这需要玩家为每一步都签署一笔交易——而是将这些步骤捆绑在一起,并生成零知识证明。
这个证明然后被存储在区块链上,提供加密验证,确保游戏的结果既不可改变又公平,同时保持特定游戏玩法细节的机密性。通过将传统游戏玩法与最先进的零知识证明 (ZKP) 技术和竞争元素相结合。
UZKGE:零知识游戏引擎,拥有一个高度优化的 Plonk 库,它是一个快速扩展的零知识 (ZK) 电路库的补充,精心制作以满足游戏开发者的不同需求。
这些电路促进了复杂的计算,确保了游戏机制的完整性,同时保护了玩家的隐私,这些加密技术使游戏开发者能够在不泄露潜在细节的情况下验证关键的游戏数据。