Native Solana合约实现 - hello, World
让我们通过构建和部署 Hello World!
程序来进行练习。
我们将在本地完成所有操作,包括部署到本地测试验证器。在开始之前,请确保你已经安装了Rust
和Solana 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"]
需要注意这里的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
这里一定要注意⚠️,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 Explorer
的URL
。将URL复制到浏览器中,在Solana Explorer
上查找该交易,并检查程序日志中是否打印了Hello, world!
。或者,你可以在运行solana logs
命令的终端中查看程序日志。
就是这样!你刚刚在本地开发环境中创建并部署了你的第一个程序。