-
Notifications
You must be signed in to change notification settings - Fork 0
/
keeper.go
108 lines (87 loc) · 2.26 KB
/
keeper.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package keeper
import (
"encoding/json"
"time"
"cosmossdk.io/core/store"
"cosmossdk.io/orm/model/ormdb"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
"google.golang.org/protobuf/types/known/timestamppb"
"github.com/chora-io/mods/voucher"
voucherv1 "github.com/chora-io/mods/voucher/api/v1"
v1 "github.com/chora-io/mods/voucher/types/v1"
)
var (
_ v1.MsgServer = &Keeper{}
_ v1.QueryServer = &Keeper{}
)
// Keeper is the keeper.
type Keeper struct {
db ormdb.ModuleDB // module database
ss voucherv1.StateStore // module state store
}
// NewKeeper creates a new keeper.
func NewKeeper(storeService store.KVStoreService) Keeper {
k := Keeper{}
var err error
k.db, err = ormdb.NewModuleDB(&voucher.ModuleSchema, ormdb.ModuleDBOptions{
KVStoreService: storeService,
})
if err != nil {
panic(err)
}
k.ss, err = voucherv1.NewStateStore(k.db)
if err != nil {
panic(err)
}
return k
}
// InitGenesis initializes genesis state.
func (k Keeper) InitGenesis(ctx sdk.Context, _ codec.JSONCodec, data json.RawMessage) error {
//source, err := ormjson.NewRawMessageSource(data)
//if err != nil {
// return err
//}
//
//err = s.db.ImportJSON(sdk.WrapSDKContext(ctx), source)
//if err != nil {
// return err
//}
return nil
}
// ExportGenesis exports genesis state.
func (k Keeper) ExportGenesis(ctx sdk.Context, _ codec.JSONCodec) (json.RawMessage, error) {
//target := ormjson.NewRawMessageTarget()
//
//err := s.db.ExportJSON(sdk.WrapSDKContext(ctx), target)
//if err != nil {
// return nil, err
//}
//
//return target.JSON()
return nil, nil
}
// PruneVouchers removes expired vouchers from state.
func (k Keeper) PruneVouchers(ctx sdk.Context) error {
sdkCtx := sdk.UnwrapSDKContext(ctx)
minTime := timestamppb.New(time.Time{})
blockTime := timestamppb.New(sdkCtx.BlockTime())
fromKey := voucherv1.BalanceExpirationIndexKey{}.WithExpiration(minTime)
toKey := voucherv1.BalanceExpirationIndexKey{}.WithExpiration(blockTime)
it, err := k.ss.BalanceTable().ListRange(ctx, fromKey, toKey)
if err != nil {
return err
}
for it.Next() {
balance, err := it.Value()
if err != nil {
return err
}
err = k.ss.BalanceTable().Delete(ctx, balance)
if err != nil {
return err
}
}
it.Close()
return nil
}