我的配置存储的 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,
    }),         

因为我收到了关于 templateTemplateConfig 的投诉,尽管两者都应该由宏扩展构建。

编辑:具体来说,如果它在 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 完整代码。

尝试为运行时模块设置创世配置时,您需要执行以下操作:

  1. 确保您的运行时模块具有 "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,将在下一步中使用。

  1. 接下来,您需要通过将 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.

  1. 最后需要在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,
    }),