【问题标题】:Anchor build error versions of anchor-spl and anchor-langanchor-spl 和 anchor-lang 的锚构建错误版本
【发布时间】:2022-06-29 15:24:44
【问题描述】:

我正在使用以下 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.

【问题讨论】:

  • 我已将 [#error] 更改为 [#error_code] 并修复了几个错误

标签: rust anchor rust-cargo solana


【解决方案1】:
cargo install --git https://github.com/project-serum/anchor --tag v0.24.2 anchor-cli --locked

然后在项目文件夹的cargo.toml中,使你的anchor-lang=0.24.2 而不是 0.20.1

我遇到了同样的问题,这对我有用

【讨论】:

    【解决方案2】:

    您必须将锚版本降级为0.21.0

    如果你在windows机器上,你可以简单地使用npm i -g @project-serum/anchor-cli@^0.21.0

    但如果您使用的是 WSL 或 Ubuntu,则必须运行 sudo apt-get update &amp;&amp; sudo apt-get upgrade &amp;&amp; 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 .

    别忘了.

    【讨论】:

    • 我已经这样做了,但不起作用,我的版本是:anchor-cli 0.20.0,solana 1.9.4,cargo,1.60.0,我已经删除了 .cargo/registry/索引,但错误仍然存​​在:找到不匹配的候选版本:0.24.2 搜索位置: crates.io 索引
    • 你找到解决方案了吗? @VictorFernandez
    【解决方案3】:

    不建议删除您的 .cargo/registry/index 如果您不小心降级或升级,可能会损坏您的货物:cargo install --git https://github.com/project-serum/anchor --tag v0.21.0 anchor-cli --locked 然后指定你想要的版本。

    【讨论】:

      【解决方案4】:

      这是因为所有旧版本的锚都被拉了: https://crates.io/crates/anchor-lang/versions

      您可以通过 Cargo.toml 中的 git 标签强制要求的版本:

      anchor-lang = { git = "https://github.com/project-serum/anchor", tag = "v0.20.1" }
      

      但如果旧版本的锚点存在漏洞,则可能存在安全问题。

      【讨论】:

        【解决方案5】:

        对于我的 Mac,以下命令对我有用。它也应该适用于 Windows 上的 Ubuntu 和 wsl 2。

        cargo install --git https://github.com/project-serum/anchor --tag v0.21.0 anchor-cli --locked --force
        

        【讨论】:

          猜你喜欢
          • 2022-06-16
          • 2022-11-24
          • 2021-09-04
          • 2019-12-24
          • 1970-01-01
          • 1970-01-01
          • 2014-08-30
          • 2023-03-08
          • 1970-01-01
          相关资源
          最近更新 更多