params.gno

3.12 Kb ยท 102 lines
  1// Package params provides functions for creating parameter executors that
  2// interface with the Params Keeper.
  3//
  4// This package enables setting various parameter types (such as strings,
  5// integers, booleans, and byte slices) through the GovDAO proposal mechanism.
  6// Each function returns an executor that, when called, sets the specified
  7// parameter in the Params Keeper.
  8//
  9// The executors are designed to be used within governance proposals to modify
 10// parameters dynamically. The integration with the GovDAO allows for parameter
 11// changes to be proposed and executed in a controlled manner, ensuring that
 12// modifications are subject to governance processes.
 13//
 14// Example usage:
 15//
 16//	// This executor can be used in a governance proposal to set the parameter.
 17//	pr := params.NewSysParamStringPropExecutor("bank", "p", "restricted_denoms")
 18package params
 19
 20import (
 21	"std"
 22	prms "sys/params"
 23
 24	"gno.land/r/gov/dao"
 25)
 26
 27// this is only used for emitting events.
 28func syskey(module, submodule, name string) string {
 29	return module + ":" + submodule + ":" + name
 30}
 31
 32func NewSysParamStringPropRequest(module, submodule, name, value string) dao.ProposalRequest {
 33	return newPropRequest(
 34		syskey(module, submodule, name),
 35		func() { prms.SetSysParamString(module, submodule, name, value) },
 36		"",
 37	)
 38}
 39
 40func NewSysParamInt64PropRequest(module, submodule, name string, value int64) dao.ProposalRequest {
 41	return newPropRequest(
 42		syskey(module, submodule, name),
 43		func() { prms.SetSysParamInt64(module, submodule, name, value) },
 44		"",
 45	)
 46}
 47
 48func NewSysParamUint64PropRequest(module, submodule, name string, value uint64) dao.ProposalRequest {
 49	return newPropRequest(
 50		syskey(module, submodule, name),
 51		func() { prms.SetSysParamUint64(module, submodule, name, value) },
 52		"",
 53	)
 54}
 55
 56func NewSysParamBoolPropRequest(module, submodule, name string, value bool) dao.ProposalRequest {
 57	return newPropRequest(
 58		syskey(module, submodule, name),
 59		func() { prms.SetSysParamBool(module, submodule, name, value) },
 60		"",
 61	)
 62}
 63
 64func NewSysParamBytesPropRequest(module, submodule, name string, value []byte) dao.ProposalRequest {
 65	return newPropRequest(
 66		syskey(module, submodule, name),
 67		func() { prms.SetSysParamBytes(module, submodule, name, value) },
 68		"",
 69	)
 70}
 71
 72func NewSysParamStringsPropRequest(module, submodule, name string, value []string) dao.ProposalRequest {
 73	return newPropRequest(
 74		syskey(module, submodule, name),
 75		func() { prms.SetSysParamStrings(module, submodule, name, value) },
 76		"",
 77	)
 78}
 79
 80func NewSysParamStringsPropRequestWithTitle(module, submodule, name, title string, value []string) dao.ProposalRequest {
 81	return newPropRequest(
 82		syskey(module, submodule, name),
 83		func() { prms.SetSysParamStrings(module, submodule, name, value) },
 84		title,
 85	)
 86}
 87
 88func newPropRequest(key string, fn func(), title string) dao.ProposalRequest {
 89	callback := func() error {
 90		fn()
 91		std.Emit("set", "key", key) // TODO document, make const, make consistent. 'k'??
 92		return nil
 93	}
 94
 95	if title == "" {
 96		title = "Set new sys/params key"
 97	}
 98
 99	e := dao.NewSimpleExecutor(callback, "")
100
101	return dao.NewProposalRequest(title, "This proposal wants to add a new key to sys/params: "+key, e)
102}