BOLT:Solana生態的ECS全鏈遊戲引擎

視訊連結:

演講者:Andrea、Gabriele,Magicblock聯合創始人

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

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

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

01.為什麼需要全鏈遊戲

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

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

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

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

02.現有的解決方案

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

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

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

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

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

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

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

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

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

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

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

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

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

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

04.BOLT引擎ECS編程實戰

(譯者注:此部分建議開發者觀看原視頻,非開發者可跳過此部分)

現在,我將切換到我的 IDE,並向你展示使用 BOLT 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 位置。

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

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

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

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

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

06.臨時匯總

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

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

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

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

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

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

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

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

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

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

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

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

查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 留言
  • 轉發
  • 分享
留言
0/400
暫無留言
交易,隨時隨地
qrCode
掃碼下載 Gate App
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)