/
params.go
70 lines (55 loc) · 1.98 KB
/
params.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package keeper
import (
"fmt"
"github.com/cosmos/cosmos-sdk/store/prefix"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/bnb-chain/greenfield/x/payment/types"
)
// GetParams get all parameters as types.Params
func (k Keeper) GetParams(ctx sdk.Context) (p types.Params) {
store := ctx.KVStore(k.storeKey)
bz := store.Get(types.ParamsKey)
if bz == nil {
return p
}
k.cdc.MustUnmarshal(bz, &p)
return p
}
// SetParams set the params
func (k Keeper) SetParams(ctx sdk.Context, params types.Params) error {
if err := params.Validate(); err != nil {
return err
}
store := ctx.KVStore(k.storeKey)
bz := k.cdc.MustMarshal(¶ms)
store.Set(types.ParamsKey, bz)
// store versioned params
err := k.SetVersionedParamsWithTs(ctx, params.VersionedParams)
if err != nil {
return err
}
return nil
}
func (k Keeper) SetVersionedParamsWithTs(ctx sdk.Context, verParams types.VersionedParams) error {
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.VersionedParamsKeyPrefix)
key := types.VersionedParamsKey(ctx.BlockTime().Unix())
b := k.cdc.MustMarshal(&verParams)
store.Set(key, b)
return nil
}
// GetVersionedParamsWithTs find the latest params before and equal than the specific timestamp
func (k Keeper) GetVersionedParamsWithTs(ctx sdk.Context, ts int64) (verParams types.VersionedParams, err error) {
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.VersionedParamsKeyPrefix)
// params are updated in the endblock, so we do not need to make the ts to be included
// for example, if the params is updated in 100 timestamp: the txs that are executed in 100 timestamp
// will use the old parameter, after 100 timestamp, when we passing 100 to query, we should still get
// the old parameter.
startKey := types.VersionedParamsKey(ts)
iterator := store.ReverseIterator(nil, startKey)
defer iterator.Close()
if !iterator.Valid() {
return verParams, fmt.Errorf("no versioned params found")
}
k.cdc.MustUnmarshal(iterator.Value(), &verParams)
return verParams, nil
}