/
delist_keeper.go
76 lines (66 loc) · 2.03 KB
/
delist_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
package keepers
import (
sdk "github.com/cosmos/cosmos-sdk/types"
dex "github.com/coinexchain/cet-sdk/types"
)
type DelistKeeper struct {
marketKey sdk.StoreKey
}
func NewDelistKeeper(key sdk.StoreKey) *DelistKeeper {
return &DelistKeeper{
marketKey: key,
}
}
func getDelistKey(time int64, symbol string) []byte {
return dex.ConcatKeys(
DelistKey,
int64ToBigEndianBytes(time),
[]byte{0x0},
[]byte(symbol),
)
}
func getDelistKeyRangeByTime(time int64) (start, end []byte) {
start = dex.ConcatKeys(DelistKey, int64ToBigEndianBytes(0), []byte{0x0})
end = dex.ConcatKeys(DelistKey, int64ToBigEndianBytes(time), []byte{0x1})
return
}
func (keeper *DelistKeeper) AddDelistRequest(ctx sdk.Context, time int64, symbol string) {
store := ctx.KVStore(keeper.marketKey)
store.Set(getDelistKey(time, symbol), []byte(symbol))
store.Set(append(DelistRevKey, []byte(symbol)...), int64ToBigEndianBytes(time))
}
func (keeper *DelistKeeper) HasDelistRequest(ctx sdk.Context, symbol string) bool {
store := ctx.KVStore(keeper.marketKey)
return store.Has(append(DelistRevKey, []byte(symbol)...))
}
//include the specific time
func (keeper *DelistKeeper) GetDelistSymbolsBeforeTime(ctx sdk.Context, time int64) []string {
store := ctx.KVStore(keeper.marketKey)
start, end := getDelistKeyRangeByTime(time)
var result []string
iter := store.Iterator(start, end)
defer iter.Close()
for ; iter.Valid(); iter.Next() {
key := iter.Key()
result = append(result, string(key[len(start):]))
}
return result
}
func (keeper *DelistKeeper) RemoveDelistRequestsBeforeTime(ctx sdk.Context, time int64) {
store := ctx.KVStore(keeper.marketKey)
start, end := getDelistKeyRangeByTime(time)
keys := make([][]byte, 0, 100)
symbols := make([][]byte, 0, 100)
iter := store.Iterator(start, end)
defer iter.Close()
for ; iter.Valid(); iter.Next() {
keys = append(keys, iter.Key())
symbols = append(symbols, iter.Value())
}
for _, key := range keys {
store.Delete(key)
}
for _, symbol := range symbols {
store.Delete(append(DelistRevKey, symbol...))
}
}