BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

影片連結:https://www.youtube.com/watch?v=LQOpP8-EBkg

講者:Andrea、Gabriele,Magicblock共同創辦人

演講標題:A FRAMEWORK FOR ON-CHAIN GAMING

譯者序:“BOLT是一款由Magicblock團隊開發的針對Solana生態的全鏈遊戲引擎。本文整理自Magicblock兩位創始人在Breakpoint 2023活動上的演講。”

大家好,這是萬聖節前的最後一次演講,希望演講的內容會讓大家感興趣。我叫Andrea,我身邊是我的共同創辦人Gabriele。今天,我們將介紹一個新的全鏈遊戲框架(引擎)。

01.為什麼需要全鏈遊戲

我將從最基礎的開始談起,那就是為什麼要費心建立全鏈上游戲,並將狀態和邏輯都放在鏈上,還要處理隨之而來的所有複雜性。原因很簡單,就是要獲得傳統遊戲基礎架構所沒有的特性。

BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

第一個特性是無許可的可組合性(Permissionless mods)。這意味著所有的玩家和開發人員都可以從高級客戶端開始自訂遊戲中的任何組件,包括引入插件或mod。甚至是遊戲的底層邏輯,都可以透過智慧合約來擴展遊戲的玩法。本質上,這是一種新的模式,在遊戲中,每個遊戲預設都是一個新的平台,無論你的團隊多麼小,你都可以成為內容巨頭(Content Powerhouse)。

第二個特性是持久性(Persistency)。自主世界和這些虛擬體驗可以永遠存在的特性引起了很大的反響。因為沒有伺服器可以被審查或關閉,這些體驗實際上引入了一個全新的意義。遊戲成為了玩家玩耍、參與社交、進行全球商務的平台,比傳統遊戲平台更具普遍性。

最後一個特性是開放經濟(Open economies)。遊戲可以利用區塊鏈開放的全球無摩擦支付系統,尤其是在我們生態系統中的小額支付,並重複使用鏈上現有的基礎設施,如DEX或NFT交易市場。

02.現有的解決方案

全鏈遊戲目前的問題是開發體驗非常糟糕,我們觀察市場上的解決方案,發現有一些開發框架試圖簡化開發人員的體驗。

BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

其中一些非常有趣,他們試圖在可證明的會話(provable session)上進行迭代,你可以在鏈下進行計算並在鏈上證明計算的完整性。或引入更適合區塊鏈遊戲引擎的基於事件驅動的運行時(runtime),而不是基於循環驅動(Loop based)的運行時(runtime)。

但所有這些框架都需要在效能和可組合性之間進行權衡,以實現更高的效能和更高的TPS。通常,你會透過建立隔離,或引入具有分片的不同runtime。

BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

但我們對這種權衡並不滿意。我們問自己,如果有一個框架可以支援我們所需的TPS,那麼會怎麼樣?在你的遊戲取得成功時,即使有數百萬玩家,你也不必犧牲他們的使用者體驗,因為不會發生gas war。而該框架不需要分片進而導致碎片化,因此你可以使用可證明的遊戲會話(provable game session ),甚至可以模擬時間的流逝,而無需支付gas費用。完全無需將系統碎片化或使用Layer 3。

03.Solana上的全鏈遊戲開發引擎:BOLT

BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

因此,我們非常興奮地介紹BOLT,一個基於SVM的高效能、可組合的全鏈遊戲開發框架。

BOLT 是模組化與可組合的,他可以使用Solana 上所有現有的基礎架構。他與我們在鏈上的現有設施如鏈上身分、gasless API、session key,以及現有的Anchor開發框架和Solana 上的所有現有的程式一起使用。兩者都可以實現更高數量級規模的擴容,這要歸功於Ephemeral Rollup,這些rollup是隨用戶需求打開和關閉的遊戲會話(game session),並根據需求進行擴展。

BOLT 快如閃電,我們可以達到與傳統遊戲引擎相同的性能水平,然後再使用這些專用的runtime來加速某些操作。

BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

這是BOLT 框架的全景展示。他顯然是為Solana 構建的,但他可以在任何兼容SVM 的平台上使用,例如兼容SVM的Layer 2上。 BOLT 有兩個主要目標,一是做到可組合性,二是擴容。

ECS(Entity Component System)系統是我們簡化鏈上元件所使用的方法之一。另一個是Ephemeral Rollup,剛才已經簡單提到過,我會在一會兒深入探討這兩種技術。

BOLT 已與最常用的傳統遊戲引擎(如Unity)集成,這些引擎通常作為遊戲的前端。當然也包括其他開源並深受喜愛的遊戲引擎,如Godot 和Phaser。我們甚至正在與更新的遊戲客戶端turbo 進行合作,該客戶專注於改善獨立開發者的體驗,並促進快速的遊戲創作。將來的合作方可能會更多。

BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

我將從這裡開始,繼續解釋為什麼我們需要一個ECS 實體組件系統。答案很簡單,因為他允許最大程度地可組合性,這意味著我們可以創建和重新使用現成的組件。

如其名稱所示,ECS 由三個主要元素建構:實體(entity),他們本質上只是註冊到獨立的遊戲世界(World Instance)的識別碼;組件(component),他定義了資料結構,所以基本上是與實體關聯的資料;最後是系統(system),他是操作附在實體上的元件的邏輯。

這種架構的優點在於所有系統和元件都是可重複使用的。他們可以發佈在公共註冊表中,開發人員可以輕鬆地貢獻、建構、發現和整合任何類型的元件,因此你無需再從頭開始編寫任何程式碼,而是可以重複使用所有現有的元件,並最終為其做出貢獻。例如,我們可以有一個網格的資料結構(例如迷宮或戰場),一個移動系統,或用於戰爭迷霧的零知識證明系統。

04.BOLT引擎ECS編程實戰

現在,我將切換到我的IDE,並向你展示使用BOLT ECS 引擎的簡單遊戲範例。

BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

我們將定義幾個實體、一個位置元件和兩個系統,他們會操作並更改此位置元件的資料。因此,第一個入口點是與World Program互動。 World Program是BOLT 框架的一部分,並公開了一些提取,讓你可以註冊新的World Instance。

你可以將實體新增到你的World Instance,並且可以向​​你剛剛定義的實體註冊元件,而元件本質上是由元件程式定義的。其中元件程式包含兩個指令,第一個指令是初始化,建立並分配空間來儲存將在你的元件中使用的行資料。在此簡單範例中,我們正在定義一個位置元件,如果我們查看初始化指令的上下文,我們可以看到我們有元件數據,而元件資料只是定義了一個具有XYZ 座標的結構,該座標可以儲存例如玩家位置。

現在,第二個指令可能最有趣,他是一個允許我們執行任何邏輯的入口點。他將作為輸入接收我們的元件和任意系統,並透過跨程式設計位置執行內部定義在系統中的邏輯。現在,如果你查看第15 行,我們有我們的CPI(Common Programming Interface,通用程式介面) 調用,他將透過CPI 執行內部定義的邏輯。他將執行系統定義的所有計算,然後返回我們的位置,組件程式將檢索並將其設定回我們的資料中。

現在,讓我們嘗試查看我們的apply 函數的上下文,在這裡我們可以看到我們基本上只有兩個帳戶。第一個是包含我們元件資料的帳戶,第二個是系統程式。因此,系統程式現在是一個接口,而不是單一程式。因此,任何遵守我們的BOLT 系統介面的程序都可以透過此應用執行。

05.ECS系統的意義

本質上,這改變了你設計遊戲邏輯的方式,並顛覆了傳統的流程。之前,如果你想在程式中創建或封裝一些邏輯,通常會先添加功能,每個功能都是程式中的指令,然後最終在某個時候,你會鎖定你開發的遊戲程式。

然而透過ECS模式,我們反而可以從一開始就擁有一個不可更改的程序,然後透過這種代理機制,我們可以添加由內部構建或任何人構建的系統,從而擁有一個可以永遠運行、可擴展且任何人都可以真正改變遊戲邏輯的遊戲。

他們可以部署新的系統,這些系統將對那些元件進行操作。現在,介面還可以允許你進行一些檢查,因此我們可以設計出一種遊戲機制,使得新添加系統是無需許可的,這些系統都可以修改組件資料。

或者我們可以設定一個介面來檢查系統是否允許在元件上執行。例如,你可以設計一個治理系統,如果某人正在提出一個新的邏輯,並且該邏輯得到批准,那麼所有玩家都可以在遊戲中使用該邏輯。

這甚至可以導致遊戲的世界(World合約)出現分叉。在一個世界中,你擁有飛行系統。而在另一個世界,如果該系統沒有得到批准,則可以擁有不同的規則,每個人仍然能夠為各自版本的世界做出貢獻。

現在讓我們來研究如何建立一個可以修改該元件的系統。系統本質上只是Solana 上的一個程序,該程序定義了一個執行指令,而執行指令是我們在CPI(通用編程接口)中從組件程序中調用的那個指令。在這裡,他只封裝了一個非常簡單的邏輯,其中他接收輸入方向,計算增量,然後更改組件的X 和Y 位置。

因此,讓我們來看看另一個系統,即使在我們發布遊戲後,也可能由其他人部署。這是另一個實作execute 的系統的一個例子。在這裡,Z 位置增加了1,所以有人試圖添加一個側翼系統,該系統可能是一個接口,在你的遊戲上有一個不同的層。

