Как импортировать subst_primitives для использования sr25519? - PullRequest
2 голосов
/ 28 февраля 2020

В моем файле Cargo.toml есть следующие зависимости:

[package]
name = "api-client-tutorial"
version = "0.1.0"
authors = ["Supercomputing Systems AG <info@scs.ch>"]
edition = "2018"

[dependencies]
substrate-api-client = { git = "https://github.com/scs/substrate-api-client.git" }
codec = { package = "parity-scale-codec", features = ["derive"], version = "1.0.0", default-features = false }

[dependencies.primitives]
git = "https://github.com/paritytech/substrate"
rev = "3bf9540e72df5ecb3955845764dfee7dcdbb26b5"
package = "substrate-primitives"

[dependencies.keyring]
git = "https://github.com/paritytech/substrate"
rev = "3bf9540e72df5ecb3955845764dfee7dcdbb26b5"
package = "substrate-keyring"

Я не уверен в разнице между разделами dependencies и dependencies.primitives, но пакет substrate-primitives включен в секция примитивов.

Я видел , что substrate_primitives имеет модуль sr25519, который мне нужно использовать, но когда я пытаюсь импортировать его в мой код:

use substrate_api_client::{Api, node_metadata};
use substrate_primitives::sr25519;
fn main() {
    // instantiate an Api that connects to the given address
    let url = "127.0.0.1:9944";
    // if no signer is set in the whole program, we need to give to Api a specific type instead of an associated type
    // as during compilation the type needs to be defined.
    let api = Api::<sr25519::Pair>::new(format!("ws://{}", url));

    let meta = api.get_metadata();
    println!("Metadata:\n {}", node_metadata::pretty_format(&meta).unwrap());
}

Я получаю следующую ошибку:

unresolved import `substrate_primitives`

use of undeclared type or module `substrate_primitives`rustc(E0432)
main.rs(2, 5): use of undeclared type or module `substrate_primitives`

Как импортировать sr25519, чтобы я мог использовать следующую строку в своем коде?

let api = Api::<sr25519::Pair>::new(format!("ws://{}", url));

1 Ответ

1 голос
/ 01 марта 2020

Разница между таблицами под [dependencies] и таблицей [dependencies.primitives] заключается в том, что таблица для зависимости primitives не является встроенной. Вы также можете просто вставить зависимость primitives и поместить ее в [dependencies] следующим образом:

primitives = { git = "https://github.com/paritytech/substrate", rev = "3bf9540e72df5ecb3955845764dfee7dcdbb26b5", package = "substrate-primitives" }

Документация toml может предоставить вам более подробную информацию о таблицах и встроенных таблицах.

Относительно вашей проблемы. Вы не можете импортировать ящик таким образом, потому что он переименован в primitives. Поле package указывает реальное имя зависимости, а имя таблицы определяет новое имя, которое используется для его импорта в ваш проект. За подробностями обращайтесь к документации car go .

Поэтому ваш импорт должен выглядеть следующим образом: use primitives::sr25519;

...