Skip to main content

Native Solana合约实现 - hello, World

让我们通过构建和部署 Hello World! 程序来进行练习。

我们将在本地完成所有操作,包括部署到本地测试验证器。在开始之前,请确保你已经安装了RustSolana CLI。如果你还没有安装,请参考概述中的说明进行设置。

1. 创建一个新的Rust项目

让我们从创建一个新的Rust项目开始。运行下面的cargo new --lib命令。随意用你自己的目录名替换它。

cargo new --lib solana-hello-world-local

记得更新 Cargo.toml 文件,将 solana-program 添加为依赖项,并检查 crate-type 是否已经存在。

这里的solana-program 可以通过在命令行执行cargo add solana-program添加到依赖管理的配置文件中。

[package]
name = "solana-hello-world-local"
version = "0.1.0"
edition = "2021"

[dependencies]
solana-program = "1.16.10"

[lib]
crate-type = ["cdylib", "lib"]
caution

需要注意这里的solana-program的版本,不要直接copy这个Cargo.toml的配置,因为solana-program的版本也是在更新的,可能以后直接使用这里的会出问题。建议使用cargo add solana-program添加。

2. 编写你的程序

接下来,使用下面的Hello World! 程序更新lib.rs。当程序被调用时,该程序会简单地将Hello, world! 打印到程序日志中。

use solana_program::{
account_info::AccountInfo,
entrypoint,
entrypoint::ProgramResult,
pubkey::Pubkey,
msg
};

entrypoint!(process_instruction);

pub fn process_instruction(
program_id: &Pubkey,
accounts: &[AccountInfo],
instruction_data: &[u8]
) -> ProgramResult{
msg!("Hello, world!");

Ok(())
}

3. 运行本地测试验证器

在编写好你的程序之后,让我们确保我们的Solana CLI配置指向本地主机,使用solana config set --url命令。

solana config set --url localhost

接下来,使用solana config get命令检查Solana CLI配置是否已更新。

solana config get

最后,运行本地测试验证器。在一个单独的终端窗口中运行solana-test-validator命令。只有当我们的RPC URL设置为localhost时才需要这样做。

solana-test-validator
caution

这里一定要注意⚠️,solana-test-validator 这个命令启动的是solana的本地测试验证器。

4. 构建和部署

我们现在准备好构建和部署我们的程序了。通过运行 cargo build-sbf 命令来构建程序。

cargo build-sbf

现在让我们部署我们的程序。部署从cargo build-sbf命令的输出target/deploy/*.so文件。

ls --tree target/ --depth 2
 target
├──  .rustc_info.json
├──  CACHEDIR.TAG
├──  debug
│ ├──  .cargo-lock
│ ├──  .fingerprint
│ ├──  build
│ ├──  deps
│ ├──  examples
│ └──  incremental
├──  deploy
│ ├──  solana_hello_world_local-keypair.json
│ └──  solana_hello_world_local.so
├──  release
│ ├──  .cargo-lock
│ ├──  .fingerprint
│ ├──  build
│ ├──  deps
│ ├──  examples
│ └──  incremental
└──  sbf-solana-solana
├──  CACHEDIR.TAG
└──  release

这里的Path 是上面的target/deploy/*.so文件的路径。运行solana program deploy命令来部署你的程序。

solana program deploy <PATH>

Solana程序部署将输出你的程序的程序ID。你现在可以在Solana Explorer上查找已部署的程序(对于Localhost,请选择“自定义RPC URL”作为集群)。

5. 查看程序日志

在我们调用程序之前,打开一个单独的终端并运行solana logs命令。这将允许我们在终端中查看程序日志。

solana logs <PROGRAM_ID>

在测试验证器仍在运行时,尝试使用此处的客户端脚本调用你的程序。

index.ts中用刚刚部署的PROGRAM ID替换掉原来的PROGRAM ID,然后运行npm install,接着运行npm start。这将返回一个Solana ExplorerURL。将URL复制到浏览器中,在Solana Explorer上查找该交易,并检查程序日志中是否打印了Hello, world!。或者,你可以在运行solana logs命令的终端中查看程序日志。

就是这样!你刚刚在本地开发环境中创建并部署了你的第一个程序。