Tác giả: Magicblock; Nguồn: MetaCat
BOLT v0.1 đã được ra mắt vào ngày 5 tháng 3 năm 2024. BOLT là một khung phát triển trên chuỗi giúp đơn giản hóa việc phát triển các trò chơi không được phép, có thể tổng hợp và có thể tồn tại vĩnh viễn trên blockchain. Thiết kế của BOLT bao gồm lớp tăng tốc tương thích với SVM, giúp hiệu suất của trò chơi toàn chuỗi có thể so sánh với các máy chủ trò chơi nhiều người chơi truyền thống mà không ảnh hưởng đến khả năng kết hợp trạng thái toàn cầu của Solana. Trong bản phát hành đầu tiên này, chúng tôi sẽ giới thiệu BOLT CLI và Hệ thống thành phần thực thể (ECS), mô tả các bản cập nhật gần đây và trình bày cách phát triển một trò chơi trực tuyến đơn giản trên Solana.
Chế độ ECS
Mặc dù Bolt không chỉ là một khung Hệ thống Thành phần Thực thể (ECS) Tuy nhiên, chúng tôi khuyến khích sử dụng mẫu thiết kế mạnh mẽ này để nâng cao khả năng kết hợp. ECS là một cách tổ chức mã và dữ liệu để cho phép chơi trò chơi theo mô-đun và có thể mở rộng, những khả năng chính mà chúng tôi tìm kiếm khi xây dựng trên toàn chuỗi. Đúng như tên gọi, có:
Entity (thực thể) là những thực thể đại diện cho thế giới trò chơi các đối tượng. Chúng là các mã định danh duy nhất không chứa bất kỳ dữ liệu hay hành vi nào mà chỉ đóng vai trò là nơi chứa
Các thành phần (comComponent) có thể được "đính kèm" " Đối với cấu trúc dữ liệu cơ bản của thực thể
Hệ thống (hệ thống) thực thi logic hoặc hành vi trò chơi bằng cách tác động lên thực thể nắm giữ thành phần
Việc tách biệt các mối quan tâm này tạo ra một kiến trúc mô-đun có tính linh hoạt cao. Bạn có thể kiểm tra tất cả ưu điểm của chế độ ECS trong liên kết bên dưới?
https://github.com/SanderMertens/ecs-faq?tab=readme- ov-file#what-is-ecs.
BOLT CLI
BOLT CLI là phần mở rộng của khung Anchor. Nó bao gồm tất cả các tính năng của khung phát triển Solana phổ biến, cộng với một bộ siêu chức năng để tạo các phiên bản, thành phần và hệ thống trên thế giới.
Cài đặt BOLT CLI
npm install @magicblock-labs/bolt-cli< br>
Bạn có thể xác minh việc cài đặt BOLT CLI bằng:
bolt -h
Để khởi tạo một dự án dựa trên BOLT, vui lòng chạy:
bolt init <new -workspace- name>
Thành phần
trong thư mục Ví dụ programs-ecs/comComponents
xác định thành phần Vị trí chứa tọa độ x, y và z. Hãy nhớ rằng, Thành phần là cấu trúc dữ liệu đơn giản chứa dữ liệu liên quan đến thuộc tính cụ thể của thực thể. Chúng không chứa bất kỳ logic hoặc phương pháp nào.
use bolt_lang::*;declare_id!("Fn1JzzEdyb55fsyduWS94mYHizGhJZuhvjX6DVvrm GbQ");#[comComponent]#[derive(Copy)]pub struct Position { & nbsp ;pub x: i64, pub y: i64, pub z: i64,
< /pre># [comComponent] Macro xử lý tất cả hành vi cụ thể cơ bản của Solana. Bạn không cần phải hiểu cách tài khoản hoạt động, cách phân bổ byte hoặc bất kỳ điều gì khác ngoài việc xác định cấu trúc dữ liệu.
Bản thân thành phần này là một chương trình được triển khai trên chuỗi.
declare_id!("Fn1JzzEdyb55fsyduWS94mYHizGhJZuhvjX6DVvrmGbQ");
id xác định thành phần duy nhất của Vị trí địa chỉ trên.
Hệ thống
Hệ thống chứa logic cho các thành phần vận hành (Components) . Một hệ thống thường sẽ chạy trên tất cả các thực thể có một bộ thành phần cụ thể. Ví dụ system_movement
tóm tắt logic Vị trí
của việc cập nhật một thành phần.
use bolt_lang::*;use comComponent_position::Position;declare_id!("FSa6qoJXF BR3a7ThQkTAMrC15p6NkchPEjBdd4n6dXxA");#[system]pub mod system_movement { &n bsp;&nb sp ;  ;pub fn execute(ctx: Context<Components>, args_p: Vec<u8>) -> Result<Components> {   ;  ; let position = &mut ctx.accounts.position; position.x += 1; Ok(ctx.accounts) bsp ; #[system_input] pub cấu trúc Thành phần { pub vị trí: Vị trí, }
pre>Mỗi hệ thống (Hệ thống) thực hiện một lệnh thực thi, chịu trách nhiệm áp dụng logic hệ thống cho bất kỳ số lượng thành phần nào.
Cấu trúc được đánh dấu bằng macro #[system_input] đầu vào.
Lệnh thực thi trả về thành phần đã sửa đổi và World Program cập nhật thành phần đó trong cấu trúc dữ liệu sau khi kiểm tra quyền và logic nghiệp vụ.
Một lần nữa, bạn không cần chú ý đến lớp blockchain cơ bản bằng cách xác định CPI, truy xuất IDL hoặc bất cứ điều gì khác. Chỉ cần xác định gói thành phần mà bạn muốn Hệ thống của mình chạy trên đó!
Liên kết mọi thứ với Chương trình Thế giới
Bây giờ chúng ta đã có các thành phần (thành phần) và hệ thống (Hệ thống), tiếp theo chúng ta hãy tạo một phiên bản trò chơi bằng cách sử dụng Chương trình Thế giới trong SDK TypeScript. Chương trình Thế giới là điểm khởi đầu để tạo các phiên bản, thực thể, tiện ích bổ sung và hệ thống thực thi thế giới. SDK cung cấp các giao diện và phương thức thuận tiện để tương tác với BOLT.
Cài đặt
Để cài đặt Bolt sdk, hãy chạy lệnh sau:
< pre>npm install @magicblock-labs/bolt-sdk --save-dev
Tạo một phiên bản thế giới (phiên bản thế giới)
const initNewWorld = await InitializeNewWorld({ payer: provider.wallet.publicKey,   ; connection: provider.connection,});const tx = new anchor.web3.Transaction().add(createEntityIx);await provider.sendAndConfirm(initNewWorld.transaction);
Thêm thực thể (thực thể) mới
const addEntity = await AddEntity({   ; người trả tiền: provider.wallet.publicKey, world: initNewWorld.worldPda, connection: provider.connection, } );await provider.sendAndConfirm(addEntity.transaction);
Đính kèm thành phần Vị trí với thực thể
< pre> const initComponent = await InitializeComponent({ payer: provider.wallet.publicKey, entity: addEntity.entityPda ,  ; comComponentId: positionComponent.programId,});await provider.sendAndConfirm(initComponent.transaction);
Thực thi hệ thống chuyển động trên thành phần vị trí
const applySystem = await ApplySystem({ authority: provider.wallet .publicKey, system: systemMovement.programId, entity: addEntity.entityPda, thành phần: [positionComponent. ProgramId], });const tx = new anchor.web3.Transaction().add(applySystemIx);await provider.sendAndConfirm(applySystem.transaction);
Trong ví dụ đơn giản này, chúng ta tạo một thực thể Player chứa thành phần Vị trí có tọa độ x, y và z. Chúng ta có thể thực hiện một hệ thống chuyển động để thay đổi trạng thái của nó. Đây là phần hay nhất, bằng cách sử dụng BOLT ECS để xác định cấu trúc dữ liệu trò chơi của bạn, bạn không chỉ có thể sử dụng lại các hệ thống và thành phần hiện có mà còn có thể dễ dàng cho phép sửa đổi hoặc mở rộng trò chơi của mình. Hãy xem xét động lực học chuyển động phức tạp hơn một chút, trong đó thành phần vận tốc thay đổi vị trí được xác định là: #[derive(Copy)]pub struct Velocity { pub x: i64}
Ai đó có thể muốn giới thiệu những khả năng mới để di chuyển nhanh hơn. Họ có thể thực hiện điều này một cách đơn giản bằng cách thêm một hệ thống mới sử dụng Vận tốc để tác động lên thành phần Vị trí.
#[system]pub mod  ; System_apply_velocity & nbsp; {& nbsp; & nbsp; & nbsp; thực thi (CTX: & nbsp; bối cảnh & thành phần. gt;, & nbsp; _args: & nbsp; vec & lt; u8 & gt;) & nbsp;-& gt; & nbsp; kết quả & gt; & nbsp;{ ctx.accounts.position.x += ctx .accounts.velocity.x; Ok(ctx.accounts) } #[system_input] pub cấu trúc Thành phần { pub vị trí:Vị trí, }>< /p>
Hãy chú ý xem đoạn mã này đơn giản đến mức nào. Hệ thống mới này lấy các thành phần vị trí và vận tốc làm đầu vào và xác định logic để cấp nguồn. Không có khái niệm về tài khoản Solana hay CPI, chương trình Thế giới đại lý đang xử lý mọi việc ở đây.
Với một vài dòng mã và hầu như không cần có kiến thức về blockchain, chúng tôi vừa giới thiệu một hành vi chơi trò chơi mới!
Tóm tắt
BOLT sử dụng chế độ ECS để cho phép phát triển trò chơi Mọi người có thể tạo ra các trò chơi có tính mô-đun cao, hiệu quả và có thể tổng hợp được. Các thực thể đóng vai trò là thành phần, thùng chứa cho cấu trúc dữ liệu nguyên thủy, cho phép tùy chỉnh động mà không thay đổi cơ sở mã cơ bản. Hệ thống tương tác với các thành phần này để đưa logic và hành vi vào các thực thể trò chơi. Sự tách biệt các mối quan tâm này không chỉ đơn giản hóa quá trình phát triển mà còn làm cho logic trò chơi có thể tái sử dụng nhiều hơn và nâng cao khả năng mở rộng và sửa đổi trò chơi theo cách không cần cấp phép sau khi phát hành.