参数(Params)
Last updated
Last updated
Note:
Params
模块已被弃用,取而代之的是每个模块拥有自己的参数。
params 包提供了一个全局可用的参数存储。
主要有两种类型:Keeper 和 Subspace。Subspace 是一个用于参数存储的隔离命名空间,其键由预配置的空间名称前缀。Keeper 具有访问所有现有空间的权限。
Subspace 可供需要私有参数存储的独立 keeper 使用,其他 keeper 无法修改该存储。params Keeper 可用于向 x/gov 路由器添加路由,以便在提案通过时修改任何参数。
以下内容解释了如何在主模块和用户模块中使用 params 模块。
在应用程序初始化阶段,可以使用 Keeper.Subspace
为其他模块的 keeper
分配,并将其存储在 Keeper.spaces
中。然后,这些模块可以通过 Keeper.GetSubspace
获得对其特定参数存储的引用。
示例:
Subspace 是参数存储的一个前缀子空间。每个使用参数存储的模块都会获取一个 Subspace,以隔离访问权限。
参数键是人类可读的字母数字字符串。例如,键为 "ExampleParameter" 的参数存储在 []byte("SubspaceName" + "/" + "ExampleParameter") 下,其中 "SubspaceName" 是子空间的名称。
子键是与主参数键一起使用的次级参数键。子键可用于分组或在运行时动态生成参数键。
所有将要使用的参数键都应在编译时注册。KeyTable 本质上是一个 map[string]attribute,其中字符串是参数键。
当前,attribute 包括一个 reflect.Type,用于指示参数类型,以检查提供的键和值是否兼容并已注册,以及一个函数 ValueValidatorFn 用于验证值。
只有主键需要在 KeyTable 上注册。子键继承主键的属性。
模块通常将参数定义为 proto 消息。生成的结构体可以实现 ParamSet 接口,以便与以下方法一起使用:
KeyTable.RegisterParamSet():注册结构体中的所有参数
Subspace.{Get, Set}ParamSet():从结构体中获取或设置参数
实现者应为指针,以便使用 GetParamSet()
。