首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >宏#[pallet::genesis_config]和#[pallet::genesis_build]在sudo托盘上做什么?

宏#[pallet::genesis_config]和#[pallet::genesis_build]在sudo托盘上做什么?
EN

Stack Overflow用户
提问于 2021-12-12 15:19:21
回答 2查看 259关注 0票数 2
代码语言:javascript
复制
#[pallet::genesis_config]
    pub struct GenesisConfig<T: Config> {
        /// The `AccountId` of the sudo key.
        pub key: T::AccountId,
    }

    #[cfg(feature = "std")]
    impl<T: Config> Default for GenesisConfig<T> {
        fn default() -> Self {
            Self { key: Default::default() }
        }
    }

    #[pallet::genesis_build]
    impl<T: Config> GenesisBuild<T> for GenesisConfig<T> {
        fn build(&self) {
            <Key<T>>::put(&self.key);
        }
    }

genesis_configgenesis_build宏在这里发生了什么?有些阅读似乎暗示要实现属性GenesisBuild,但当文档读取时,我感到困惑:"TI是托盘特性和托盘实例的占位符。“

什么是托盘实例?我还假设托盘特性意味着sudo托盘的Config特性。是否与为can块配置唯一的StorageValue有关,以便运行节点的每个实例都可以验证相同的帐户是否为根?有人能帮我把它拆开吗。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-13 20:10:54

#[pallet::genesis_build]实现了特性sp_runtime::BuildModuleGenesisStorage,它将初始状态在创建时放入托盘的存储中。

(托盘也可以在此时将状态放入子存储中。)

带有#[pallet::genesis_config]的pub enum/struct保存genesis_build为设置存储而读取的字段。例如,可能有投资者在创世纪需要建立一个归属时间表(参见归属托盘:https://github.com/paritytech/substrate/blob/3cdb30e1ecbafe8a866317d4550c921b4d686869/frame/vesting/src/lib.rs#L231 )。因此,对于sudo托盘,genesis_config结构保存在这里设置的根键:

代码语言:javascript
复制
GenesisConfig {
        sudo: SudoConfig {
            // Assign network admin rights.
            key: root_key,
        },
        ...
}

( spec.rs#L150 )

genesis_config的文档在这里:配置-可选

票数 2
EN

Stack Overflow用户

发布于 2021-12-13 20:40:48

什么是托盘实例?

托盘可以实例化。这意味着在运行时可以多次使用托盘。每个实例将使用相同的代码(通过配置特性来模块化不同的配置),但是每个实例的存储将不同。

请参阅:https://docs.substrate.io/how-to-guides/v3/basics/instantiable-pallets/

我还假设托盘特性意味着sudo托盘的Config特性。是否与为can块配置唯一的StorageValue有关,以便运行节点的每个实例都可以验证相同的帐户是否为根?有人能帮我把它拆开吗。

是的,托盘特征指的是Config特性。

GenesisBuild采用两个泛型参数的要点是支持所有类型的托盘。每个托盘都是通过特征配置的,因此GenesisBuild特性需要采用Config泛型参数T。有些托盘可以实例化,因此也需要采用I

这一切归结为一些锈蚀“怪癖”,以支持使用默认实例和自定义实例的可实例化托盘,以及支持根本不使用任何实例的托盘。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70324883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档