复制成功

分享至

主页 > 数字货币 >

Solana 链上开发框架 BOLT

2024.04.18

作者:Magicblock;来源:MetaCat

BOLT v0.1 已于 2024 年 3 月 5 日上线。BOLT 是一个链上开发框架,它简化了无需许可、可组合性且可以永久存在于区块链上的游戏的开发。BOLT 的设计包括一个与 SVM 兼容的加速层,使全链上游戏的性能与传统多人游戏服务器相当,同时又不影响 Solana 全局状态的可组合性。在当前这个早期版本中,我们将介绍 BOLT CLI 和实体组件系统 (ECS),介绍最近的更新并展示如何在 Solana 上开发简单的链上游戏。

ECS 模式

虽然 Bolt 不仅仅是一个实体组件系统 (ECS) 框架,但我们鼓励使用这种强大的设计模式来增强可组合性。ECS 是一种组织代码和数据的方式,以实现模块化和可扩展的游戏,这是我们在全链上构建时寻求的关键功能。顾名思义,ECS 中有:

Entities(实体) 是代表游戏世界对象的实体。它们是唯一标识符,不保存任何数据或行为,而只是充当容器

Components (组件)是可以“附加”到实体的基础数据结构

System(系统)通过作用于持有组件的,实体来执行游戏逻辑或行为

这种关注点分离(separation of concerns)实现了高度灵活的模块化架构。你可以下面的链接中查看 ECS 模式的所有优点?

https://github.com/SanderMertens/ecs-faq?tab=readme-ov-file#what-is-ecs.

BOLT CLI

BOLT CLI 是 Anchor 框架的扩展。它包括流行的 Solana 开发框架的所有功能,以及用于创建世界实例( world instances)、组件(components)和系统(systems)的功能超集。

安装 BOLT CLI

npm install @magicblock-labs/bolt-cli

你可以通过以下方式验证 BOLT CLI 的安装:

bolt -h

初始化基于 BOLT 的项目请运行:

bolt init <new-workspace-name>

组件(Components)

文件夹中的示例 programs-ecs/components 定义了一个包含 x、y、z 坐标的 Position 组件。请记住,组件是简单的数据结构,其中包含与实体的特定属性相关的数据。它们不包含任何逻辑或方法。

use bolt_lang::*;declare_id!("Fn1JzzEdyb55fsyduWS94mYHizGhJZuhvjX6DVvrmGbQ");#[component]#[derive(Copy)]pub struct Position {    pub x: i64,    pub y: i64,    pub z: i64,}

# [component] 宏负责处理所有 Solana 底层特定行为。除了定义数据结构之外,你不必了解帐户如何工作、如何分配字节或任何其他内容。

组件本身就是部署在链上的程序。

declare_id!("Fn1JzzEdyb55fsyduWS94mYHizGhJZuhvjX6DVvrmGbQ");

id 定义了 Position 上面组件的唯一地址。

系统(Systems)

系统(Systems)包含操作组件(Components)的逻辑。系统通常将在具有一组特定组件的所有实体上运行。该 system_movement 示例封装了更新组件的逻辑 Position

use bolt_lang::*;use component_position::Position;declare_id!("FSa6qoJXFBR3a7ThQkTAMrC15p6NkchPEjBdd4n6dXxA");#[system]pub mod system_movement {    pub fn execute(ctx: Context<Components>, args_p: Vec<u8>) -> Result<Components> {        let position = &mut ctx.accounts.position;        position.x += 1;        Ok(ctx.accounts)    }    // Define the input components    #[system_input]    pub struct Components {        pub position: Position,    }}

每个系统(Systems)都实现一条执行指令,该指令负责将系统逻辑应用到任意数量的组件上。

用  #[system_input]  宏标记的结构,指定系统将接收作为输入的组件包。

执行指令返回修改后的组件,World Program 在检查权限和业务逻辑后,将其更新在数据结构中。

同样,你无需通过定义 CPI、检索 IDL 或其他任何内容来关注底层区块链层。只需定义你希望系统(Systems)运行的组件包(the bundle of components)即可!

将所有东西与 World Program 结合在一起

现在我们已经掌握了组件(components)和系统(Systems)的运行方式,接下来让我们使用 TypeScript SDK 中的 World Program 创建一个游戏实例。World Program 是创建世界实例、实体、附加组件和执行系统的入口点。SDK 提供了与BOLT交互的便捷接口和方法。

安装

要安装 Bolt sdk,请运行以下命令:

npm install @magicblock-labs/bolt-sdk --save-dev

创建一个世界实例(world instance)

                

免责声明:数字资产交易涉及重大风险,本资料不应作为投资决策依据,亦不应被解释为从事投资交易的建议。请确保充分了解所涉及的风险并谨慎投资。OKEx学院仅提供信息参考,不构成任何投资建议,用户一切投资行为与本站无关。

加⼊OKEx全球社群

和全球数字资产投资者交流讨论

扫码加入OKEx社群

相关推荐

industry-frontier