遇到的問(wèn)題
PopCraft 是一款全鏈上的消除游戲,每局游戲時(shí)長(zhǎng) 4 分鐘,玩家在規(guī)定時(shí)間內(nèi)消除棋盤上所有元素,會(huì)獲得代幣獎(jiǎng)勵(lì)。
由于全鏈上的特性,玩家在游戲過(guò)程中的每次操作都需要跟區(qū)塊鏈交互。以太坊二層的區(qū)塊時(shí)間通常為 2 秒,導(dǎo)致玩家在游戲中每次操作需要至少等待 2 秒才能完成,這遠(yuǎn)遠(yuǎn)超過(guò)同類 Web2 游戲中的等待時(shí)間,從而使 PopCraft 游戲體驗(yàn)欠佳。
PopCraft 游戲主界面
設(shè)想的方案
我們?cè)O(shè)想在 PopCraft中利用零知識(shí)證明技術(shù)(以下簡(jiǎn)稱 ZKP),減少玩家在游戲過(guò)程中與區(qū)塊鏈的交互次數(shù)。
預(yù)期的方式是:游戲過(guò)程不上鏈,但有機(jī)制可以確保無(wú)作弊風(fēng)險(xiǎn)。玩家在游戲中每一步操作都會(huì)生成 ZKP,后一步操作的 ZKP 基于前一步的 ZKP 來(lái)生成,從而形成一種類似區(qū)塊鏈結(jié)構(gòu)的自包含 ZKP,游戲結(jié)束時(shí)將最后一步操作的 ZKP 發(fā)送到鏈上,交由智能合約驗(yàn)證其結(jié)果。
方案調(diào)研與推導(dǎo)
1. 游戲過(guò)程與結(jié)果的防作弊:僅對(duì)游戲結(jié)果生成 ZKP 是不夠的,因?yàn)橛螒虻倪^(guò)程同樣存在作弊可能。因此,既要對(duì)游戲結(jié)果生成 ZKP,也要對(duì)游戲過(guò)程進(jìn)行驗(yàn)證。
2. 逐步生成 ZKP 的技術(shù)挑戰(zhàn):為了防作弊,需要對(duì)玩家在游戲中的每一個(gè)操作都生成 ZKP,在游戲結(jié)束時(shí)將最后一個(gè) ZKP 上鏈進(jìn)行驗(yàn)證。這個(gè)過(guò)程中,每一步的 ZKP 都會(huì)依賴于前一步的 ZKP,直到游戲結(jié)束為止。
但難點(diǎn)是:
1> 新的 ZKP 生成需要依賴前一步的 ZKP,這使得驗(yàn)證過(guò)程復(fù)雜且不確定能否可實(shí)現(xiàn)。此外, ZKP 驗(yàn)證通過(guò)智能合約(鏈上)來(lái)做,后一步生成 ZKP 時(shí)該如何去驗(yàn)證前一步的 ZKP 是正確的。
2> 在通過(guò)智能合約驗(yàn)證每一步的 ZKP 是否正確時(shí),如何確保每個(gè) ZKP 與前一個(gè) ZKP 的連貫性,該問(wèn)題不確定是否有方案可以解決。
3. 公開(kāi)游戲數(shù)據(jù)的問(wèn)題:PopCraft 的游戲數(shù)據(jù)是公開(kāi)的,因此通過(guò) ZKP 做信息隱藏沒(méi)必要。如果上述驗(yàn)證步驟均可實(shí)現(xiàn)的話,下一步需要考慮在合約端保存游戲數(shù)據(jù)。然而問(wèn)題在于 ZKP 的性質(zhì)無(wú)法解出具體的游戲數(shù)據(jù),此時(shí)也不可直接相信客戶端傳給智能合約的游戲結(jié)果數(shù)據(jù),這意味著智能合約無(wú)法直接存儲(chǔ)這些數(shù)據(jù)。
4.PopCraft 中消耗游戲道具(消耗Token)的問(wèn)題:當(dāng)游戲過(guò)程涉及到通過(guò)游戲道具完成孤立元素的消除時(shí),本質(zhì)上對(duì)應(yīng)的是 Token 消耗,需要將用戶錢包中對(duì)應(yīng)的 Token 轉(zhuǎn)移,如何處理這一步 ZKP 生成和驗(yàn)證也是一個(gè)問(wèn)題。
1> 一個(gè)可能的解決方案是:這一步繼續(xù)按照之前的流程生成 ZKP,驗(yàn)證消耗的 Token 數(shù)量并最終發(fā)送給智能合約。然而,由于智能合約無(wú)法通過(guò)ZKP 得到具體游戲數(shù)據(jù),因此無(wú)法判斷應(yīng)該轉(zhuǎn)移的 Token 數(shù)量。
此外,假設(shè)玩家擁有 3 個(gè) Token A,卻嘗試在游戲中消耗 4 個(gè) Token A,這種錯(cuò)誤會(huì)在游戲結(jié)束時(shí)才被發(fā)現(xiàn),而不是在用戶操作實(shí)時(shí)被發(fā)現(xiàn)。
2> 另一個(gè)可能的解法是:在使用 Token 完成孤立元素的消除時(shí),直接與智能合約交互完成消除,然后更新玩家的 Token 余額。生成的 ZKP 只負(fù)責(zé)保存此時(shí)游戲操作和狀態(tài)的證明。
那么此時(shí)在轉(zhuǎn)移 Token 成功之后,還需要像前面操作一樣繼續(xù)生成 ZKP,如果不生成,那么在轉(zhuǎn)移 Token 操作的上一步生成的 ZKP 與下一次生成的 ZKP 中間,多了一次與智能合約交互的步驟,那么 ZKP 中的游戲狀態(tài)就會(huì)沖突,這樣游戲結(jié)束時(shí)生成的 ZKP 是否有效也是一個(gè)懸而未決的問(wèn)題。
5. ZKP 的數(shù)據(jù)隱藏問(wèn)題:對(duì)于 PopCraft 這種不需要隱藏游戲數(shù)據(jù)的場(chǎng)景來(lái)說(shuō),通過(guò) ZKP 做數(shù)據(jù)隱藏是多余的,且增加了游戲數(shù)據(jù)獲取的難度以及工程實(shí)現(xiàn)方案的不確定性。PopCraft 只需確保游戲過(guò)程和結(jié)果無(wú)作弊風(fēng)險(xiǎn)即可,并不需要隱藏游戲過(guò)程數(shù)據(jù)。
結(jié)論
在 PopCraft 這樣的游戲中,游戲數(shù)據(jù)不需要隱藏,因此通過(guò) ZKP 做信息隱藏沒(méi)有必要。為了通過(guò)縮短響應(yīng)時(shí)間來(lái)提升游戲體驗(yàn),可以考慮游戲過(guò)程不上鏈,僅將最終結(jié)果上鏈。關(guān)鍵在于找到一種方法,可以確保從玩游戲的第一步到最后一步都沒(méi)有作弊可能,最后將正確的結(jié)果上鏈驗(yàn)證即可。
如果通過(guò) ZKP 進(jìn)行信息隱藏,反倒是增加了工程實(shí)現(xiàn)難度。其次是如何確保游戲過(guò)程無(wú)作弊風(fēng)險(xiǎn),使用 ZKP 能確保單個(gè)游戲操作無(wú)作弊風(fēng)險(xiǎn),但為了減少跟區(qū)塊鏈的交互次數(shù),又不能生成一次 ZKP 就提交一次。所以從游戲開(kāi)始的第一步操作到游戲結(jié)束整個(gè)過(guò)程,又該如何保證無(wú)作弊風(fēng)險(xiǎn),目前看來(lái) ZKP 無(wú)法解決該問(wèn)題。
從我們的調(diào)研來(lái)看,游戲領(lǐng)域 ZKP 適合做兩類事情:
- 非完全信息博弈類游戲的信息隱藏,比如:黑暗森林、德州撲克、狼人殺、爐石傳說(shuō)等。
- 游戲過(guò)程為單步的游戲結(jié)果證明,比如:彩票、猜數(shù)字、石頭剪刀布、骰子游戲等。
由于我們?cè)诹阒R(shí)證明技術(shù)上的儲(chǔ)備有限,本文內(nèi)容可能存在事實(shí)性錯(cuò)誤或不合理的工程設(shè)想,懇請(qǐng)具備豐富經(jīng)驗(yàn)的零知識(shí)證明領(lǐng)域?qū)<遗u(píng)指正。
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。