区块链技术博客
www.b2bchain.cn

区块链技术技术解析零知识证明在 Dark Forest 游戏中的应用

第22660篇区块链技术文章区块链技术技术解析零知识证明在 Dark Forest 游戏中的应用

黑暗森林是一款实时战略游戏。明星的移动和捕捉是游戏的战略重点。为了证明恒星运动是正确的,而不泄露恒星坐标,引入了零知识证明技术

原始标题:黑暗森林-一款使用零知识证明技术的游戏
作者:星莉

黑暗森林是一款MMO(大型多人在线游戏类型)游戏。我更感兴趣的是,这个游戏使用零知识证明技术。零知识证明技术的应用越来越广泛:隐私、跨链、ZK汇总、游戏等。本文介绍了暗森林的基本策略以及如何结合零知识证明技术。文章最后介绍了最新版本v0.6第3轮的游戏体验和屏幕截图

目前,黑暗森林版本已经迭代到0.6。然而,GitHub上的最新代码并没有透露部分电路。为了了解它是如何采用零知识证明技术的,您可以查看GitHub发布的0.3完整代码查看智能合约的源代码,您可以对黑暗森林的游戏策略有一定的了解。智能合约的源代码位于目录中:

游戏策略

darkforest-v0.3/eth/contracts

整个游戏世界由“星球”组成:

一个星球有两种“资源”:人口和采矿(目前支持银矿)。人口和采矿业增长缓慢,但有一个上限。有些地雷可以升级。Darkforestinitialize.sol定义了几种行星类型

         struct Planet {                address owner;                uint256 range;                uint256 population;                uint256 populationCap;                uint256 populationGrowth;                PlanetResource planetResource;                uint256 silverCap;                uint256 silverGrowth;                uint256 silver;                uint256 silverMax;                uint256 planetLevel;                PlanetType planetType;            } 

资源可以从一个行星移动到另一个行星。行星的运动是有速度的。移动时可以指示所携带的资源。当你到达时,如果你携带的人口超过地球上的人口,你就可以捕获地球。对于捕获逻辑,您可以查看darkforest-v0.3/eth/contracts/darkforestlazyupdate.sol的ApplyRival函数(在移动完成后触发):

         struct ArrivalData {                uint256 id;                address player;                uint256 fromPlanet;                uint256 toPlanet;                uint256 popArriving;                uint256 silverMoved;                uint256 departureTime;                uint256 arrivalTime;            } 

