值得信赖的区块链资讯!
Dark Forest – 采用零知识证明技术的游戏
Dark Forest是一款MMO(大型多人在线游戏类型)游戏。我比较感兴趣的是这款游戏使用了零知识证明技术。零知识证明技术应用越来越丰富:隐私,跨链,zk Rollup,游戏等等。本文介绍Dark Forest的基本策略,如何结合零知识证明技术。在文章的最后,介绍最新版本v0.6 Round 3的游戏体验和截图。
目前Dark Forest版本已经迭代到0.6。但是,github上的最新的代码并没有公开电路的部分。为了方便理解它如何采用零知识证明技术,可以查看github公布的0.3的完整代码:
https://github.com/darkforest-eth/darkforest-v0.3.git
看看智能合约的源代码,可以对Dark Forest的游戏策略有一定的了解。智能合约的源代码在目录:
darkforest-v0.3/eth/contracts
整个游戏宇宙由“星球”(Planet)组成:
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;
}
一个星球有两种“资源”:人口(population)和矿(目前支持silver-银)。人口和矿慢慢增长,但是有上限。有矿可以升级。DarkForestInitialize.sol定义了几种星球类型。
struct ArrivalData {
uint256 id;
address player;
uint256 fromPlanet;
uint256 toPlanet;
uint256 popArriving;
uint256 silverMoved;
uint256 departureTime;
uint256 arrivalTime;
}
从一个星球能将资源移动到另外一个星球。星球的移动存在速度。移动的同时可以指明携带的资源。当到达时,如果携带的人员超过该星球的人口,就可以攻占星球。攻占逻辑可以查看darkforest-v0.3/eth/contracts/DarkForestLazyUpdate.sol的applyArrival函数(当移动完成后触发):
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)
);
}
如果是到达自己的星球,人口和银矿直接累加。如果是其他人的星球,如果作战人数不够(小于星球人口),到达星球的人口相应减少。如果作战人数大于到达星球人口,攻占星球,并更新人口(作战牺牲)。
星球的移动和攻占是整个游戏的策略重点。既然是移动攻击,每个星球有一个坐标。为了增加游戏的策略体验,星球的具体坐标并不公开。有点像在浩瀚的宇宙中,只能观察(枚举)周围有限空间(hash碰撞)寻找其他星球。为了在不公开星球坐标的情况,还能证明星球的移动正确,引入了零知识证明技术。
asDark Forest游戏V0.3利用零知识证明技术证明了两个和星球位置有关的操作:1/ 星球初始化(init) 2/ 星球移动(move)。电路逻辑在darkforest-v0.3/circuits/中。电路采用circom开发。电路的证明采用Groth16协议。两个电路相对都比较简单:
init电路
init电路用来确保星球创建的时候,坐标在范围内。x和y坐标都不超过2^32次方。
/* check abs(x), abs(y), abs(r) < 2^32 */
component rp = MultiRangeProof(2, 40, 2 ** 32);
rp.in[0] <== x;
rp.in[1] <== y;
在半径为r的圆形范围内:
/* 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;
mimc(x,y) 的hash计算正确。x/y是private input,hash值是public input。
/* 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电路
在星球移动时,检查移动的范围不能超过半径为distMax的圆:
/* 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;
确定原始坐标的hash值以及移动后的hash值,显然具体坐标是private input,hash值是public input。
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];
随着Dark Forest版本的迭代,更新了不少新的玩法。和位置有关的证明的电路也变多了,但是基本逻辑类似,感兴趣的小伙伴可以自行查看。
体验了一下最新的游戏版本:v0.6 Round 3。目前参加游戏需要邀请码。
进入游戏的主界面如上,由4部分组成:1/ 最左边是工具栏,玩家可以查看自己的星球(Planets)和装备(Artifacts)。游戏支持各种插件(plugins)。2/ 最右边是交易记录 3/ 中间是整个宇宙星球分布图。从某个玩家的视角看,整个宇宙由黑色背景和雾色组成。黑色背景是已经开拓的宇宙世界。雾色区域是没有开拓的宇宙世界。在开拓的宇宙世界中有各种等级的星球。4/ 底部是开拓扫描控制栏,可以控制扫描是否开始,从什么坐标扫描。注意在宇宙分布图中的靶向图标,这个图标就是指明正在扫描的宇宙空间。进入游戏的时候,向导程序会引导熟悉基本的功能按钮。默认情况下,扫描程序不停的扫描未知宇宙空间。
点击某个星球,可以查看该星球的具体参数。下图是攻占的一个星球的参数信息:
红色:当前人口数/人口上限。蓝色:当前的矿数/矿上限。粉红色:防御率(百分制)/ 移动速度 / 攻击范围。咖啡色:装备。“send”按钮可以发送人口和矿到其他星球上。“send”功能就是对应电路中的move操作。在move的移动过程中,两个星球中间有白色连线。白色连线上会显示移动的进度。
各种星球的属性不同,有些可以产矿,有些有装备,有些能升级,有些不能升级等等。
每个星球从level 1开始。Round 3的目标是攻占并拥有level 3以上的星球。离原点越近的星球,分数越高者排名越高。在原点还设置了level 9的星球,攻占了这个星球的玩家为第一名。
总结:
Dark Forest是一款实时策略游戏。星球的移动和攻占是整个游戏的策略重点。为了在不公开星球坐标的情况,还能证明星球的移动正确,引入了零知识证明技术。
比推快讯
更多 >>- 数据:若 ETH 跌破 1,809 美元,主流 CEX 累计多单清算强度将达 7.91 亿美元
- 数据:监测到 3,931.28 万 USDT 转出 Binance
- CZ 报平安:一切安好
- 数据:ETH 当前全网 8 小时平均资金费率为 -0.003%
- 美国 CIA 评估:即便哈梅内伊遇害,伊朗也会有强硬派人士接替
- Vitalik:EIP-8141 有望在一年内实现,全面解决账户抽象问题
- 分析:以太坊 MVRV 指标显示币价已处于长期底部区间
- 彭博社:比特币全天候交易,成为在其他市场关闭时表达宏观观点最具流动性资产
- 某巨鲸过去 6 小时卖出 500 枚 PAXG,预计获利 21.7 万美元
- 迪拜棕榈岛附近冒出浓烟并起火
- 伊朗外交部长:几乎所有官员都健康在世
- 网传伊朗最高领袖哈梅内伊已丧生,其 4 月前下台概率猛增至 72%
- 链上黄金于传统市场休市期间承接黑天鹅行情,凸显区块链优势
- USDD 2.0 供应挖矿第 XV 阶段正式开启
- 美以袭击前一小时精准预报,PolyBeats 成功挖掘多个内幕地址
- 比特币短时拉升 1.39%,突破 6.5 万美元
- 知情人士:伊朗国防部长和伊斯兰革命卫队司令身亡
- 11 名美国参议员要求联邦机构调查币安制裁合规情况
- 两年前 4.5 万美元建仓 WBTC 的鲸鱼近 3 周减持 60 枚,将获利 112.5 万美元
- 伊朗称目前发射导弹只是清库存 即将投入一系列“从未面世的神秘武器”
- 下周宏观展望:美以联手引爆中东火药桶,周五非农数据公布
- 美国已计划发起逐步升级的打击行动,并留有缓和余地
- 霍尔木兹海峡油轮运输陷入停滞
- 伊朗最高领袖哈梅内伊将向全国发表讲话
- 伯克希尔哈撒韦 Q4 运营利润同比下降近 30%
- Bubblemaps:六名疑似内部人士通过提前押注美国对伊朗袭击获利 120 万美元
- 阿联酋决定疏散世界最高塔哈利法塔
- 五角大楼披萨指数再次精准预警美国对伊动武
- 2 月份加密领域因漏洞攻击造成的损失约为 3,570 万美元
- Balaji 谈 Anthropic:政治和科技领域的原则往往是部落利益的伪装
- 以色列初步评估:针对伊朗高层的刺杀失败
- 观点:比特币资金费率降至-6%,潜在轧空条件形成
- 2026 年 2 月加密市场融资 8.64 亿美元,环比下降 19.3%
- 主流 Perp DEX 一览:多数平台持仓量已不足 10 亿美元,交易量较昨日再次下滑
- 某巨鲸自 2025 年 10 月起建仓 1240 万美元数字黄金,目前浮盈 352.1 万美元
- 美伊冲突全面爆发,比特币险守 6.3 万美元,黄金代币涨近 6%
- Bitget CandyBomb:交易任意币种解锁 34 万枚 ROBO 空投
- 伊朗:陆军总司令无恙,正在指挥陆军部队
- 美国高级官员:美方尚无人员伤亡
- 以色列空袭的目标包括伊朗最高领袖和总统
- 阿联酋阿布扎比市主要机场附近传来数声爆炸声
- 美国军队高官于海湖庄园指挥伊朗行动
- 观点:加密货币不幸成为周末避险事件中首选的做空对冲工具
- 链上 BTC 与 ETH 最大多头持仓合计亏超 1300 万美元,暂未减仓
- 伊朗最高国家安全委员会:已就美以军事行动予以回应
- 阿联酋弹片坠落导致一名亚裔人士死亡
- 市场消息:伊朗向除阿曼外的所有海湾国家都发射了弹道导弹
- 特朗普预计将于当地时间周六上午再次向全国发表讲话
- 阿联酋称已处理阿布扎比地区发生的弹片坠落事件
- 交易员 CBB 持仓超 3000 万美元 AI 产业链一揽子空单,现为链上英伟达最大空头
比推专栏
更多 >>- Big player's 『Trigger moment』|0227Europe
- 简街有没有「操纵」BTC?拆解 AP 制度,读懂 ETF 申赎机制背后的定价权博弈
- Happy new year【Horse success】|0213Asian
- Was it finished?|0206 Asian
- 围猎以太坊多头:「巨鲸」们暴亏 70 亿美元,正被集体围观
- Challenge,risk And chances|0130 Asian
- Meta 豪赌 AI:砸钱 1350 亿美元,2026 的扎克伯格,值得相信么?
- Variables: Terrible snowstorm|0128 Asian
- 英特尔「生死线」时刻:在 ICU 门前,陈立武如何清算遗产并开启自救?
- 從1月13號到今天,提前到5100|0126Asian
观点
比推热门文章
- 数据:若 ETH 跌破 1,809 美元,主流 CEX 累计多单清算强度将达 7.91 亿美元
- 数据:监测到 3,931.28 万 USDT 转出 Binance
- CZ 报平安:一切安好
- 数据:ETH 当前全网 8 小时平均资金费率为 -0.003%
- 美国 CIA 评估:即便哈梅内伊遇害,伊朗也会有强硬派人士接替
- Vitalik:EIP-8141 有望在一年内实现,全面解决账户抽象问题
- 分析:以太坊 MVRV 指标显示币价已处于长期底部区间
- 彭博社:比特币全天候交易,成为在其他市场关闭时表达宏观观点最具流动性资产
- 某巨鲸过去 6 小时卖出 500 枚 PAXG,预计获利 21.7 万美元
- 迪拜棕榈岛附近冒出浓烟并起火
比推 APP



