政策技術解析零...

技術解析零知識證明在Dark Forest 遊戲中的應用- 鏈聞ChainNews

Dark Forest 是一款實時策略遊戲。星球移動和攻占是遊戲的策略重點,為了在不公開星球坐標的情況,還能證明星球的移動正確,引入了零知識證明技術。

原文標題:《Dark Forest – 採用零知識證明技術的遊戲》
撰文: Star Li

Dark Forest 是一款MMO (大型多人在線遊戲類型)遊戲。我比較感興趣的是這款遊戲使用了零知識證明技術。零知識證明技術應用越來越豐富:隱私、跨鏈、ZK Rollup,遊戲等等。本文介紹Dark Forest 的基本策略,如何結合零知識證明技術。在文章的最後,介紹最新版本v0.6 Round 3 的遊戲體驗和截圖。

目前Dark Forest 版本已經迭代到0.6。但是,github 上的最新的代碼並沒有公開電路的部分。為了方便理解它如何採用零知識證明技術,可以查看github 公佈的0.3 的 完整代碼

遊戲策略

看看智能合約的源代碼,可以對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

體驗了一下最新的遊戲版本:v0.6 Round 3。目前參加遊戲需要邀請碼。

技術解析零知識證明在Dark Forest 遊戲中的應用

進入遊戲的主界面如上,由4 部分組成:1/ 最左邊是工具欄,玩家可以查看自己的星球(Planets)和裝備(Artifacts)。遊戲支持各種插件(plugins)。 2/ 最右邊是交易記錄3/ 中間是整個宇宙星球分佈圖。從某個玩家的視角看,整個宇宙由黑色背景和霧色組成。黑色背景是已經開拓的宇宙世界。霧色區域是沒有開拓的宇宙世界。在開拓的宇宙世界中有各種等級的星球。 4/ 底部是開拓掃描控制欄,可以控制掃描是否開始,從什麼坐標掃描。注意在宇宙分佈圖中的靶向圖標,這個圖標就是指明正在掃描的宇宙空間。進入遊戲的時候,嚮導程序會引導熟悉基本的功能按鈕。默認情況下,掃描程序不停的掃描未知宇宙空間。

點擊某個星球,可以查看該星球的具體參數。下圖是攻占的一個星球的參數信息:

技術解析零知識證明在Dark Forest 遊戲中的應用

紅色:當前人口數/ 人口上限。藍色:當前的礦數/ 礦上限。粉紅色:防禦率(百分制)/ 移動速度/ 攻擊範圍。咖啡色:裝備。 「send」按鈕可以發送人口和礦到其他星球上。 「send」功能就是對應電路中的move 操作。在move 的移動過程中,兩個星球中間有白色連線。白色連線上會顯示移動的進度。

各種星球的屬性不同,有些可以產礦,有些有裝備,有些能升級,有些不能升級等等。

每個星球從level 1 開始。 Round 3 的目標是攻占並擁有level 3 以上的星球。離原點越近的星球,分數越高者排名越高。在原點還設置了level 9 的星球,攻占了這個星球的玩家為第一名。

總結

Dark Forest 是一款實時策略遊戲。星球的移動和攻占是整個遊戲的策略重點。為了在不公開星球坐標的情況,還能證明星球的移動正確,引入了零知識證明技術。

免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews 立場無關。文章內的信息、意見等均僅供參考,並非作為或被視為實際投資建議。

.

Source Link

最受歡迎

繼續閱讀

長期持有者持有的比特幣(BTC)供應量達到最高水平

根據Glassnode 的估計,比特幣的長期持有者(LTH)目前擁有1452 萬枚BTC,創歷史新高,只剩下25% 留給短期持...

抓住Web3 遊戲的先發優勢:成功策略

Web3和區塊鏈技術的出現徹底改變了遊戲行業,為開發者和企業家提供了前所未有的機遇。 Web3 遊戲的去中心化性質為創新遊戲貨幣化模式、玩家所有權和社區參與打...

現在讀

$COOKIE, the Cookie3 Mark...

