我的配置存储的 GenesisConfig 条目在哪里?
Where is my GenesisConfig entry for my config storage?
我正在尝试在扩展 Sudo 模块之前重建它的根密钥行为。在 v1 documentation on GenesisConfig 之后,我的 decl_storage
:
中有一个 config()
存储变量
RootKey get(fn rootkey) config(): T::AccountId;
(目前在节点模板 template.rs 中)
然而,如果我查看宏扩展输出,我在 GenesisConfig 结构中没有 template
项,并且我无法在 chain_spec 中放入如下条目testnet_genesis 函数
template: Some(TemplateConfig {
rootkey: root_key,
}),
因为我收到了关于 template
和 TemplateConfig
的投诉,尽管两者都应该由宏扩展构建。
编辑:具体来说,如果它在 use runtime::{}
列表中添加带有 TemplateConfig 项目的上述内容,我被告知:
error[E0432]: unresolved import `runtime::TemplateConfig`
--> node-template/src/chain_spec.rs:4:14
|
4 | SudoConfig, TemplateConfig, IndicesConfig, SystemConfig, WASM_BINARY, Signature
| ^^^^^^^^^^^^^^ no `TemplateConfig` in the root
error[E0560]: struct `node_template_runtime::GenesisConfig` has no field named `template`
--> node-template/src/chain_spec.rs:142:3
|
142 | template: Some(TemplateConfig {
| ^^^^^^^^ `node_template_runtime::GenesisConfig` does not have this field
|
= note: available fields are: `system`, `aura`, `grandpa`, `indices`, `balances`, `sudo`
我也没有在 polkadot.js 中看到任何模板项在存储中,而我确实看到了 sudo 的 key()
。
我错过了什么明显的东西?
听起来您在 chain_spec.rs
文件的开头缺少 use TemplateConfig
。像这样 https://github.com/substrate-developer-hub/substrate-node-template/blob/8fea1dc6dd0c5547117d022fd0d1bf49868ee548/src/chain_spec.rs#L4
如果这不是您的问题,请提供您遇到的确切错误,并可选择 link 完整代码。
尝试为运行时模块设置创世配置时,您需要执行以下操作:
- 确保您的运行时模块具有 "configurable storage items"。这可能就像在
decl_storage!
宏中设置 config()
一样简单,但也可能更复杂一些,如此处所述:`decl_storage! - GenesisConfig.
decl_storage! {
trait Store for Module<T: Trait> as Sudo {
Key get(fn key) config(): T::AccountId;
//--------------^^^^^^^^---------------
}
}
这将在您的模块中生成一个GenesisConfig
,将在下一步中使用。
- 接下来,您需要通过将
Config
/Config<T>
项添加到 construct_runtime!
宏,将模块特定的 GenesisConfig
结构暴露给其余的运行时创世配置.在此示例中,我们使用 Config<T>
因为我们正在配置通用 T::AccountId
:
construct_runtime!(
pub enum Runtime where
Block = Block,
NodeBlock = opaque::Block,
UncheckedExtrinsic = UncheckedExtrinsic
{
//--snip--
TemplateModule: template::{Module, Call, Storage, Event<T>, Config<T>},
//----------------------------------------------------------^^^^^^^^^--
}
}
这将根据您为模块配置的名称(名称 + Config
)为您的模块特定 GenesisConfig
对象生成一个别名。在这种情况下,对象的名称将为 TemplateModuleConfig
.
- 最后需要在
chain_spec.rs
文件中配置这个存储项。为此,请确保导入 TemplateModuleConfig
项:
use node_template_runtime::{
AccountId, AuraConfig, BalancesConfig, GenesisConfig, GrandpaConfig,
SudoConfig, IndicesConfig, SystemConfig, WASM_BINARY, Signature,
TemplateModuleConfig,
//--^^^^^^^^^^^^^^^^^^^^
};
然后配置你的创世信息:
template: Some(TemplateModuleConfig {
key: root_key,
}),
我正在尝试在扩展 Sudo 模块之前重建它的根密钥行为。在 v1 documentation on GenesisConfig 之后,我的 decl_storage
:
config()
存储变量
RootKey get(fn rootkey) config(): T::AccountId;
(目前在节点模板 template.rs 中)
然而,如果我查看宏扩展输出,我在 GenesisConfig 结构中没有 template
项,并且我无法在 chain_spec 中放入如下条目testnet_genesis 函数
template: Some(TemplateConfig {
rootkey: root_key,
}),
因为我收到了关于 template
和 TemplateConfig
的投诉,尽管两者都应该由宏扩展构建。
编辑:具体来说,如果它在 use runtime::{}
列表中添加带有 TemplateConfig 项目的上述内容,我被告知:
error[E0432]: unresolved import `runtime::TemplateConfig`
--> node-template/src/chain_spec.rs:4:14
|
4 | SudoConfig, TemplateConfig, IndicesConfig, SystemConfig, WASM_BINARY, Signature
| ^^^^^^^^^^^^^^ no `TemplateConfig` in the root
error[E0560]: struct `node_template_runtime::GenesisConfig` has no field named `template`
--> node-template/src/chain_spec.rs:142:3
|
142 | template: Some(TemplateConfig {
| ^^^^^^^^ `node_template_runtime::GenesisConfig` does not have this field
|
= note: available fields are: `system`, `aura`, `grandpa`, `indices`, `balances`, `sudo`
我也没有在 polkadot.js 中看到任何模板项在存储中,而我确实看到了 sudo 的 key()
。
我错过了什么明显的东西?
听起来您在 chain_spec.rs
文件的开头缺少 use TemplateConfig
。像这样 https://github.com/substrate-developer-hub/substrate-node-template/blob/8fea1dc6dd0c5547117d022fd0d1bf49868ee548/src/chain_spec.rs#L4
如果这不是您的问题,请提供您遇到的确切错误,并可选择 link 完整代码。
尝试为运行时模块设置创世配置时,您需要执行以下操作:
- 确保您的运行时模块具有 "configurable storage items"。这可能就像在
decl_storage!
宏中设置config()
一样简单,但也可能更复杂一些,如此处所述:`decl_storage! - GenesisConfig.
decl_storage! {
trait Store for Module<T: Trait> as Sudo {
Key get(fn key) config(): T::AccountId;
//--------------^^^^^^^^---------------
}
}
这将在您的模块中生成一个GenesisConfig
,将在下一步中使用。
- 接下来,您需要通过将
Config
/Config<T>
项添加到construct_runtime!
宏,将模块特定的GenesisConfig
结构暴露给其余的运行时创世配置.在此示例中,我们使用Config<T>
因为我们正在配置通用T::AccountId
:
construct_runtime!(
pub enum Runtime where
Block = Block,
NodeBlock = opaque::Block,
UncheckedExtrinsic = UncheckedExtrinsic
{
//--snip--
TemplateModule: template::{Module, Call, Storage, Event<T>, Config<T>},
//----------------------------------------------------------^^^^^^^^^--
}
}
这将根据您为模块配置的名称(名称 + Config
)为您的模块特定 GenesisConfig
对象生成一个别名。在这种情况下,对象的名称将为 TemplateModuleConfig
.
- 最后需要在
chain_spec.rs
文件中配置这个存储项。为此,请确保导入TemplateModuleConfig
项:
use node_template_runtime::{
AccountId, AuraConfig, BalancesConfig, GenesisConfig, GrandpaConfig,
SudoConfig, IndicesConfig, SystemConfig, WASM_BINARY, Signature,
TemplateModuleConfig,
//--^^^^^^^^^^^^^^^^^^^^
};
然后配置你的创世信息:
template: Some(TemplateModuleConfig {
key: root_key,
}),