撰文:Yooma

以PopCraft為例,闡釋零知識證明在全鏈遊戲中所扮演的角色

圖片來源:https://unsplash.com/photos/people-inside-library-1mwPOXb_pB8

遇到的問題

PopCraft 是一款全鏈上的消除遊戲,每局遊戲時長4 分鐘,玩家在規定時間內消除棋盤上所有元素,會獲得代幣獎勵。

由於全鏈上的特性,玩家在遊戲過程中的每次操作都需要跟區塊鏈互動。以太坊二層的區塊時間通常為2 秒,導致玩家在遊戲中每次操作需要至少等待2 秒才能完成,這遠遠超過同類Web2 遊戲中的等待時間,從而使PopCraft 遊戲體驗欠佳。

以PopCraft為例,闡釋零知識證明在全鏈遊戲中所扮演的角色

 PopCraft 遊戲主介面

設想的方案

我們設想在PopCraft中運用零知識證明技術(以下簡稱ZKP),減少玩家在遊戲過程中與區塊鏈的互動次數。

預期的方式是:遊戲過程不上鍊,但有機制可以確保無作弊風險。玩家在遊戲中每一步操作都會生成ZKP,後一步操作的ZKP基於前一步的ZKP 來生成,從而形成一種類似區塊鏈結構的自包含ZKP,遊戲結束時將最後一步操作的ZKP 發送到鏈上,交由智能合約驗證其結果。

方案調查與推導

1. 遊戲過程與結果的防作弊:僅對遊戲結果產生ZKP 是不夠的,因為遊戲的過程同樣存在作弊可能。因此,既要對遊戲結果產生ZKP,也要對遊戲過程進行驗證。

2. 逐步產生ZKP 的技術挑戰:為了防作弊,需要對玩家在遊戲中的每個動作都產生ZKP,在遊戲結束時將最後一個ZKP 上鍊進行驗證。這個過程中,每一步的ZKP 都會依賴前一步的ZKP,直到遊戲結束為止。

但困難是:

1> 新的ZKP 產生需要依賴前一步的ZKP,這使得驗證過程複雜且不確定能否實現。此外, ZKP 驗證透過智慧合約(鏈上)來做,後一步產生ZKP 時該如何去驗證前一步的ZKP 是正確的。

2> 在透過智能合約驗證每一步的ZKP 是否正確時,如何確保每個ZKP 與前一個ZKP 的連貫性,該問題不確定是否有方案可以解決。

3. 公開遊戲資料的問題:PopCraft 的遊戲資料是公開的,因此透過ZKP 做資訊隱藏沒必要。如果上述驗證步驟都可實現的話,下一步需要考慮在合約端保存遊戲資料。然而問題在於ZKP 的性質無法解出具體的遊戲數據,此時也不可直接相信客戶端傳給智能合約的遊戲結果數據,這意味著智能合約無法直接儲存這些數據。

4.PopCraft 中消耗遊戲道具(消耗Token)的問題:當遊戲過程涉及到透過遊戲道具完成孤立元素的消除時,本質上對應的是Token 消耗,需要將用戶錢包中對應的Token 轉移,如何處理這一步ZKP 產生和驗證也是一個問題。

1> 一個可能的解決方案是:這一步驟繼續按照先前的流程產生ZKP,驗證消耗的Token 數量並最終發送給智能合約。然而,由於智能合約無法透過ZKP 得到具體遊戲數據,因此無法判斷應該轉移的Token 數量。

此外,假設玩家擁有3 個Token A,卻嘗試在遊戲中消耗4 個Token A,這種錯誤會在遊戲結束時才被發現,而不是在用戶操作實時被發現。

2> 另一個可能的解法是:在使用Token 完成孤立元素的消除時,直接與智能合約互動完成消除,然後更新玩家的Token 餘額。產生的ZKP 只負責保存此時遊戲操作和狀態的證明。

那麼此時在轉移Token 成功之後,還需要像前面操作一樣繼續生成ZKP,如果不生成,那麼在轉移Token 操作的上一步生成的ZKP 與下一次生成的ZKP 中間,多了一次與智能合約交互的步驟,那麼ZKP 中的遊戲狀態就會衝突,這樣遊戲結束時產生的ZKP 是否有效也是一個懸而未決的問題。

5. ZKP 的資料隱藏問題:對於PopCraft 這種不需要隱藏遊戲資料的場景來說,透過ZKP 做資料隱藏是多餘的,且增加了遊戲資料取得的難度以及工程實現方案的不確定性。 PopCraft 只需確保遊戲流程和結果不會有作弊風險即可,並不需要隱藏遊戲流程資料。

結論

在PopCraft 這樣的遊戲中,遊戲資料不需要隱藏,因此透過ZKP 做資訊隱藏沒有必要。為了透過縮短反應時間來提升遊戲體驗,可以考慮遊戲過程不上鍊,僅將最終結果上鍊。關鍵在於找到一種方法,可以確保從玩遊戲的第一步到最後一步都沒有作弊可能,最後將正確的結果上鍊驗證即可。

如果透過ZKP 進行資訊隱藏,反倒是增加了工程實現難度。其次是如何確保遊戲過程沒有作弊風險,使用ZKP 能確保單一遊戲操作無作弊風險,但為了減少跟區塊鏈的互動次數,又不能產生一次ZKP 就提交一次。所以從遊戲開始的第一步操作到遊戲結束整個過程,又該如何保證無作弊風險,目前看來ZKP 無法解決這個問題。

從我們的研究來看,遊戲領域ZKP 適合做兩類事情:

非完全資訊遊戲遊戲的資訊隱藏,例如:黑暗森林、德州撲克、狼人殺、爐石戰記等。

遊戲過程為單步驟的遊戲結果證明,例如:彩票、猜數字、石頭剪刀布、骰子遊戲等。

由於我們在零知識證明技術上的儲備有限,本文內容可能存在事實性錯誤或不合理的工程設想,懇請具備豐富經驗的零知識證明領域專家批評指正。