所以,現在的想法是,所有這些系統、所有這些組件都是真正可組合的,遊戲的用戶不再是簡單的用戶,遊戲已經成為一個開放的、可擴展的和持久的平台。因此,我將嘗試執行我在此範例中準備的單元測試,並將使用BOLT CLI,他構建在Anchor(一個Solana 的智能合約框架)之上,因此如果你已經熟悉Solana,則無需學習任何新知識。

現在,你可以在Solana 上開發程序,只需開發程序、測試程序,所以在這裡我運行bolt build 和bolt test,這裡正在部署我們的程序,然後執行我在這裡準備的typescript 測試。

所以,這裡測試正在發送交易以初始化一個新世界。我們正在註冊幾個實體,我們正在將位置元件附加到其中一些實體,然後也許有趣的部分是在這裡執行一些系統。所以,在這裡我們正在呼叫apply 函數,然後我們正在使用其中一個系統。所以,這裡只是一個預設系統。

BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

在這裡,我們正在調用簡單的移動,然後我們在這裡有飛行移動。嗯,現在,如果我們查看測試的日誌,在第一個交易中,這裡我們使用具有向上方向的移動系統,將Y 位置增加1。在第二個交易中,我們使用相同的系統向右移動,然後最後,我們執行飛行系統,該系統正在執行相反的操作,將我們的Z 位置增加1。這只是一個簡單的例子,但他提供了一個非常強大的機制,允許任何人開發、擴展並可能使你的遊戲變得有趣。

06.Ephemeral Rollup

BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

現在我們將回到幻燈片,我將描述BOLT框架的第二個有趣方面,他是我們的可擴展性解決方案,我們稱之為Ephemeral Rollup。

人們一般覺得Solana 已經非常快速且便宜,他目前每400 毫秒產生一個區塊,可以處理數千筆交易,因此他實際上已經適合建立全鏈遊戲。但是,如果你有一個多人遊戲的舊邏輯鏈,則位置更新將太慢。

因此,我們可以建造一個短暫的加速層,他與Solana 的run time完全相容。使用的時間是可選的,他可以作為對特定操作的真正加速,而大部分邏輯仍然在主鏈執行,因此他依賴Solana 上所有狀態都儲存在帳戶中的特徵。

通常,你將擁有定義邏輯的遊戲程序,然後所有狀態都會儲存在此帳戶中,因此我們可以將其中一些帳戶委派給使用BOLT 引擎的這個臨時層。

在這個例子中,有兩個授權的帳戶儲存玩家的位置,並且提供者正在積極監聽委派請求和調配請求。他將根據需要啟動一個新的run time,該run time速度很快,可以進行自定義,可以具有無gas 交易或滴答機制,並允許我們真正進行低於50 毫秒的交易,並可能通過擁有多個專門的運行時來擴充。

現在,另一個有趣的部分是,所有這些複雜性都可以從使用者身上抽象化。我們有一個RPC 路由器,他本質上類似於傳統RPC 路由器。 RPC 用戶端可以直接與RPC 交互,傳送交易。因為在Solana 上,所有交易都會預先聲明所有可變和可讀帳戶,RPC 路由器基本上可以將交易、資料查詢和檢索路由到正確的層。

然後在某個時候,Ephemeral層(如其名稱所示)將關閉,所有狀態都將在Solana 基礎層進行結算,這是排序器的職責,他會追蹤所有帳戶。

BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

另一種看待這種機制的方法是,我們有兩層,他們並行執行交易。我們有委託帳戶(delegated account),可以不佔用主鏈吞吐量並以更低的延遲進行更新。然後我們還有其他帳戶,他們沒有被委託,並且是在主鏈中執行的。

現在,一件非常有趣的事情是,程式、工具、框架和基礎設施都在主鏈中。你不需要在Rollup 中部署你的程序,雖然這在許多其他架構中很常見。一切都處於同一層,一切都是可組合的,正如我們所提到的,這種專門的runtime也可以擴展,並且可以真正地進行自訂。

BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

現在,這解鎖了一個全新的遊戲類別,他建立在區塊鏈上,並且是低延遲的。就像你使用傳統的多人遊戲伺服器一樣,但仍然能夠與在Layer 1 生態系統上所有可用內容進行組合。

BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

你可以存取現有的流動性,你可以透過協議發送訊息,鑄造NFT,使用帳戶抽象、會話金鑰、排行榜和統一的生態系統,每個人都在豐富同一個生態。

BOLT:模組化基礎設施,Solana生態的ECS全鏈遊戲引擎

非常感謝你的聆聽。你可以使用QR 碼註冊我們的框架的早期訪問,並請查看存儲庫。你已經可以找到健全的文檔和白皮書,其中詳細描述了我們剛剛介紹的框架。非常感謝。

Total
0
Shares
Related Posts