Tallinn, Estonia, March 26th, 2024...

長期持有者持有的比特幣(BTC)供應量達到最高水平...

根據Glassnode 的估計,比特幣的長期持有者(LTH)目前擁有1452 萬枚BTC,創歷史新高,只剩下25% 留給短期持有者和投機者。 儘管BTC 的價格在過去一個月中保持相對平穩,範圍在約29,000 美元至31,000 美元之間,但人們還是開始瘋狂囤積。 ...

Caldera 宣布與Espresso Syste...

Caldera 開發人員可以利用Espresso Sequence...

抓住Web3 遊戲的先發優勢:成功策略

Web3和區塊鏈技術的出現徹底改變了遊戲行業,為開發者和企業家提供了前所未有的機遇。 Web3 遊戲的去中心化性質為創新遊戲貨幣化模式、玩家所有權和社區參與打開了大門。對於那些尋求利用Web3 遊戲巨大潛力的人來說,確保先發優勢至關重要。 了解Web3 遊戲生態系統在深入研究Web3 遊戲之前,有...

Taapsee Pannu 推出NFT 平台,介紹...

企業家貢獻者表達的意見是他們自己的。 您正在閱讀《企業家印度》,這是企業家媒體的國際特許經營刊物。 女演員Taapsee Pannu 最近推出了“taapseeclub.com”,這是她自己的非同質代...

比特幣(BTC) 地址休眠超過11 年,轉移310...

經過11 年多的閒置之後,一個包含3100 萬美元BTC 的休眠比特幣地址最近突然活躍起來。 2023年7月22日,地址 轉入 將其全部餘額轉移到新地址。 早期BTC 地址復活 比特幣自2009 年以來就已經存在,因此存在多年來不活躍的休眠地址,其中包含大量BTC。這種加密貨幣的一些早期採用者能夠...

加密貨幣死了嗎?當今加密貨幣的現狀

您之前可能聽說過加密貨幣正在消亡(或比特幣已消亡)。在這篇文章中,我們將研究加密貨幣的狀態,並嘗試回答這個問題:加密貨幣現在已經死了嗎? 在我們開始之前,我們想澄清一下,本文指的是最廣泛意義上的“加密貨幣行業”; 在裡面 網絡3 感覺。該定義包括加密資產市場; 但它還包括其他非財務用例。 隨著近來加...

Chancer 可能成為體育和社交博彩領域的下一個...

加密貨幣 隨著企業財報季節的繼續,本週股市表現好壞參半。在Ne...

以太坊(ETH) 創下兩個月來CEX 流入最高紀錄...

過去一周,以太坊(ETH)流入中心化交易所(CEX)的資金量創下了過去兩個月來的最高水平。這些重大的資產變動表明ETH 的價格可能會下跌。 CoinGecko 數據顯示,第二大加密貨幣的價格一直在小幅下跌,過去一周價值下跌了2.5%。截至撰寫本文時,以太幣易手價格為1,892.65 美元,過去24...

新的DeFi 法案有“不可行的義務”

加密貨幣創新委員會表示,新的反洗錢法案沒有為DeFi 中的非法金融...

幣安大幅削減成本,瑞波幣為美國銀行和加密貨幣風險投...

美國證券交易委員會(SEC)對加密貨幣公司的打擊似乎嚴重影響了幣安的業務。據報導,在過去幾週內,該加密貨幣交易所解雇了1,000 多名員工,並削減了一些福利。 幣安表示,“當前的市場環境和監管環境”導致利潤下降,這表明可能正在進行更多削減。一位發言人告訴Cointelegraph,該公司將考慮縮減“...

Automata 雙週更新:第48 期| 通過自動...

迎接新的季度意味著設定我們的意圖並為團隊規劃下一步的行動。幕後醞釀的一切——合作、產品功能和營銷發布——很難抑制我們的興奮。我們一開始就在1RPC(2 個備受期待的第2 層主網)上添加了對Linea 和Base 的支持。科技載體更新頁腳以顯示界面版本平滑的用戶體驗 USDC CCTP 支持 關於仲裁...