在扩展Sudo模块的根密钥行为之前,我正尝试对其进行重构。在v1 documentation on GenesisConfig之后,我的config()
中有一个decl_storage
存储变量:
RootKey get(fn rootkey) config(): T::AccountId;
(目前在node-template 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()
。
我想念什么明显的东西?
答案 0 :(得分:0)
听起来use TemplateConfig
文件开头缺少chain_spec.rs
。像这样的https://github.com/substrate-developer-hub/substrate-node-template/blob/8fea1dc6dd0c5547117d022fd0d1bf49868ee548/src/chain_spec.rs#L4
如果这不是您的问题,请提供确切的错误信息,并提供完整代码的链接。
答案 1 :(得分:0)
在尝试为运行时模块设置创世纪配置时,您需要执行以下操作:
config()
宏中设置decl_storage!
一样简单,但也可以更复杂一些,如此处记录的`decl_storage! - GenesisConfig。decl_storage! {
trait Store for Module<T: Trait> as Sudo {
Key get(fn key) config(): T::AccountId;
//--------------^^^^^^^^---------------
}
}
这将在您的模块中生成一个GenesisConfig
,将在下一步中使用。
GenesisConfig
/ Config
项添加到Config<T>
宏中,将模块特定的construct_runtime!
结构公开给运行时的其余部分。在此示例中,我们使用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>},
//----------------------------------------------------------^^^^^^^^^--
}
}
这将根据您为模块配置的名称(名称+ GenesisConfig
)为模块特定的Config
对象生成别名。在这种情况下,对象的名称将为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,
}),