本文详细介绍了如何安装 Solana 开发环境,并提供了一个从安装到运行“Hello World”程序的完整教程,包含问题排查和常见错误的解决方案。
这是一个 Solana 的 Hello World 教程。我们将指导你完成安装 Solana 的步骤并解决可能出现的问题。
如果你遇到问题,请查看本文末尾的故障排除部分。
如果你已安装 Rust,请跳过此步骤。
# 安装 rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
你将需要它来运行单元测试。如果你已安装 yarn,请跳过此步骤。
# 安装 yarn -- 假设已安装 node js
corepack enable # corepack 随 node js 一起提供
我们强烈建议使用 stable
版本,而不是 latest
。Solana 的安装不再支持符号通道名称(edge
、beta
、stable
),因此我们必须指定版本。
# 安装 solana
sh -c "$(curl -sSfL https://release.solana.com/v1.16.25/install)"
Anchor 是 Solana 开发的框架。在很多方面,它与 hardhat 非常相似。
# 安装 anchor
cargo install --git https://github.com/coral-xyz/anchor avm --locked --force
avm install latest
avm use latest
Mac 用户: 我们建议将你的程序命名为 day_1
而不是 day1
,因为在 mac 机器上,Anchor 有时会默默插入下划线。
anchor init day1 # 如果你使用的是 mac,请使用 day_1
cd day1
anchor build
根据你的机器和互联网连接,这一步可能需要一段时间。这一步也是你最有可能遇到安装问题的地方,因此如果有必要,请查看故障排除部分。
# shell 1
solana config set --url localhost
在新的 shell 中运行以下命令,而不是在 Anchor 项目中。但不要关闭你运行 anchor build
的 shell。这是在你的机器上运行本地(测试)Solana 节点实例:
# shell 2
solana-test-validator
返回到 Anchor 项目的 shell,运行以下命令:
# shell 1
anchor keys sync
在 Anchor 项目中运行:
# shell 1
anchor test --skip-local-validator
上面的命令为我们的程序运行测试。如果你尚未创建测试钱包,Anchor 会给你提供如何创建钱包的说明。我们在这里不提供这些说明,因为它将依赖于你的操作系统和文件结构。你还可能需要通过在终端运行 solana airdrop 100 {YOUR_WALLET_ADDRESS}
来为自己空投一些本地 Sol。你可以通过在命令行中运行 solana address
获取你的钱包地址。
预期输出如下:
现在让我们让程序输出“Hello, world!”将以下行标记为 ****NEW LINE HERE****
添加到 programs/day_1/src/lib.rs
。
use anchor_lang::prelude::*;
declare_id!("...");
#[program]
pub mod day_1 {
use super::*;
pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
msg!("Hello, world!"); // **** NEW LINE HERE ****
Ok(())
}
}
#[derive(Accounts)]
pub struct Initialize {}
solana-test-validator --reset
anchor test --skip-local-validator
ls .anchor/program-logs/
另外,你可以通过打开第三个 shell 并运行以下命令来查看实时日志:
# shell 3
solana logs
现在再次运行测试,你应该会在运行 solana logs
的终端中看到相同的信息。
在 Rust 中,感叹号表示这些是宏。我们将在以后的教程中再次讨论宏。
不,这个是 Anchor 框架自动生成的。你可以将其命名为其他任何名称。
在这种情况下,initialize 这个名称没有什么特别之处,因此我们可以将其更改为我们喜欢的任何名称。这与某些其他关键词和语言不同,比如在某些语言中,main 是一个特殊名称,或者在 Solidity 中构造函数是一个特殊名称。
练习 :尝试将 programs/day_1/src/lib.rs
和 tests/day_1.ts
中的 initialize
重命名为 initialize2
并再次运行测试。见以下橙色圆圈标记的变化。
当测试针对节点运行时,我们将能够查询节点的状态更改。如果你无法使节点运行,可以不带 --skip-local-validator
标志直接运行 anchor test
。但是,你将在开发和测试时遇到更多困难,因此我们建议使本地验证器正常工作。
Solana 是一个快速发展的软件,你可能会遇到安装问题。我们已经记录了你最可能遇到的问题,以下是相关部分。
我们的教程系列是用以下版本编写的: Anchor = 版本 0.29.0 Solana = 版本 1.16.25 * Rustc = 1.77.0-nightly
你可以通过运行以下命令更改 Anchor 版本:
avm install 0.29.0
avm use 0.29.0
solana-program v1.18.0
cannot be builterror: package `solana-program v1.18.0` cannot be built because it requires rustc 1.72.0 or newer, while the currently active rustc version is 1.68.0-dev
Either upgrade to rustc 1.72.0 or newer, or use
cargo update -p solana-program@1.18.0 --precise ver
使用 solana --version
检查你当前使用的 Solana 版本。然后将该版本插入 ver
上面。下面显示了一个解决方案示例:
如果你收到以下错误:
error[E0658]: use of unstable library feature 'build_hasher_simple_hash_one'
--> src/random_state.rs:463:5
|
463 | / fn hash_one<T: Hash>(&self, x: T) -> u64 {
464 | | RandomState::hash_one(self, x)
465 | | }
| |_____^
|
= note: see issue #86161 https://github.com/rust-lang/rust/issues/86161 for more information
= help: add #![feature(build_hasher_simple_hash_one)] to the crate attributes to enable
运行以下命令:cargo update -p ahash@0.8.7 --precise 0.8.6
。
来源 : https://solana.stackexchange.com/questions/8800/cant-build-hello-world
Error: Deploying program failed: Error processing Instruction 1: custom program error: 0x1
There was a problem deploying: Output { status: ExitStatus(unix_wait_status(256)), stdout: "", stderr: "" }.
如果你收到此错误,说明你的密钥未同步。运行 anchor keys sync
。
你的密钥未同步。运行 anchor keys sync
。
你在验证器在后台运行时,运行了不带 --skip-local-validator
的 anchor test
。请关闭验证器并运行 anchor test
,或在运行验证器的情况下运行 anchor test --skip-local-validator
。跳过本地验证器意味着跳过为项目创建的临时验证器,而不是在后台运行的那个。
运行下面的命令向你的开发地址空投 100 SOL:
solana airdrop 100 J7t...zjK
Error: RPC request error: cluster version query failed: error sending request for url (http://localhost:8899/): error trying to connect: tcp connect error: Connection refused (os error 61)
There was a problem deploying: Output { status: ExitStatus(unix_wait_status(256)), stdout: "", stderr: "" }.
这意味着 solana-test-validator
并未在后台运行。在另一个 shell 中运行 solana-test-validator
。
Option::unwrap()
时' 发生恐慌:None
值thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /Users/username/.cargo/git/checkouts/anchor-50c4b9c8b5e0501f/347c225/lang/syn/src/idl/file.rs:214:73
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
你可能还没有运行 anchor build
。
请按照这个 Stack Exchange 线程 中的说明进行操作。
运行以下命令:
brew install corepack
brew link --overwrite corepack
BPF SDK: /Users/rareskills/.local/share/solana/install/releases/stable-43daa37937907c10099e30af10a5a0b43e2dd2fe/solana-release/bin/sdk/bpf
cargo-build-bpf child: rustup toolchain list -v
cargo-build-bpf child: rustup toolchain link bpf /Users/rareskills/.local/share/solana/install/releases/stable-43daa37937907c10099e30af10a5a0b43e2dd2fe/solana-release/bin/sdk/bpf/dependencies/bpf-tools/rust
error: not a directory:
清除缓存:运行 rm -rf ~/.cache/solana/*
。
anchor build
?创建一个新项目并命名为 day_1,而不是 day1。Anchor 在某些机器上似乎默默插入下划线。
本教程是我们免费 Solana 课程 的第一部分。
最初发布于 2024 年 2 月 8 日
- 原文链接: rareskills.io/post/hello...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!