问题描述
在基材托盘中,build
常用于 decl_storage。
例如
pub ReferendumCount get(fn referendum_count) build(|_| 0 as ReferendumIndex): ReferendumIndex;
build 方法有什么作用,如何使用以及何时使用?
解决方法
decl_storage 宏的配置扩展允许您在链规范中配置模块的创世存储状态,构建扩展允许您在模块本身内执行相同的任务(这使您可以访问模块的私有功能) .与 config 一样,构建扩展接受单个参数,但在这种情况下,该参数始终是必需的,并且必须是一个闭包,它本质上是一个函数。构建闭包将使用单个参数调用,该参数的类型将是托盘的 GenesisConfig 类型(这使您可以轻松访问 GenesisConfig 类型的所有属性)。您可以将构建扩展与配置扩展一起用于单个存储项;在这种情况下,托盘的 GenesisConfig 类型将具有与使用 config 设置的属性相对应的属性,其值将在链规范中设置,但它将是构建闭包返回的值,将用于设置存储项的创世价值。
,build($expr)
的作用是将构建逻辑添加到创世配置构建中。
您可以通过阅读宏文档了解更多信息,我会推荐与您的问题相关的这些要点
- 存储:https://crates.parity.io/frame_support/attr.pallet.html#storage-palletstorage-optional
- Genesis_config:https://crates.parity.io/frame_support/attr.pallet.html#genesis-config-palletgenesis_config-optional
- Genesis_build:https://crates.parity.io/frame_support/attr.pallet.html#genesis-build-palletgenesis_build-optional
您可以在相同的文档中找到示例