/
limit_order_tranche_user.go
131 lines (110 loc) · 3.68 KB
/
limit_order_tranche_user.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
package keeper
import (
"cosmossdk.io/math"
"github.com/cosmos/cosmos-sdk/store/prefix"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/neutron-org/neutron/v2/x/dex/types"
)
func (k Keeper) GetOrInitLimitOrderTrancheUser(
ctx sdk.Context,
tradePairID *types.TradePairID,
tickIndex int64,
trancheKey string,
orderType types.LimitOrderType,
receiver string,
) *types.LimitOrderTrancheUser {
userShareData, found := k.GetLimitOrderTrancheUser(ctx, receiver, trancheKey)
if !found {
return &types.LimitOrderTrancheUser{
TrancheKey: trancheKey,
Address: receiver,
SharesOwned: math.ZeroInt(),
SharesWithdrawn: math.ZeroInt(),
SharesCancelled: math.ZeroInt(),
TickIndexTakerToMaker: tickIndex,
TradePairId: tradePairID,
OrderType: orderType,
}
}
return userShareData
}
// SetLimitOrderTrancheUser set a specific LimitOrderTrancheUser in the store from its index
func (k Keeper) SetLimitOrderTrancheUser(ctx sdk.Context, limitOrderTrancheUser *types.LimitOrderTrancheUser) {
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LimitOrderTrancheUserKeyPrefix))
b := k.cdc.MustMarshal(limitOrderTrancheUser)
store.Set(types.LimitOrderTrancheUserKey(
limitOrderTrancheUser.Address,
limitOrderTrancheUser.TrancheKey,
), b)
}
// GetLimitOrderTrancheUser returns a LimitOrderTrancheUser from its index
func (k Keeper) GetLimitOrderTrancheUser(
ctx sdk.Context,
address string,
trancheKey string,
) (val *types.LimitOrderTrancheUser, found bool) {
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LimitOrderTrancheUserKeyPrefix))
b := store.Get(types.LimitOrderTrancheUserKey(
address,
trancheKey,
))
if b == nil {
return nil, false
}
val = &types.LimitOrderTrancheUser{}
k.cdc.MustUnmarshal(b, val)
return val, true
}
// RemoveLimitOrderTrancheUserByKey removes a LimitOrderTrancheUser from the store
func (k Keeper) RemoveLimitOrderTrancheUserByKey(
ctx sdk.Context,
trancheKey string,
address string,
) {
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LimitOrderTrancheUserKeyPrefix))
store.Delete(types.LimitOrderTrancheUserKey(
address,
trancheKey,
))
}
func (k Keeper) RemoveLimitOrderTrancheUser(ctx sdk.Context, trancheUser *types.LimitOrderTrancheUser) {
k.RemoveLimitOrderTrancheUserByKey(
ctx,
trancheUser.TrancheKey,
trancheUser.Address,
)
}
func (k Keeper) SaveTrancheUser(ctx sdk.Context, trancheUser *types.LimitOrderTrancheUser) {
if trancheUser.IsEmpty() {
k.RemoveLimitOrderTrancheUser(ctx, trancheUser)
} else {
k.SetLimitOrderTrancheUser(ctx, trancheUser)
}
}
// GetAllLimitOrderTrancheUser returns all LimitOrderTrancheUser
func (k Keeper) GetAllLimitOrderTrancheUser(ctx sdk.Context) (list []*types.LimitOrderTrancheUser) {
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LimitOrderTrancheUserKeyPrefix))
iterator := sdk.KVStorePrefixIterator(store, []byte{})
defer iterator.Close()
for ; iterator.Valid(); iterator.Next() {
val := &types.LimitOrderTrancheUser{}
k.cdc.MustUnmarshal(iterator.Value(), val)
list = append(list, val)
}
return
}
func (k Keeper) GetAllLimitOrderTrancheUserForAddress(
ctx sdk.Context,
address sdk.AccAddress,
) (list []*types.LimitOrderTrancheUser) {
addressPrefix := types.LimitOrderTrancheUserAddressPrefix(address.String())
store := prefix.NewStore(ctx.KVStore(k.storeKey), addressPrefix)
iterator := sdk.KVStorePrefixIterator(store, []byte{})
defer iterator.Close()
for ; iterator.Valid(); iterator.Next() {
val := &types.LimitOrderTrancheUser{}
k.cdc.MustUnmarshal(iterator.Value(), val)
list = append(list, val)
}
return
}