在"玩赚钱"的理念下,玩家希望在享受游戏的同时获得收益。但GameFi受限于较高的GAS成本和并不完善的区块链游戏开发生态,其安全性和透明度均难以得到玩家认可。这使GameFi走向另一个极端——不断优化经济模型和收益,收益周期不断缩短,最终造成踩踏。在新的周期,L2、全链游戏引擎和ZK技术的普及将为用户带来链上隐私和更复杂的链上游戏机制。这同时解决了性能、隐私和可信的问题,将焦点从庞氏游戏转移到更可信和复杂的链上游戏中。利用应用层ZK技术游戏开发者可以轻易建立对交互式隐私场景有明确需求的链上战略游戏,也为更复杂的可信(链上)游戏场景带来新的希望。Salus将通过本文探讨新的应用层ZK技术如何帮助游戏完成场景创新。
技术背景:递归 zkSNARK的出现zk-SNARK是一种加密证明系统,在这种结构中,证明者可以证明拥有某些信息,而不泄露该信息,并且证明者和验证者之间没有任何交互。
递归zkSNARK意味着开发者可以在 zkSNARK证明内部验证另一个 zkSNARK 证明,并生成 zkSNARK 证明的陈述。递归允许 zkSNARK 证明者将更多知识压缩到他们的证明中的同时保持简洁,且递归验证过程不会明显减慢。
与一般 zkSNARK 相比,递归 zkSNARK 通过允许将多个证明压缩为单个证明来提供增强的可扩展性和效率。这种递归组合减少了复杂或多步骤过程的计算负载和证明大小,使它们特别有利于发生大量交互和交易的区块链游戏等应用程序。这将为用户和开发人员带来更高的性能并降低成本。
图片来源 - https://ethresear.ch/t/signature-merging-for-large-scale-consensus/17386递归 SNARK 解锁新应用级属性压缩递归 zkSNARK 允许证明者将“更多知识”放入证明中,同时确保这些证明仍然可以由验证者在恒定或多对数时间内进行验证。使用递归 zkSNARK 作为信息的“rollup”,可以独立地“卷起”比最大的(非递归)电路更多的计算。
可组合性使用递归 zkSNARK,可以创建一个证明链,在每一步中,证明都会传递给一个新的参与者,每个参与者在其中添加自己的知识声明,但无需了解链中其他部分的详细信息。
递归SNARK的实现通常,有两种方法可以实现完全递归 zkSNARK:一种方法是使用配对友好椭圆曲线的循环,其中通过找到两条配对友好的曲线来实现有效的递归,使得一条曲线的阶数等于另一条曲线的场大小;第二种方法是强行通过,并在证明系统本身中简单地实现单对友好曲线的椭圆曲线运算。
第一种方法,配对友好椭圆曲线的循环,尽管众多研究者还在探索,但目前想要实现同时满足配对友好和循环这两个特性的曲线还很困难。以下内容定义了什么是配对友好椭圆曲线循环。
定义1: 椭圆曲线的循环是在有限域上定义的椭圆曲线的列表,其中一条曲线上的点的数目循环地等于下一条曲线的定义域的大小。
椭圆曲线的m-cycle是由m条不同的椭圆曲线,其中是素数,使得这些曲线上的点个数满足公式:。
高效的zkSNARK方案一般由配对友好型椭圆曲线去构建,而等式中的循环条件使得它们之间可以递归组合,并且避免产生在跨不同特征的有限域时所产生的昂贵的模运算。
定义2: 椭圆曲线的配对友好型m-循环是一个满足循环中每条椭圆曲线都是基础且具有较小嵌入度的m-循环。
第二种方法是强行通过,并在证明系统本身中简单地实现单对友好曲线的椭圆曲线运算)。你可以将配对电路移植到BN254曲线上,然后在Circom中组装一个生长验证器。
以groth16证明系统为例,groth16 具有两个阶段的可信设置,第二阶段的设置是电路特定的。这意味着,当你在 SNARK 内部验证证明时,它将需要独立于外层 SNARK 的受信任设置。
因此最适合递归 groth16 SNARK 的是那些递归到自身的应用,即在电路中验证的证明是同一电路本身的证明。这意味着我们只需要一个可信设置。如图展示了自递归SNARK的思路:
自递归 SNARK - 图片来源https://0xparc.org/blog/groth16-recursion在每一步,你都有一个电路来证明计算的有效性 ( 可能i是对SNARK的公开输入),并且在第 i个这样的证明中,您验证另一个计算有效性的证明 的有效性。还有步骤的有效性,在每次递归时,您的SNARK电路将保持不变。以Isokratia为例,每个都是ECDSA签名验证。
总的来说,递归 zkSNARK提供了更强的扩展性:减少多步骤游戏或动作所需的数据和计算,使它们在链上更加可行,确保复杂的游戏逻辑和状态转换快速、安全地验证。
案例研究:ZK-Hunt 及其影响ZK Hunt 是一款类 RTS 的链上 PvP 游戏,探索了使用ZK技术实现复杂链上游戏机制和信息不对称。ZK Hunt 允许玩家在完全隐私的情况下执行动作,可以在不泄露任何基础数据的情况下验证每个动作。
在ZK Hunt平原上的移动是公开的,玩家 B 可以看到玩家 A 在移动时的位置更新。进入丛林也是公开的,但在丛林中移动是不可见的,因此玩家 A 无法确定玩家 B 在丛林中的位置,而只能模拟一组不断增长的潜在位置,这些位置用问号显示。离开丛林回到平原用户位置会再次公开,所以这个潜在的位置集合就消失了。
这种信息隐藏行为是 ZK Hunt 的基础;单位有一个状态(它们的位置),可以从公共状态变为私有状态,然后根据游戏中的动作再次变回来。这增强了游戏的策略性。
图片来源:https://gam3s.gg/zk-hunt/如图所示:ZK Hunt的状态验证过程主要为以下步骤:
本地更新私有状态:从si-1到si(从公开转为私有或从私有转为公开)生成有效转换状态的证明 :消耗si-1 和 si(和之前的承诺Ci-1 ,生成新的承诺Ci)提交到链上验证证明(合约为承诺Ci-1 提供了值,以确保正确生成证明)更新链上的承诺(保存Ci 以便在下个转换时 可以将其用作Ci-1)
承诺是一种工具,ZK 证明可以使用它来验证引用用户之前“承诺”的一些私有状态,而无需向验证者透露该状态。用户将承诺 C 作为公共输入提供给证明,将私有状态 s 作为私有输入,证明在内部计算 s 将产生的承诺,并检查它是否与 C 匹配:
尽管 ZK 证明验证的成本被认为是恒定的(至少对于某些证明系统,如 groth16 等),实际上这个验证成本会根据公共输入的数量而增加,这在进行链上验证时可能很重要。同时,ZK Hunt使用了poseidon hash 作为承诺方案,因为它在电路内计算比其他常见哈希函数效率高得多,每个消息位的约束更少。如果私有状态是从足够大的范围(例如私钥或随机种子)中随机选择的值,那么只需获取该值的哈希值就足以作为承诺。
类似的ZK技术可以实现的游戏创新场景还有很多,例如资产隐藏、决策隐私和进度保密。
资产隐藏:在集换式卡牌游戏中,玩家可以使用零知识证明隐藏自己的手牌,只在打牌时显示必要的信息。决策隐私:在策略游戏中,玩家可以秘密选择下一步行动或分配资源,这些选择仅在特定点或由游戏逻辑触发时才会公开。进度保密:在冒险或角色扮演游戏中,玩家可能会完成任务或获得成就,而其他人并不确切知道他们已经完成了哪些任务,从而保持惊喜或竞争保密的元素。通过采用零知识证明技术,ZK Hunt允许玩家在保持隐私的同时进行游戏操作。这不仅是技术上的创新,更是链上游戏的一次规则变革。通过这种方式,游戏行动在不透露敏感数据的情况下得到验证,增强了策略的隐蔽性,并丰富了游戏的策略深度和惊喜元素。