Documentation ¶
Overview ¶
Package params provides a namespaced module parameter store.
There are two core components, Keeper and Subspace. Subspace is an isolated namespace for a parameter store, where keys are prefixed by pre-configured subspace names which modules provide. The Keeper has a permission to access all existing subspaces.
Subspace can be used by the individual keepers, which need a private parameter store that the other keepers cannot modify.
Basic Usage:
1. Declare constant module parameter keys and the globally unique Subspace name:
const ( ModuleSubspace = "mymodule" ) const ( KeyParameter1 = "myparameter1" KeyParameter2 = "myparameter2" )
2. Define parameters as proto message and define the validation functions:
message MyParams { int64 my_param1 = 1; bool my_param2 = 2; } func validateMyParam1(i interface{}) error { _, ok := i.(int64) if !ok { return fmt.Errorf("invalid parameter type: %T", i) } // validate (if necessary)... return nil } func validateMyParam2(i interface{}) error { _, ok := i.(bool) if !ok { return fmt.Errorf("invalid parameter type: %T", i) } // validate (if necessary)... return nil }
3. Implement the params.ParamSet interface:
func (p *MyParams) ParamSetPairs() params.ParamSetPairs { return params.ParamSetPairs{ params.NewParamSetPair(KeyParameter1, &p.MyParam1, validateMyParam1), params.NewParamSetPair(KeyParameter2, &p.MyParam2, validateMyParam2), } } func ParamKeyTable() params.KeyTable { return params.NewKeyTable().RegisterParamSet(&MyParams{}) }
4. Have the module accept a Subspace in the constructor and set the KeyTable (if necessary):
func NewKeeper(..., paramSpace params.Subspace, ...) Keeper { // set KeyTable if it has not already been set if !paramSpace.HasKeyTable() { paramSpace = paramSpace.WithKeyTable(ParamKeyTable()) } return Keeper { // ... paramSpace: paramSpace, } }
Now we have access to the module's parameters that are namespaced using the keys defined:
func InitGenesis(ctx sdk.Context, k Keeper, gs GenesisState) { // ... k.SetParams(ctx, gs.Params) } func (k Keeper) SetParams(ctx sdk.Context, params Params) { k.paramSpace.SetParamSet(ctx, ¶ms) } func (k Keeper) GetParams(ctx sdk.Context) (params Params) { k.paramSpace.GetParamSet(ctx, ¶ms) return params } func (k Keeper) MyParam1(ctx sdk.Context) (res int64) { k.paramSpace.Get(ctx, KeyParameter1, &res) return res } func (k Keeper) MyParam2(ctx sdk.Context) (res bool) { k.paramSpace.Get(ctx, KeyParameter2, &res) return res }
NOTE: Any call to SetParamSet will panic or any call to Update will error if any given parameter value is invalid based on the registered value validation function.
Index ¶
- Constants
- func NewParamChangeProposalHandler(k keeper.Keeper) govtypes.Handler
- func ProvideSubspace(in SubspaceInputs) types.Subspace
- type AppModule
- func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions
- func (AppModule) ConsensusVersion() uint64
- func (AppModule) GenerateGenesisState(simState *module.SimulationState)
- func (am AppModule) IsAppModule()
- func (am AppModule) IsOnePerModuleType()
- func (AppModule) Name() string
- func (AppModule) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *gwruntime.ServeMux)
- func (AppModule) RegisterInterfaces(registrar registry.InterfaceRegistrar)
- func (AppModule) RegisterLegacyAminoCodec(registrar registry.AminoRegistrar)
- func (am AppModule) RegisterServices(registrar grpc.ServiceRegistrar) error
- func (AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegistry)
- type ModuleInputs
- type ModuleOutputs
- type SubspaceInputs
Constants ¶
const ConsensusVersion = 1
ConsensusVersion defines the current x/params module consensus version.
Variables ¶
This section is empty.
Functions ¶
func NewParamChangeProposalHandler ¶
NewParamChangeProposalHandler creates a new governance Handler for a ParamChangeProposal
func ProvideSubspace ¶
func ProvideSubspace(in SubspaceInputs) types.Subspace
Types ¶
type AppModule ¶
type AppModule struct {
// contains filtered or unexported fields
}
AppModule implements an application module for the distribution module.
func NewAppModule ¶
NewAppModule creates a new AppModule object
func (AppModule) AutoCLIOptions ¶
func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions
AutoCLIOptions implements the autocli.HasAutoCLIConfig interface.
func (AppModule) ConsensusVersion ¶
ConsensusVersion implements HasConsensusVersion
func (AppModule) GenerateGenesisState ¶
func (AppModule) GenerateGenesisState(simState *module.SimulationState)
GenerateGenesisState performs a no-op.
func (AppModule) IsAppModule ¶
func (am AppModule) IsAppModule()
IsAppModule implements the appmodule.AppModule interface.
func (AppModule) IsOnePerModuleType ¶
func (am AppModule) IsOnePerModuleType()
IsOnePerModuleType implements the depinject.OnePerModuleType interface.
func (AppModule) RegisterGRPCGatewayRoutes ¶
RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the params module.
func (AppModule) RegisterInterfaces ¶
func (AppModule) RegisterInterfaces(registrar registry.InterfaceRegistrar)
RegisterInterfaces registers the module's interface types
func (AppModule) RegisterLegacyAminoCodec ¶
func (AppModule) RegisterLegacyAminoCodec(registrar registry.AminoRegistrar)
RegisterLegacyAminoCodec registers the params module's types on the given LegacyAmino codec.
func (AppModule) RegisterServices ¶
func (am AppModule) RegisterServices(registrar grpc.ServiceRegistrar) error
RegisterServices registers module services.
func (AppModule) RegisterStoreDecoder ¶
func (AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegistry)
RegisterStoreDecoder doesn't register any type.
type ModuleInputs ¶
type ModuleInputs struct { depinject.In KvStoreKey *store.KVStoreKey TransientStoreKey *store.TransientStoreKey Cdc codec.Codec LegacyAmino *codec.LegacyAmino }
type ModuleOutputs ¶
type ModuleOutputs struct { depinject.Out ParamsKeeper keeper.Keeper Module appmodule.AppModule GovHandler govv1beta1.HandlerRoute }
func ProvideModule ¶
func ProvideModule(in ModuleInputs) ModuleOutputs
Directories ¶
Path | Synopsis |
---|---|
Package testutil is a generated GoMock package.
|
Package testutil is a generated GoMock package. |
To prevent namespace collision between consumer modules, we define a type Subspace.
|
To prevent namespace collision between consumer modules, we define a type Subspace. |
proposal
Package proposal is a reverse proxy.
|
Package proposal is a reverse proxy. |