如果您到达自己的星球,人口和银矿石将直接累积。如果它是别人的星球,如果战斗机数量不够(少于星球人口),到达该星球的人口将相应减少。如果战斗机数量大于到达行星的人口,则捕获行星并更新人口(战斗牺牲)

    function applyArrival(                DarkForestTypes.Planet storage_planet,                DarkForestTypes.ArrivalData storage_planetArrival            ) private {                // checks whether the planet is owned by the player sending ships                if (_planetArrival.player ==_planet.owner) {                    // simply increase the population if so                   _planet.population = SafeMath.add(                       _planet.population,                       _planetArrival.popArriving                    );                } else {                    if (_planet.population >_planetArrival.popArriving) {                       _planet.population = SafeMath.sub(                           _planet.population,                           _planetArrival.popArriving                        );                    } else {                       _planet.owner =_planetArrival.player;                       _planet.population = SafeMath.sub(                           _planetArrival.popArriving,                           _planet.population                        );                    }                }                _planet.silver = Math.min(                   _planet.silverMax,                    SafeMath.add(_planet.silver,_planetArrival.silverMoved)                );            } 

移动和捕获行星是整个游戏的战略重点。由于是移动攻击,每个星球都有一个坐标。为了增加游戏的战略体验,行星的具体坐标没有透露。有点像在浩瀚的宇宙中,我们只能观察(列举)周围的有限空间(散列碰撞)并寻找其他行星。为了在不透露行星坐标的情况下证明行星的正确运动,引入了零知识证明技术,因为黑暗森林游戏v0.3使用零知识证明技术来证明与行星位置相关的两个操作:1/行星初始化(init)2/行星移动。电路逻辑在darkforest-v0.3/circuits/中。该电路由circom公司开发。该电路经groth16协议验证。两个回路都相对简单:

初始回路用于确保创建行星时坐标在范围内。在半径为R的圆形范围内,x和y坐标均未超过2^32的幂次方:

零知识证明应用

MIMC(x,y)的散列计算是正确的。X/y为私有输入,散列值为公共输入

init 电路

当行星移动时,检查移动范围不能超过半径为distmax的圆:

         /* check abs(x), abs(y), abs(r) < 2^32 */            component rp = MultiRangeProof(2, 40, 2**32);            rp.in[0] <== x;            rp.in[1] <== y; 

确定原始坐标的散列值和移动后的散列值。显然,特定的坐标是私有输入,哈希值是公共输入

         /* check x^2 + y^2 < r^2 */            component comp = LessThan(32);            signal xSq;            signal ySq;            signal rSq;            xSq <== x * x;            ySq <== y * y;            rSq <== r * r;            comp.in[0] <== xSq + ySq            comp.in[1] <== rSq            comp.out === 1; 

随着黑暗森林版本的迭代,许多新的播放方法已经更新。有更多与位置相关的证明电路,但基本逻辑类似。感兴趣的合作伙伴可以自己查看

         /* check MiMCSponge(x,y) = pub */            /*                220 = 2 * ceil(log_5 p), as specified by mimc paper, where                p = 21888242871839275222246405745257275088548364400416034343698204186575808495617            */            component mimc = MiMCSponge(2, 220, 1);             mimc.ins[0] <== x;            mimc.ins[1] <== y;            mimc.k <== 0;             pub <== mimc.outs[0]; 

move 电路

体验过最新的游戏版本:v0.6第3轮。目前,您需要一个邀请码才能参加游戏

         /* check (x1-x2)^2 + (y1-y2)^2 <= distMax^2 */             signal diffX;            diffX <== x1 - x2;            signal diffY;            diffY <== y1 - y2;             component ltDist = LessThan(32);            signal firstDistSquare;            signal secondDistSquare            firstDistSquare <== diffX * diffX;            secondDistSquare <== diffY * diffY;            ltDist.in[0] <== firstDistSquare + secondDistSquare;            ltDist.in[1] <== distMax * distMax + 1;            ltDist.out === 1; 

进入游戏主界面,如上图所示,主界面由四部分组成:1/工具栏在最左侧,玩家可以查看自己的行星和文物。游戏支持各种插件。2 /极右是交易记录3,中间是整个宇宙的分布图。从玩家的角度来看,整个宇宙由黑色背景和雾色组成。黑色背景是发达的宇宙。多雾地区是一个未经探索的宇宙。在宇宙中有不同层次的行星。4/底部是显影扫描控制条,可以控制扫描是否开始以及从什么坐标开始。请注意宇宙地图上的目标图标,它表示正在扫描的空间。进入游戏时,向导程序将引导您熟悉基本功能按钮。默认情况下,扫描仪会不断扫描未知空间

         component mimc1 = MiMCSponge(2, 220, 1);            component mimc2 = MiMCSponge(2, 220, 1);             mimc1.ins[0] <== x1;            mimc1.ins[1] <== y1;            mimc1.k <== 0;            mimc2.ins[0] <== x2;            mimc2.ins[1] <== y2;            mimc2.k <== 0;             pub1 <== mimc1.outs[0];            pub2 <== mimc2.outs[0]; 

单击行星以查看行星的特定参数。下图显示了捕获的行星的参数信息:

体验 v0.6 Round 3

技术解析零知识证明在 Dark Forest 游戏中的应用

红色:当前人口/人口上限。蓝色:当前矿石数量/矿石上限。粉红色:防御率(百分比系统)/移动速度/攻击范围。咖啡:设备“发送”按钮可以将人口和地雷发送到其他星球,“发送”功能是相应电路中的移动操作。在移动过程中,两颗行星之间有一条白线。移动的进度将显示在白线上

不同行星的属性不同。有些可以生产矿物,有些装备齐全,有些可以升级,有些不能升级,等等

每个行星从一级开始。第三轮的目标是捕获并拥有三级以上的行星。行星离原点越近,分数越高,排名越高。9级行星也设置在原点,捕获该行星的玩家是第一个

黑暗森林是一款实时战略游戏。移动和捕获地球是整个游戏的战略重点。为了在不披露行星坐标的情况下证明行星的正确运动,引入了零知识证明技术

红色:当前人口数 / 人口上限。蓝色:当前的矿数 / 矿上限。粉红色:防御率(百分制)/ 移动速度 / 攻击范围。咖啡色:装备。「send」按钮可以发送人口和矿到其他星球上。「send」功能就是对应电路中的 move 操作。在 move 的移动过程中,两个星球中间有白色连线。白色连线上会显示移动的进度。

各种星球的属性不同,有些可以产矿,有些有装备,有些能升级,有些不能升级等等。

每个星球从 level 1 开始。Round 3 的目标是攻占并拥有 level 3 以上的星球。离原点越近的星球,分数越高者排名越高。在原点还设置了 level 9 的星球,攻占了这个星球的玩家为第一名。

总结

Dark Forest 是一款实时策略游戏。星球的移动和攻占是整个游戏的策略重点。为了在不公开星球坐标的情况,还能证明星球的移动正确,引入了零知识证明技术。

区块链技术技术解析零知识证明在 Dark Forest 游戏中的应用 由www.b2bchain.cn 提供
文章整理自网络,只为个人学习与分享使用
链接地址https://www.b2bchain.cn/?p=22660

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 区块链技术技术解析零知识证明在 Dark Forest 游戏中的应用
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们