我正在使用以下 Rust 存储库:
https://github.com/SmartCodeBlockchainDev/Nelson-NFT-stacking
当我尝试进行锚点构建时,出现以下错误:
Failed to obtain package metadata: `cargo metadata` exited with an error: Updating crates.io index
error: failed to select a version for the requirement `anchor-lang = "^0.20.1"`
candidate versions found which didn't match: 0.24.2
location searched: crates.io index
required by package `nft-staking v0.1.0 (/staking/programs/staking)`
当我将Cargo.toml文件更新到这些版本(anchor-lang和anchor-spl 0.24.2)时,它在lib.rs中给出了几个错误:
error: bump targets should not be provided with init. Please use bump without a target.
--> programs/staking/src/lib.rs:582:9
|
582 | bump = vault_nonce,
| ^^^^
error[E0432]: unresolved import `crate`
--> programs/staking/src/lib.rs:48:1
|
48 | #[program]
| ^^^^^^^^^^ could not find `__client_accounts_create_user` in the crate root
|
= note: this error originates in the attribute macro `program` (in Nightly builds, run with -Z macro-backtrace for more info)
error: cannot find attribute `error` in this scope
--> programs/staking/src/lib.rs:1024:3
|
1024 | #[error]
| ^^^^^
|
note: `error` is imported here, but it is a function-like macro
--> programs/staking/src/lib.rs:2:5
|
2 | use anchor_lang::prelude::*;
| ^^^^^^^^^^^^^^^^^^^^^^^
error: cannot find attribute `msg` in this scope
--> programs/staking/src/lib.rs:1026:7
|
1026 | #[msg("Insufficient funds to unstake.")]
| ^^^
|
note: `msg` is imported here, but it is a function-like macro
--> programs/staking/src/lib.rs:2:5
|
2 | use anchor_lang::prelude::*;
| ^^^^^^^^^^^^^^^^^^^^^^^
note: `msg` is imported here, but it is a function-like macro
--> programs/staking/src/lib.rs:2:5
|
2 | use anchor_lang::prelude::*;
| ^^^^^^^^^^^^^^^^^^^^^^^
error: cannot find attribute `msg` in this scope
--> programs/staking/src/lib.rs:1030:7
|
1030 | #[msg("Reward B cannot be funded - pool is single stake.")]
| ^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^
note: `msg` is imported here, but it is a function-like macro
--> programs/staking/src/lib.rs:2:5
|
2 | use anchor_lang::prelude::*;
| ^^^^^^^^^^^^^^^^^^^^^^^
warning: unused import: `program_option::COption`
--> programs/staking/src/lib.rs:3:42
|
3 | use anchor_lang::solana_program::{clock, program_option::COption};
| ^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
error[E0599]: no function or associated item named `try_accounts` found for struct `InitializePool` in the current scope
--> programs/staking/src/lib.rs:48:1
|
48 | #[program]
| ^^^^^^^^^^ function or associated item not found in `InitializePool<'_>`
...
539 | pub struct InitializePool<'info> {
| -------------------------------- function or associated item `try_accounts` not found for this
|
= help: items from traits can only be used if the trait is implemented and in scope
= note: the following trait defines an item `try_accounts`, perhaps you need to implement it:
candidate #1: `anchor_lang::Accounts`
= note: this error originates in the attribute macro `program` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0277]: the trait bound `InitializePool<'_>: anchor_lang::Accounts<'_>` is not satisfied
--> programs/staking/src/lib.rs:48:1
|
48 | #[program]
| ^^^^^^^^^^ the trait `anchor_lang::Accounts<'_>` is not implemented for `InitializePool<'_>`
|
note: required by `anchor_lang::context::Context::<'a, 'b, 'c, 'info, T>::new`
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/anchor-lang-0.24.2/src/context.rs:51:5
|
51 | / pub fn new(
52 | | program_id: &'a Pubkey,
53 | | accounts: &'b mut T,
54 | | remaining_accounts: &'c [AccountInfo<'info>],
55 | | bumps: BTreeMap<String, u8>,
56 | | ) -> Self {
| |_____________^
= note: this error originates in the attribute macro `program` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0599]: no method named `exit` found for struct `InitializePool` in the current scope
--> programs/staking/src/lib.rs:48:1
|
48 | #[program]
| ^^^^^^^^^^ method not found in `InitializePool<'_>`
...
539 | pub struct InitializePool<'info> {
| -------------------------------- method `exit` not found for this
|
= help: items from traits can only be used if the trait is implemented and in scope
= note: the following trait defines an item `exit`, perhaps you need to implement it:
candidate #1: `anchor_lang::AccountsExit`
= note: this error originates in the attribute macro `program` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0599]: no function or associated item named `try_accounts` found for struct `CreateUser` in the current scope
--> programs/staking/src/lib.rs:48:1
|
48 | #[program]
| ^^^^^^^^^^ function or associated item not found in `CreateUser<'_>`
...
608 | pub struct CreateUser<'info> {
| ---------------------------- function or associated item `try_accounts` not found for this
|
= help: items from traits can only be used if the trait is implemented and in scope
= note: the following trait defines an item `try_accounts`, perhaps you need to implement it:
candidate #1: `anchor_lang::Accounts`
= note: this error originates in the attribute macro `program` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0277]: the trait bound `CreateUser<'_>: anchor_lang::Accounts<'_>` is not satisfied
--> programs/staking/src/lib.rs:48:1
|
48 | #[program]
| ^^^^^^^^^^ the trait `anchor_lang::Accounts<'_>` is not implemented for `CreateUser<'_>`
|
note: required by `anchor_lang::context::Context::<'a, 'b, 'c, 'info, T>::new`
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/anchor-lang-0.24.2/src/context.rs:51:5
|
51 | / pub fn new(
52 | | program_id: &'a Pubkey,
53 | | accounts: &'b mut T,
54 | | remaining_accounts: &'c [AccountInfo<'info>],
55 | | bumps: BTreeMap<String, u8>,
56 | | ) -> Self {
| |_____________^
= note: this error originates in the attribute macro `program` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0599]: no method named `exit` found for struct `CreateUser` in the current scope
--> programs/staking/src/lib.rs:48:1
|
48 | #[program]
| ^^^^^^^^^^ method not found in `CreateUser<'_>`
...
608 | pub struct CreateUser<'info> {
| ---------------------------- method `exit` not found for this
|
= help: items from traits can only be used if the trait is implemented and in scope
= note: the following trait defines an item `exit`, perhaps you need to implement it:
candidate #1: `anchor_lang::AccountsExit`
= note: this error originates in the attribute macro `program` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0599]: no variant or associated item named `NotFoundCandyMachine` found for enum `anchor_lang::error::ErrorCode` in the current scope
--> programs/staking/src/lib.rs:214:35
|
214 | return Err(ErrorCode::NotFoundCandyMachine.into());
| ^^^^^^^^^^^^^^^^^^^^ variant or associated item not found in `anchor_lang::error::ErrorCode`
error[E0599]: no variant or associated item named `PoolPaused` found for enum `anchor_lang::error::ErrorCode` in the current scope
--> programs/staking/src/lib.rs:224:35
|
224 | return Err(ErrorCode::PoolPaused.into());
| ^^^^^^^^^^ variant or associated item not found in `anchor_lang::error::ErrorCode`
error[E0599]: no variant or associated item named `CandyNotMatch` found for enum `anchor_lang::error::ErrorCode` in the current scope
--> programs/staking/src/lib.rs:250:35
|
250 | return Err(ErrorCode::CandyNotMatch.into());
| ^^^^^^^^^^^^^ variant or associated item not found in `anchor_lang::error::ErrorCode`
error[E0599]: no variant or associated item named `CandyNotMatch` found for enum `anchor_lang::error::ErrorCode` in the current scope
--> programs/staking/src/lib.rs:331:35
|
331 | return Err(ErrorCode::CandyNotMatch.into());
| ^^^^^^^^^^^^^ variant or associated item not found in `anchor_lang::error::ErrorCode`
Some errors have detailed explanations: E0277, E0432, E0599.
这是因为所有旧版本的锚点都被拉掉了: https://crates.io/crates/anchor-lang/versions
您可以通过 Cargo.toml 中的 git 标签强制指定所需版本:
anchor-lang = { git = "https://github.com/project-serum/anchor", tag = "v0.20.1" }
但是如果旧版本的锚点存在漏洞,可能会出现安全问题。
cargo install --git https://github.com/project-serum/anchor --tag v0.24.2 anchor-cli --locked
然后在projects文件夹的cargo.toml中,将anchor-lang设置为0.24.2 相反 0.20.1
我遇到了同样的问题,这对我有用
您必须将锚定版本降级为
0.21.0
如果您使用的是 Windows 机器,则只需使用
npm i -g @project-serum/anchor-cli@^0.21.0
但是如果您使用的是 WSL 或 Ubuntu,则必须运行
sudo apt-get update && sudo apt-get upgrade && sudo apt-get install -y pkg-config build-essential libudev-dev
然后使用
cargo install --git https://github.com/project-serum/anchor --tag v0.21.0 anchor-cli --locked
从源代码构建特定版本
记住您必须安装
cargo
才能运行此命令
如果问题仍然存在,则您的
~/.cargo/registry/index
目录已损坏。删除它并再次运行 cargo update
。”
要在 WSL 中打开它,只需在 ubuntu 终端中输入
explorer.exe .
别忘了
.
不建议删除您的 .cargo/registry/index 如果您不小心降级或升级,它可能会损坏您的货物: cargo install --git https://github.com/project- Serial/anchor --tag v0.21.0anchor-cli --locked 然后指定您想要的版本。
对于我的 Mac,以下命令对我有用。它也应该适用于 Windows 上的 Ubuntu 和 wsl 2。
cargo install --git https://github.com/project-serum/anchor --tag v0.21.0 anchor-cli --locked --force
这对我有用 我卸载了anchor cli并使用这样的cargo重新安装了0.27.0版本;
cargo卸载anchor-cli
然后
cargo 安装anchor-cli --版本0.27.0