Использование необъявленного типа или модуля near_blockchain

#nearprotocol

#nearprotocol

Вопрос:

Я получаю следующую ошибку при попытке скомпилировать смарт-контракты NEAR, но только при компиляции в цель wasm

    Compiling nep9000 v0.1.0 (/Users/mikkoohtamaa/code/advanced-fungible-token/contract)
error[E0433]: failed to resolve: use of undeclared type or module `near_blockchain`
   --> src/token.rs:144:1
    |
144 | #[near_bindgen]
    | ^^^^^^^^^^^^^^^ use of undeclared type or module `near_blockchain```
  

Нормально cargo build .

Ответ №1:

Похоже, вам нужно объявить #[near_bindgen] как struct в контракте, так и impl в контракте, impl только этого недостаточно.

 #[near_bindgen]
#[derive(BorshDeserialize, BorshSerialize)]
pub struct Token {
   ...
}


#[near_bindgen]
impl Token {

   ...
}

  

Комментарии:

1. Хотя не уверен, почему я получаю эту ошибку только для цели wasm.

Ответ №2:

Если вы столкнулись с этой ошибкой при разбиении вашего смарт-контракта Rust на отдельные файлы, пожалуйста, используйте use crate::*; вместо того, что может предложить ваша IDE.

Например, предположим, что у нас есть эта файловая структура в нашем проекте:

 .
├── Cargo.lock
├── Cargo.toml
├── src
│  ├── my_mod.rs.     ⟵ here is the module file
│  └── lib.rs
└── build-and-test.sh
  

Когда вы добавляете новый файл my_mod.rs , вам нужно убедиться lib.rs , что он имеет:

 mod my_mod;
  

Внутри my_mod.rs вас может быть, что ваша среда разработки предложит это:

 use crate::Contract;
  

который следует заменить на:

 use crate::*;