-
Notifications
You must be signed in to change notification settings - Fork 0
/
stores.go
153 lines (135 loc) · 5.87 KB
/
stores.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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package keeper
import (
"fmt"
"github.com/jinxprotocol/v4-chain/protocol/lib"
"github.com/jinxprotocol/v4-chain/protocol/x/clob/types"
"github.com/cosmos/cosmos-sdk/store/prefix"
sdk "github.com/cosmos/cosmos-sdk/types"
)
// GetLongTermOrderPlacementStore fetches a state store used for creating,
// reading, updating, and deleting a stateful order placement from state.
func (k Keeper) GetLongTermOrderPlacementStore(ctx sdk.Context) prefix.Store {
return prefix.NewStore(
ctx.KVStore(k.storeKey),
[]byte(types.LongTermOrderPlacementKeyPrefix),
)
}
// GetLongTermOrderPlacementMemStore fetches a state store used for creating,
// reading, updating, and deleting a stateful order placement from state.
func (k Keeper) GetLongTermOrderPlacementMemStore(ctx sdk.Context) prefix.Store {
return prefix.NewStore(
ctx.KVStore(k.memKey),
[]byte(types.LongTermOrderPlacementKeyPrefix),
)
}
// GetUntriggeredConditionalOrderPlacementStore fetches a state store used for creating,
// reading, updating, and deleting untriggered conditional order placement from state.
func (k Keeper) GetUntriggeredConditionalOrderPlacementStore(ctx sdk.Context) prefix.Store {
return prefix.NewStore(
ctx.KVStore(k.storeKey),
[]byte(types.UntriggeredConditionalOrderKeyPrefix),
)
}
// GetUntriggeredConditionalOrderPlacementMemStore fetches a state store used for creating,
// reading, updating, and deleting a stateful order placement from state.
func (k Keeper) GetUntriggeredConditionalOrderPlacementMemStore(ctx sdk.Context) prefix.Store {
return prefix.NewStore(
ctx.KVStore(k.memKey),
[]byte(types.UntriggeredConditionalOrderKeyPrefix),
)
}
// GetUncommittedStatefulOrderPlacementTransientStore fetches a state store used for creating,
// reading, updating, and deleting a stateful order placement from transient state.
func (k Keeper) GetUncommittedStatefulOrderPlacementTransientStore(ctx sdk.Context) prefix.Store {
return prefix.NewStore(
ctx.KVStore(k.transientStoreKey),
[]byte(types.UncommittedStatefulOrderPlacementKeyPrefix),
)
}
// GetUncommittedStatefulOrderCancellationTransientStore fetches a state store used for creating,
// reading, updating, and deleting a stateful order cancellation from transient state.
func (k Keeper) GetUncommittedStatefulOrderCancellationTransientStore(ctx sdk.Context) prefix.Store {
return prefix.NewStore(
ctx.KVStore(k.transientStoreKey),
[]byte(types.UncommittedStatefulOrderCancellationKeyPrefix),
)
}
// GetUncommittedStatefulOrderCountTransientStore fetches a state store used for creating,
// reading, updating, and deleting a stateful order count from transient state. This represents
// the number of uncommitted `order placements - order cancellations` during `CheckTx`.
func (k Keeper) GetUncommittedStatefulOrderCountTransientStore(ctx sdk.Context) prefix.Store {
lib.AssertCheckTxMode(ctx)
return prefix.NewStore(
ctx.KVStore(k.transientStoreKey),
[]byte(types.UncommittedStatefulOrderCountPrefix),
)
}
// GetStatefulOrderCountMemStore fetches a state store used for creating,
// reading, updating, and deleting a stateful order count from stores. This represents
// the number of long term and triggered conditional orders.
func (k Keeper) GetStatefulOrderCountMemStore(ctx sdk.Context) prefix.Store {
return prefix.NewStore(
ctx.KVStore(k.memKey),
[]byte(types.StatefulOrderCountPrefix),
)
}
// GetTriggeredConditionalOrderPlacementStore fetches a state store used for creating,
// reading, updating, and deleting a stateful order placement from state.
func (k Keeper) GetTriggeredConditionalOrderPlacementStore(ctx sdk.Context) prefix.Store {
return prefix.NewStore(
ctx.KVStore(k.storeKey),
[]byte(types.TriggeredConditionalOrderKeyPrefix),
)
}
// GetTriggeredConditionalOrderPlacementMemStore fetches a state store used for creating,
// reading, updating, and deleting a stateful order placement from state.
func (k Keeper) GetTriggeredConditionalOrderPlacementMemStore(ctx sdk.Context) prefix.Store {
return prefix.NewStore(
ctx.KVStore(k.memKey),
[]byte(types.TriggeredConditionalOrderKeyPrefix),
)
}
// getStatefulOrdersTimeSliceStore fetches a state store used for creating,
// reading, updating, and deleting a stateful order time slice from state.
func (k Keeper) getStatefulOrdersTimeSliceStore(ctx sdk.Context) prefix.Store {
return prefix.NewStore(
ctx.KVStore(k.storeKey),
[]byte(types.StatefulOrdersTimeSlicePrefix),
)
}
// getTransientStore fetches a transient store used for reading and
// updating the transient store.
func (k Keeper) getTransientStore(ctx sdk.Context) sdk.KVStore {
return ctx.KVStore(k.transientStoreKey)
}
// fetchStateStoresForOrder fetches the state store and memstore for a given orderId. If the orderId is
// for a long term order, the long term order placement store will be returned. If it is conditional, the
// IsConditionalOrderTriggered function will be used to determine which conditional order placement
// state store is returned.
// Currently, this function supports conditional orders and long term orders.
// If the given order id is conditional, it will return the Untriggered conditional order state store.
func (k Keeper) fetchStateStoresForOrder(
ctx sdk.Context,
orderId types.OrderId,
) (store prefix.Store, memstore prefix.Store) {
orderId.MustBeStatefulOrder()
if orderId.IsConditionalOrder() {
triggered := k.IsConditionalOrderTriggered(ctx, orderId)
if triggered {
store = k.GetTriggeredConditionalOrderPlacementStore(ctx)
memstore = k.GetTriggeredConditionalOrderPlacementMemStore(ctx)
return store, memstore
}
store = k.GetUntriggeredConditionalOrderPlacementStore(ctx)
memstore = k.GetUntriggeredConditionalOrderPlacementMemStore(ctx)
return store, memstore
} else if orderId.IsLongTermOrder() {
return k.GetLongTermOrderPlacementStore(ctx), k.GetLongTermOrderPlacementMemStore(ctx)
}
panic(
fmt.Sprintf(
"FetchStateStoresForOrder: orderId (%+v) not supported",
orderId,
),
)
}