细思极恐!AI进化出了自私
Solana 链上开发框架 BOLT
作者: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)