这是Solana的HelloWorld教程。我们将引导您完成安装Solana的步骤并解决可能出现的问题。如果您遇到问题,请查看本文末尾的故障排除部分。安装步骤安装Rust如果您已经安装了Rust,请跳过此步骤。curl--proto'=https'--tlsv1.
<!--StartFragment-->
这是 Solana 的 Hello World 教程。我们将引导您完成安装 Solana 的步骤并解决可能出现的问题。\ 如果您遇到问题,请查看本文末尾的故障排除部分。
如果您已经安装了 Rust,请跳过此步骤。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
您需要它来运行单元测试。如果您已经安装了 yarn,请跳过此步骤。
corepack enable
我们强烈建议使用stable版本,而不是latest。 Solana 安装不再支持符号通道名称(edge、beta、stable),因此我们必须指定版本。
sh -c "$(curl -sSfL https://release.anza.xyz/v2.1.5/install)"
Anchor 是 Solana 开发的框架。它在很多方面与 hardhat 非常相似。
cargo install --git https://github.com/coral-xyz/anchor avm --locked --force
avm install latest
avm use latest
调用您的程序day_1而不是day1因为 Anchor 有时似乎会在 idl路径上插入下划线。
anchor init day_1
cd day_1
anchor build
根据您的机器和互联网连接,此步骤可能需要一段时间。这也是您可能遇到安装问题的地方,因此如有必要,请参阅故障排除部分。
solana config set --url localhost
在新的 shell 中(而不是在 Anchor 项目中)运行以下命令。但不要关闭运行的 shell anchor build。这会在您的机器上运行本地(测试)Solana 节点实例:
solana-test-validator
返回 Anchor 项目的 shell 并运行以下命令:
anchor keys sync
在 Anchor 项目中运行此命令
anchor test --skip-local-validator
上面的命令运行我们程序的测试。如果您尚未创建测试钱包,Anchor 将为您提供如何创建钱包的说明。我们在此不提供这些说明,因为它取决于您的操作系统和文件结构。您可能还需要通过在终端中运行来为自己空投一些本地 Sol 。您可以通过在命令行中solana airdrop 100 {YOUR_WALLET_ADDRESS}
运行来获取您的钱包地址。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/
打开该文件即可看到记录的“Hello world”\
或者,您可以通过打开第三个 shell 并运行以下命令来查看日志:
solana logs
现在再次运行测试,您应该在运行的终端中看到相同的消息solana logs。
查询已安装
solana program show --programs
关闭程序
solana program close 3ynNB373...2iTyg --bypass-warning
请注意,一旦关闭某个程序,则不能重新使用该程序 ID 来部署新程序。
anchor test
在不使用--skip-local-validator
标志的情况下运行。但是,这将使您的开发和测试变得更加困难,因此我们建议让本地验证器正常工作。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无法构建包
error: 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 版本solana --version
。然后将该版本插入到ver上面的内容中。示例解决方案如下所示:\
错误[E0658]:使用不稳定库功能“build_hasher_simple_hash_one”\ 如果出现以下错误:
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
错误:部署程序失败:错误处理指令 1:自定义程序错误:0x1
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
。
错误:您配置的 rpc 端口:8899 已被使用\
当验证器在后台运行时,您anchor test
没有运行--skip-local-validator
。请关闭验证器并运行,anchor test
或在验证器运行时运行anchor test --skip-local-validator
。跳过本地验证器意味着跳过它为项目创建的临时验证器,而不是在后台运行的验证器。
错误:帐户 J7t…zjK 资金不足,无法消费\ 运行以下命令将 100 SOL 空投到您的开发地址:
solana airdrop 100 J7t...zjK
错误:RPC 请求错误:集群版本查询失败
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
不在后台运行。solana-test-validator
在另一个 shell 中运行。
线程“main”因“调用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
我在使用 Mac,出现错误:无法启动验证器:无法在测试分类账中创建分类账:块存储错误\ 按照此Stack Exchange 线程中的说明进行操作。
我的 Mac 上有 node.js,但是没有 corepack\ 运行以下命令:
brew install corepack
brew link --overwrite corepack
来源:https ://stackoverflow.com/questions/70082424/command-not-found-corepack-when-installing-yarn-on-node-v17-0-1
错误:不是目录
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/*
。
错误:target/idl/day_1.json 不存在。您运行了吗anchor build?\ 创建一个新项目并将其命名为 day_1 而不是 day1。Anchor 似乎会在某些机器上默默插入下划线。
<!--EndFragment--> 作者:https://t.me/+P3Z7P_xQxbNlZWZl 来源:https://www.fabipingtai.com
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!