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}