6. 创建项目骨架

创建项目骨架

初始化 Rust 项目

Solana 程序本质上是一个 Rust 库。首先,使用 Cargo 创建一个新的 Rust 库项目:

bash
cargo new --lib solana-storage cd solana-storage

项目名称 solana-storage 表明这是一个 Solana 存储程序。你可以根据实际需求修改名称。


配置 Cargo.toml

编辑 Cargo.toml 文件,我们需要告诉 Rust 编译器如何构建这个项目。

toml
[package] name = "solana-storage" version = "0.1.0" edition = "2021" [lib] crate-type = ["cdylib", "lib"] [dependencies] solana-program = "1.18"

关键配置说明:

  • crate-type = ["cdylib", "lib"]:

    • cdylib: 生成 C 兼容的动态库(.so 文件)。这是部署到 Solana BPF 虚拟机所必需的格式。
    • lib: 生成标准的 Rust 库(.rlib 文件)。这方便你在本地编写单元测试和集成测试,无需每次都部署到链上。
  • solana-program: 这是 Solana 开发的核心标准库,提供了账户信息、公钥、程序结果等基础类型的定义。


编写入口程序 (Entrypoint)

Solana 程序的执行入口不像普通 Rust 程序那样是 main() 函数,而是一个由宏定义的特殊入口。

src/lib.rs 中编写最基本的程序骨架:

rust
use solana_program::{ account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, pubkey::Pubkey, msg, }; // 1. 定义程序入口点 entrypoint!(process_instruction); // 2. 处理指令的核心逻辑 pub fn process_instruction( program_id: &Pubkey, // 这个程序自己的 ID accounts: &[AccountInfo], // 交易涉及的所有账户 instruction_data: &[u8], // 传递给程序的参数(字节数组) ) -> ProgramResult { // 打印日志到链上 (Compute Budget 消耗较低) msg!("Hello Solana! program_id: {:?}", program_id); // 返回 Ok(()) 表示执行成功 Ok(()) }

这个程序目前只会在被调用时打印一条日志。但它已经是一个合法的 Solana 程序,可以被编译和部署。


编译测试

Solana 提供了一套专门的编译工具链(基于 BPF/SBF),而不是使用标准的 cargo build

运行以下命令进行编译:

bash
cargo build-sbf
  • SBF (Solana Bytecode Format): 这是 eBPF 的变种,专为 Solana 优化。
  • 编译产物:如果一切正常,你会在 target/deploy/ 目录下看到 solana_storage.so 文件。这就是最终要上传到区块链的“二进制文件”。

:如果你看到 target/deploy/solana_storage-keypair.json,这是系统自动为你生成的程序密钥对。这个密钥对的公钥就是你程序的 Program ID

RUSTPlayground
EDITOR ACTIVE
Initializing RUST Environment...

项目构建模拟器

Explorer
Empty Directory
Welcome

Select a file to view content

Terminal
$