Ошибка построения шаблона узла подложки E0277

#substrate

Вопрос:

Я следовал этому уроку.
https://substrate.dev/docs/en/tutorials/create-your-first-substrate-chain/setup
когда я бегу cargo build --release , то получаю ошибку:

 error[E0277]: `[parity_wasm::elements::Instruction; 15]` is not an iterator
   --> /home/ubuntu/.cargo/registry/src/github.com-1ecc6299db9ec823/pwasm-utils-0.18.2/src/stack_height/mod.rs:300:23
    |
300 |                 new_instrs.extend(new_seq);
    |                                   ^^^^^^^
    |                                   |
    |                                   expected an implementor of trait `IntoIterator`
    |                                   help: consider borrowing here: `amp;new_seq`
    |
    = note: the trait bound `[parity_wasm::elements::Instruction; 15]: IntoIterator` is not satisfied
    = note: required because of the requirements on the impl of `IntoIterator` for `[parity_wasm::elements::Instruction; 15]`

   Compiling unsigned-varint v0.7.0
 

Я использовал Ubuntu и грузовую версию 1.51.0
Спасибо

Ответ №1:

Похоже, что ваша ночная цепочка инструментов rust несовместима с кодом, написанным выше. Вам нужно понизить его с nightly-2020-10-01 или какая-то другая версия ночной цепочки инструментов с использованием rustup install nightly-2020-10-01

Ответ №2:

Всякий раз, когда вы сомневаетесь в том, что ночная версия, которая, как известно, работает, лучше всего посмотреть shell.nix файл на подложке в теге/выпуске/ветке, с которой вы строите. Например, по master состоянию на 2021-10-11 гг.:

   rust-nightly = with nixpkgs; ((rustChannelOf { date = "2021-09-10"; channel = "nightly"; }).rust.override {...}
 

Вы можете понизить свой набор инструментов (также для цели wasm, необходимой для сборки подложки) с любой версией, используя:

 rustup uninstall nightly
rustup install nightly-<YYYY-MM-DD>
rustup target add wasm32-unknown-unknown --toolchain nightly-<YYYY-MM-DD>
 

Затем постройте с:

 WASM_BUILD_TOOLCHAIN=nightly-<yyyy-MM-dd> cargo build --release
 

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

1. У меня есть версия на shell.nix toolchain = with nixpkgs; (rustChannelOf { date = "2021-09-14"; channel = "nightly"; }); , но у меня все еще есть ошибка rustup default nightly-2021-09-14-x86_64-unknown-linux-gnu (default)

2. ошибка в чем? rustup target add wasm32-unknown-unknown --toolchain nightly-<YYYY-MM-DD> ?

3. Нет, я успешно изменил значение по умолчанию на 2021-09-14, но получил ту же ошибку после запуска cargo build --release , похоже, что версия на shell.nix не является правильной версией.

4. В некоторых репо на Github нет файла shell.nix. Где еще я могу найти эту версию?

5. Я успешно пробежал cargo nightly-2021-09-14-x86_64-unknown-linux-gnu build --release , спасибо вам!