以更遠大的視角看,隨著基礎設施的提升,不僅僅是遊戲而是各種複雜想法的構建與實現都會通過 MUD 引擎進行,並在更複雜的 Rollup 方案上融合互動,區塊鏈的新正規化也許會從「全鏈遊戲」開始。本文源自 YBB Capital 的 Solaire 撰著文章。
(前情提要:IOSG研究報告》Web3遊戲引擎的「網路聚合效應」)
(背景補充:EVG研究》去中心化自治世界DAW:無限可能的鏈游空間)
過去由於區塊鏈連結串列結構的限制,在鏈上構建一個實用的 DApp 一直不是件簡單的事情。但即便受此限制,探索者們也從未停下過前進的步伐,隨著「x * y = k」這段著名的恆定乘積池公式誕生於世,短短數百行程式碼的 Uniswap 引領 DeFi 徹底改變了 Crypto 的敘事。
簡單的 DApp 在開發者的巧思下尚能達到如此高度,那麼複雜的 DApp 應用呢?比如把遊戲或者社交平臺完全搭建在鏈上?這在過去可能是一個瘋狂的想法,但在 Rollups 開啟可擴充套件性的今天,這種可能性開始變得微妙。
DeFi 曾給 Crypto 帶來了數千億美元的 TVL,複雜性倍增的 DApp 如何實現?會引領 Crypto 再次走上一個新的高度嗎?或許處在發展初期的全鏈遊戲能給我們答案。
本文的內容將從全鏈遊戲的歷史、全鏈遊戲目前的定義、全鏈遊戲創造與執行的實現方式以及全鏈遊戲對 Crypto 未來的意義,這四個部分對全鏈遊戲進行一次剖析。
全鏈遊戲的起源與發展
全鏈遊戲的歷史可以追溯到 10 年之前,Mikhail Sindeyev 分叉 Namecoin 並構建了世界上第一個區塊鏈遊戲《Huntercoin》。《Huntercoin》於 2013 年作為一個實驗原型開始,並迅速發展了一批線上狂熱追隨者,得到了許多著名的 bitcointalk.org 成員的支援。
憑藉科技愛好者對影像遊戲的熱愛,最受歡迎的 Huntercoin 帖子獲得了超過 380,000 次的瀏覽。然而遺憾的是 Mikhail Sindeyev 在 2014 年 2 月中風去世了,《Huntercoin》的開發也陷入困境,代幣 HUC 在 2015 年幾乎歸零,雖然全鏈遊戲的第一次嘗試並沒有成功,但慶幸的是全鏈遊戲的故事仍在繼續。
2020 年 Gubsheep(Brian Gu)、Alan Luo、SCOTT SUNARTO ,受到小說《三體:黑暗森林》的啟發,開發了一款同名 MMORTS 太空征服遊戲《Dark Forest》。遊戲建立在以太坊之上,並將所有規則、邏輯寫入到智慧合約,即每一步動作都是一筆鏈上交易的全鏈遊戲。遊戲內容的核心部分則利用了 ZK-Snarks(零知識證明)技術去製作戰爭迷霧以復現三體小說中黑暗森林法則的定義(一旦某個宇宙文明被發現,就必然遭到其他宇宙文明的打擊)。
延伸閱讀:全鏈遊戲掀市場熱潮,元老項目「Dark Forest」能否重獲新生?
比如當玩家想要採取行動時,受到黑暗森林的法則影響,玩家不能暴露自己的座標,卻要從 A 星球移動到 B 星球,他們需要提交 A 跟 B 的座標以證明這是有效的,但以太坊的區塊資訊是完全透明的,《Dark Forest》則通過以下方式去實現資訊隱藏。
玩家選擇要離開的星球和目的地星球,這兩個星球的位置是玩家的私有資訊。計算要離開的星球和目的地星球的位置的 hash 值,然後將這兩個 hash 值提交到區塊鏈。在這個階段,玩家會提交一個承諾(Commit 階段),由於hash函式的單向性,這些提交的 hash 值不能用來確定玩家的實際行星位置。而下一個階段是驗證(Reveal 階段),在此階段,玩家生成並提交一個零知識證明,證明他們的行動是有效的。這個證明可以被任何人驗證,但不會透露任何關於玩家星球位置的資訊。
如此,第一個在資訊透明的以太坊上做到隱藏資訊的全鏈遊戲就誕生了,這個瘋狂又極富想法的實驗,很快在整個 Crypto 圈子裡引起了轟動,Vtalik(以太坊創辦人)甚至在 Twitter 直接轉發並稱讚了這個遊戲。
延伸閱讀:鏈遊研究:Dark Forest競爭優勢從何而來?
但《Dark Forest》首發後隨著超過 10000 名玩家的湧入,困境也開始顯現,以太坊的效能不足以支撐這種複雜應用的執行。遊戲上線當天直接堵爆了整個區塊鏈,數兆的 Gas 被花費。並且由於遊戲是基於 DeFi 應用的庫和架構設計的,後期再進行優化也只是減緩痛苦並不解決問題。
受到這場實驗對 ZK-Snarks 前景的啟發以及對全鏈遊戲困境的思考,遊戲創辦人 Brian Gu 建立了 0xPARC 作為 ZK-Snarks 的研究院,以推動零知識證明的發展,而 0xPARC 的另外一個分支 Lattice 則負責設計維護全鏈遊戲引擎 MUD。另一位創辦人 SCOTT SUNARTO 則開始研發全鏈遊戲執行專用的分片 Rollup 框架 ——World Engine。
零知識證明在今天已經開始了廣泛運用,並被各位所熟知,我們接下來討論的主要是後兩者,MUD 引擎與 World Engine,即創造與執行。但在此之前我們需要了解驅動者(0xPARC)對全鏈遊戲的定義與新的認知方式。
自主世界(Autonomous Worlds)
基於 0xPARC 加密遊戲論文合集《Autonomous Worlds》中的觀點,全鏈遊戲至少需要遵循五個標準:
1. 資料來源於區塊鏈:區塊鏈不僅僅是資料的輔助儲存,也不僅僅是儲存在專有伺服器中資料的「映象」。所有有意義的資料都可以在區塊鏈上訪問,而不僅僅是資產所有權等資料。這樣,遊戲就能充分利用可程式設計區塊鏈的優勢 —— 透明的資料儲存,可無許可權互操作;
2. 邏輯和規則通過智慧合約實現:例如,遊戲中的戰鬥,而不僅僅是所有權,都是在鏈上進行的;
3. 遊戲的開發遵循開放生態原則:遊戲合約和可訪問的遊戲客戶端都是開源的。第三方開發者可以通過外掛、第三方客戶端、互操作智慧合約,實現完全重新部署,訂製甚至分叉自己的遊戲體驗。這反過來又使遊戲開發者能夠利用整個 (激勵一致) 社群的創造性產出;
4. 遊戲永久存於鏈上:這一點與上述三點密切相關,因為檢驗一款遊戲是否是加密原生遊戲的試金石是:如果明天核心開發者提供的客戶端消失了,遊戲還能玩嗎?答案往往是肯定的,如果 (也只有當) 遊戲資料儲存是無許可權的,如果遊戲邏輯可以無許可權執行,如果社群可以與核心智慧合約互動而不依賴於核心團隊提供的介面;
5. 遊戲可與我們認為有價值的事物互通:區塊鏈為價值概念本身提供了一個本地應用程式介面,數位資產預設情況下可與我們關心的其他資產互操作。這既反應了遊戲的深度和意義,也有助於提升遊戲的深度和意義,並將遊戲世界與「真實」世界聯絡起來。
基於這個標準下構建的全鏈遊戲也可將其看為基於區塊鏈為底層的世界,或者說 Autonomous Worlds(自主世界)。
那麼何謂世界?世界並非只能指代現實世界,世界的載體可以是小說、電影、遊戲、詩歌甚至法律體系。但在這些世界裡都是由中心(作者、開發者或者群體)制定框架與規則再傳達給我們。這些世界裡自主性的程度也是不一樣的,比如開放世界遊戲裡非常知名的《Minecraft》(《我的世界》),玩家擁有極高的自主性,通過對不同方塊的搭建,以及規則修改,玩家可以創造只屬於他們的世界。而自主性較低的世界可能是小說世界,比如《Harry・Potter》,我們看到的這個魔法世界都是基於 JK 羅琳所創造的規則和框架。
如果把區塊鏈作為世界的基底,區塊鏈毫不含糊地儲存了其狀態下所有節點實體的集合。此外,它們還用電腦程式碼正式定義了引入規則。擁有區塊鏈底層的世界可以讓其居民參與共識。它們執行一個電腦網路,在每次引入新的實體時達成一致。
從世界的角度來看,有兩個區塊鏈概念需要定義:
1. 區塊鏈狀態根:狀態根是對世界中所有實體的壓縮。有了狀態根,人們就可以確定任何實體是否是虛擬的,相信一個世界的狀態根就等於相信世界本身。0x411842e02a67ab1ab6d3722949263f06bca-20c62e03a99812bcd15dce6daf26e 是 2022 年 7 月 21 日 07:30:10PM UTC 時的以太坊 —— 一個擁有區塊鏈底層的世界的狀態根。在計算這個狀態根時,以太坊世界的所有實體都被考慮在內。它代表了該世界在該特定時間內的全部內容;
2. 區塊鏈狀態轉換函式:每個區塊鏈都定義了一個狀態轉換函式。它可以被視為一個明確的引入規則。它定義了「世界」的前一個狀態 —— 虛擬實體的集合 —— 如何通過人和機器的輸入引入新的虛擬實體。就比特幣而言,狀態轉換函式定義了餘額如何在地址之間消費和轉移。
所以把全鏈遊戲看作以區塊鏈為底層的世界,則這個去中心化世界擁有無限大的自主性,也可以稱之為自主世界。
延伸閱讀:Paradigm最新論文:全鏈遊戲的開放性有多扯?
創造的困境
在早期探索全鏈遊戲的新設計過程中,開發者多次受到傳統 DApp 架構和用於構建 DeFi 應用的庫的侷限性的影響。《Dark Forest》和其他早期的全鏈遊戲構建在當時不得不遵循用於構建 DeFi 應用的架構和庫,這些架構成為了當時構建全鏈遊戲的預設選擇。
早期在創造全鏈遊戲方面的模式可總結為四點:
1. 當不同合約觸及相同狀態:多個智慧合約可能會修改同一個資料或狀態,這可能會導致資料不一致或其他問題。有時使用 Diamond Pattern 去解決(鑽石模式是一種解決 Solidity 智慧合約中多重繼承問題的方法);
2. 編寫多種資料結構:每種實體(如遊戲中的士兵、行星等)都有其自己的資料結構和型別;
3. 編寫 Getters 函式:此為資料結構返回批量元素的函式,用於從鏈上獲取初始狀態或資料。例如,getPlanets () 函式可能會返回所有行星的列表;
4. 事件:每個資料結構都包含一個事件,這是智慧合約中的特定功能,允許應用在新塊被新增到鏈上時同步或更新其狀態。例如,當一個新的行星被建立時,可能會觸發一個事件,應用會監聽這個事件並更新其顯示的行星列表。
通過這種模式構建全鏈遊戲非常痛苦,雖然可以不斷進行優化以減緩痛苦,但我們都明白這種構建方式還是與使用真正的通用引擎構建相差甚遠。
世界的創造者 —— MUD 引擎
MUD 引擎的誕生來自於開放者們對過去以及現有問題的思考,MUD 是一個構建複雜應用的以太坊應用程式的框架。MUD 提供了一些組織資料和邏輯的約定,並抽象了低階複雜性,使開發者可以專注於應用程式的功能。它標準化了鏈上資料的儲存方式。有了這種標準資料模型,MUD 可以提供所有網路程式碼來同步合約和客戶端狀態。
MUD 最新版本目前配備了五個元件:
- Store:一個鏈上資料庫;
- World:一個入口點框架,帶來標準化的訪問控制、升級和模組;
- tools:基於 Foundry 的超快速開發工具;
- 客戶端資料儲存:可以神奇地反應鏈上狀態;
- MODE:可以使用 SQL 查詢的 Postgres 資料庫。
EVM 完全相容性,極高的自由度
MUD 的通用性並不止於以太坊主網,只要語言支援,MUD 可以無縫地運作在任何 EVM 相容的鏈上,無論是 Polygon、Arbitrum、Optimism 還是 Gnosis Chain。
此外,儘管 MUD 在 Autonomous Worlds(自主世界)和鏈上游戲社群中是首選框架,但它的應用遠不止於此。與此同時,MUD 提供了極大的自由度,不強迫開發者受限於特定的資料模型。簡而言之,任何可以通過 Solidity 反射和陣列實現的功能,都可以輕鬆地在 MUD 中完成。而在資料可用性上,無論是在主網還是 Rollups 上部署的 MUD 應用,它們都可以與 ENS 和 Uniswap 等傳統以太坊應用程式相媲美。
核心思想
MUD 作為一套為鏈上複雜應用設計的高度協同的庫和工具,其核心思想圍繞三點:
1. 所有鏈上狀態均儲存在 MUD 鏈上資料庫 Store 中:Store 是一個嵌入式 EVM 資料庫,類似於 SQLite 資料庫,它具有表、列和行的概念。使用 Store 可以更加結構化地管理資料,並且不需要依賴 Solidity 編譯器提供的儲存方法。並且,它支援在執行時建立表,並允許註冊掛鉤以自動建立索引檢視,從而帶來更多靈活性;
2. 邏輯是無狀態的,並且通過自定義許可權跨不同合約進行分割槽:「World」充當一個入口點,協調不同的智慧合約對「Store」的訪問。當一個「World」被部署時,它會隨即建立一個「Store」,每個在「Store」中的表都是在一個特定的名稱空間下被註冊的。當功能(比如地址之間轉帳的邏輯)被新增到「World」時也在名稱空間下註冊,並被稱為「系統」。
這些「系統」實際上是智慧合約,但與傳統的智慧合約不同的是,它們是無狀態的,不直接持有資料。而是利用「World Store」進行資料的讀取和寫入。由於這種設計,只要部署在同一條鏈上,這些「系統」可以在不同的「World」之間重複使用;
3. 不需要索引器或子圖,前端也可保持同步:當使用 Store(以及擴充套件的 World)時,鏈上資料自動內省(Introspection,自我檢查),任何改變都通過標準事件進行廣播。通過 「MODE」節點,即時地將鏈上狀態轉換為 SQL 資料庫,從而保持最新狀態(毫秒級延遲)。此外,MUD 提供了一系列查詢工具,如 MUD QDSL 和 GraphQL,使得前端同步變得更加簡化。對於 React 開發者,MUD 還提供了專門的 Hooks,允許自動繫結和更新元件狀態。
突破枷鎖
通過三點核心思想我們再以過去的困境為例,看看 MUD 是如何打破複雜應用的枷鎖的。
1. 當不同合約觸及相同狀態:通過使用「World」和「Store」結構來集中管理鏈上狀態。所有的智慧合約(在 MUD 中稱為「系統」)都通過「World」來訪問和修改「Store」中的資料。這確保了所有的狀態修改都經過一個集中的入口點,從而減少了資料不一致或衝突的風險。通過名稱空間和路徑,MUD 提供了對資料的細粒度訪問控制。不同「系統」可以有不同的許可權,從而確保只有授權的「系統」可以修改特定的資料或狀態;
2. 資料結構:與傳統的 Solidity 儲存方法不同,MUD 的「Store」提供了類似於 SQLite 的表、列和行的概念,從而可以更加結構化地儲存和管理資料。每種實體(如遊戲中的士兵、行星等)都可以有其自己的表,每個表可以有多個列來儲存該實體的不同屬性;
3. Getters 函式:由於 MUD 的「Store」提供了結構化的資料儲存,獲取資料變得更加簡單和直觀。開發者可以使用 SQL-like 的查詢語言來獲取資料,而不需要編寫專門的 getters 函式。例如,要獲取所有的行星,開發者可以簡單地查詢行星表,而不需要編寫一個 getPlanets () 函式;
4. 事件:MUD 提供了自動內省功能,這意味著任何資料更改都會自動被系統識別並觸發相應的事件。應用可以監聽這些事件來同步或更新其狀態,而不需要為每種資料結構手動定義事件。
以上是對 MUD 基本構建塊,元件的部分使用方式說明,MUD 還可以構建更復雜的場景與應用。
執行世界,World Engine
全鏈遊戲的執行對於以太坊來說一直是個巨大的挑戰,隨著 Rollups 的快速發展,以及坎昆升級的臨近,成本大幅下降,速度大幅提高的將來。全鏈遊戲已經蓄勢待發,但目前的主流 Rollups 基本是為交易設計的,並沒有真正為全鏈遊戲所量身打造的 Rollup。
而 Argus 旗下的核心產品 World Engine 則是真正為了全鏈遊戲所打造的分片架構 Rollup,由於目前還沒有公開測試,我們將從專案的部落格與演講中分析 World Engine。
全鏈遊戲需要怎樣的 Rollup
- 高吞吐量與高 TPS:更快的交易處理,更低的延遲,更好的可擴充套件性;
- 擴充套件讀寫:大多數 Layer2 為了高併發處理,都設計成進行大量寫入,但遊戲需要讀取以獲得玩家位置,所以讀與寫同樣重要;
- 水平可擴充套件的鏈:水平可擴充套件性是指通過新增更多的節點和資源來增加系統的處理能力,以適應不斷增長的需求。這樣可以避免 Noisy Neighbor 問題(一個應用或實體的活動可能對其他應用或實體產生負面影響,導致資源爭用和效能問題);
- 靈活與訂製:靈活性與可訂製性,方便修改狀態機,使其為遊戲設計。這包括有一個遊戲迴圈,使其自我執行等等;
- Tick rate:Ticks 是遊戲時間中的原子單位,遊戲想要足夠低的延遲需要更高的 Tick rate 或者每秒更多的區塊以降低延遲。
分片架構
為了實現上述目標,團隊回顧了 21 世紀初和 20 世紀 90 年代末並受到啟發,像 MMOs 這樣的線上遊戲剛剛興起的情況。早期的線上遊戲在伺服器和網路技術相對有限的情況下,需要找到一種方式來支援大量玩家的互動。「分片」就是其中一種解決方案,它的核心思想是將玩家分佈到不同的伺服器或「分片」上,每個分片可以獨立地託管一部分玩家、遊戲地圖和資料。
例如,Ultima Online 是一個早期的 MMORPG,它在伺服器上實現了分片概念。遊戲中的不同分片代表了不同的虛擬世界,每個分片可以容納一定數量的玩家。這樣做的好處包括:
- 擴充套件性:通過將玩家分佈到不同的分片,遊戲可以更輕鬆地擴充套件以適應更多玩家的加入;
- 減少負載:分片可以減少單個伺服器上的玩家數量和資料量,從而降低伺服器的負載,提高效能;
- 避免擁堵:分片可以減少玩家在同一區域的擁堵情況,提供更流暢的遊戲體驗;
- 地理位置優化:通過將玩家分配到就近的分片,可以減少網路延遲,提高遊戲響應速度。
那麼如何把這個概念帶入 World Engine?與過去的許多分片排序器不同,「World Engine」的設計更適合特定的需求。它的優化方向包括吞吐量和執行時間。為了確保高效的「Tick rate」(即每秒更新頻率)和區塊時間,它預設是同步的。設計的目標是確保交易被迅速處理,以保持高效的遊戲體驗或系統性能。在排序方式上採用的是部分排序的方式,而不是強制要求對所有交易進行總排序。這意味著並不要求每個交易都必須在所有其他交易之後發生。這可以減少排序的負擔,從而更好地滿足高吞吐量和快速區塊時間的需求。
這裡有兩個關鍵組成部分,EVM Base Shard(EVM 分片)與一個 Game Shard(遊戲分片),EVM 分片就是存粹的 EVM 鏈。而真正的祕密武器是遊戲分片,它本質上是一個設計成高效能遊戲伺服器的迷你區塊鏈。World Engine 具有一個 bring-your-own-implementation 介面,這樣我們可以根據我們的喜好訂製這個分片。構建的分片,注入到基礎分片中。只需要實現一套標準的介面,就像我們熟悉的 Cosmos,Cosmos 有一個 IBC 介面。我們基本上可以將這個整合成一個類似的規範,將自己的分片帶到 World Engine 堆疊中。
Cardinal 是 World Engine 的第一個遊戲分片實現。它使用 Entity-Component-System (ECS) 遊戲架構,一個具有面向資料的架構。這允許並行化遊戲,並提高遊戲計算的吞吐量。它有一個可配置的「Tick rate」,最高可達每秒 20 次 Tick。對於這裡的區塊鏈來說,那就是每秒 20 個區塊。另外它還是自我索引的,無需外部索引器。
並且分片還可以通過地理定位,以減少延遲。比如,遊戲可能有在美國的排序器,然後亞洲玩家必須等待 300 毫秒的延遲,才能讓 transaction 到達排序器。這在遊戲中是一個巨大的問題,因為 300 毫秒是很長的時間。如果試圖玩一個有 200 毫秒延遲的 FPS 遊戲,那基本上就是,在玩 PPT 了。
結語:對全鏈遊戲的思考
全鏈遊戲一直是亞洲加密圈內較為冷門的方向,但隨著 Starknet 的遊戲引擎 Dojo 的推出,以及基於 OP Stack 概念驗證型滴答鏈的開發演示,關於全鏈遊戲的討論逐漸開始火熱。而本文討論的範圍是《Dark Forest》所衍生出的生態,也是目前全鏈遊戲最強大的生態。
通過對其歷史和技術上的探究,我們可以發現 Rollup 以及 DApp 還具備極高的上限,以更遠大的視角看,隨著基建設施的提升,不僅僅是遊戲而是各種複雜想法的構建與實現都會通過 MUD 進行,並在更複雜的 Rollup 方案上融合互動,區塊鏈的新正規化也許會從全鏈遊戲開始。
關於全鏈遊戲還有許多可擴充套件的內容,比如從 Loot 衍生出的全鏈遊戲生態推動了 Starknet 發展,又或者是狀態同步的實現,ESC 架構的運用。我已將相關閱讀連結放在下表,感興趣的朋友可以閱讀了解。
_
參考文獻
1. 原文: Modular Summit Day 1 (Galois Stage) 譯文: World Engine:專為全鏈遊戲設計的分片 Rollup 框架
2.Lattice History
3. MUD 開發文件
4.AUTONOMOUS WORLDS
📍相關報導📍
LK Venture 研報:解析全鏈遊戲 (Full On-chain Game) 是什麼?