0

在扩展 Sudo 模块之前,我试图重建它的根键行为。在GenesisConfig 上的v1 文档之后,我的config()存储变量中有一个decl_storage

    RootKey get(fn rootkey) config(): T::AccountId;

(现在在节点模板 template.rs 中)

然而,如果我查看宏扩展的输出,我template在 GenesisConfig 结构中没有任何项目,并且我无法在 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().

我错过了什么明显的东西?

4

2 回答 2

3

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

  1. 确保您的运行时模块具有“可配置的存储项”。这可以像config()decl_storage!宏中设置一样简单,但也可以像这里记录的那样复杂一点:`decl_storage!- 创世纪配置
decl_storage! {
    trait Store for Module<T: Trait> as Sudo {
        Key get(fn key) config(): T::AccountId;
        //--------------^^^^^^^^---------------
    }
}

这将在您的模块中生成一个GenesisConfig,将在下一步中使用。

  1. 接下来,您需要通过将/项添加到宏中来将特定于模块GenesisConfig的结构公开给运行时的其余创世配置。在这个例子中,我们使用是因为我们正在配置一个泛型:ConfigConfig<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.

  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,
    }),     
于 2019-12-18T10:15:24.863 回答
1

听起来您在文件use TemplateConfig的开头丢失了chain_spec.rs。像这样的东西https://github.com/substrate-developer-hub/substrate-node-template/blob/8fea1dc6dd0c5547117d022fd0d1bf49868ee548/src/chain_spec.rs#L4

如果这不是您的问题,请提供您遇到的确切错误,并可选择提供完整代码的链接。

于 2019-12-17T17:11:48.047 回答