/
keys.go
201 lines (160 loc) · 5.64 KB
/
keys.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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
package types
import (
"encoding/binary"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/address"
)
const (
// ModuleName defines the module name
ModuleName = "dex"
// StoreKey defines the primary module store key
StoreKey = ModuleName
// RouterKey is the message route for slashing
RouterKey = ModuleName
// QuerierRoute defines the module's query routing key
QuerierRoute = ModuleName
// MemStoreKey defines the in-memory store key
MemStoreKey = "mem_dex"
// We don't want pair ABC<>DEF to have the same key as AB<>CDEF
PairSeparator = "|"
)
func KeyPrefix(p string) []byte {
return []byte(p)
}
func AddressKeyPrefix(contractAddr string) []byte {
addr, _ := sdk.AccAddressFromBech32(contractAddr)
return address.MustLengthPrefix(addr)
}
func ContractKeyPrefix(p string, contractAddr string) []byte {
return append([]byte(p), AddressKeyPrefix(contractAddr)...)
}
func PairPrefix(priceDenom string, assetDenom string) []byte {
return append([]byte(priceDenom), append([]byte(PairSeparator), []byte(assetDenom)...)...)
}
func OrderBookPrefix(long bool, contractAddr string, priceDenom string, assetDenom string) []byte {
return append(
OrderBookContractPrefix(long, contractAddr),
PairPrefix(priceDenom, assetDenom)...,
)
}
func OrderBookContractPrefix(long bool, contractAddr string) []byte {
var prefix []byte
if long {
prefix = KeyPrefix(LongBookKey)
} else {
prefix = KeyPrefix(ShortBookKey)
}
return append(prefix, AddressKeyPrefix(contractAddr)...)
}
func TriggerOrderBookPrefix(contractAddr string, priceDenom string, assetDenom string) []byte {
prefix := KeyPrefix(TriggerBookKey)
return append(
append(prefix, AddressKeyPrefix(contractAddr)...),
PairPrefix(priceDenom, assetDenom)...,
)
}
// `Price` constant + contract + price denom + asset denom
func PricePrefix(contractAddr string, priceDenom string, assetDenom string) []byte {
return append(
PriceContractPrefix(contractAddr),
PairPrefix(priceDenom, assetDenom)...,
)
}
func PriceContractPrefix(contractAddr string) []byte {
return append(KeyPrefix(PriceKey), AddressKeyPrefix(contractAddr)...)
}
func SettlementEntryPrefix(contractAddr string, priceDenom string, assetDenom string) []byte {
return append(
append(KeyPrefix(SettlementEntryKey), AddressKeyPrefix(contractAddr)...),
PairPrefix(priceDenom, assetDenom)...,
)
}
func RegisteredPairPrefix(contractAddr string) []byte {
return append(KeyPrefix(RegisteredPairKey), AddressKeyPrefix(contractAddr)...)
}
func OrderPrefix(contractAddr string) []byte {
return append(KeyPrefix(OrderKey), AddressKeyPrefix(contractAddr)...)
}
func AssetListPrefix(assetDenom string) []byte {
return append(KeyPrefix(AssetListKey), KeyPrefix(assetDenom)...)
}
func NextOrderIDPrefix(contractAddr string) []byte {
return append(KeyPrefix(NextOrderIDKey), AddressKeyPrefix(contractAddr)...)
}
func NextSettlementIDPrefix(contractAddr string, priceDenom string, assetDenom string) []byte {
return append(
append(KeyPrefix(NextSettlementIDKey), AddressKeyPrefix(contractAddr)...),
PairPrefix(priceDenom, assetDenom)...,
)
}
func MatchResultPrefix(contractAddr string) []byte {
return append(KeyPrefix(MatchResultKey), AddressKeyPrefix(contractAddr)...)
}
func GetSettlementOrderIDPrefix(orderID uint64, account string) []byte {
accountBytes := append([]byte(account), []byte("|")...)
orderIDBytes := make([]byte, 8)
binary.BigEndian.PutUint64(orderIDBytes, orderID)
return append(accountBytes, orderIDBytes...)
}
func GetSettlementKey(orderID uint64, account string, settlementID uint64) []byte {
settlementIDBytes := make([]byte, 8)
binary.BigEndian.PutUint64(settlementIDBytes, settlementID)
return append(GetSettlementOrderIDPrefix(orderID, account), settlementIDBytes...)
}
func MemOrderPrefixForPair(contractAddr string, pairString string) []byte {
return append(
append(KeyPrefix(MemOrderKey), AddressKeyPrefix(contractAddr)...),
[]byte(pairString)...,
)
}
func MemCancelPrefixForPair(contractAddr string, pairString string) []byte {
return append(
append(KeyPrefix(MemCancelKey), AddressKeyPrefix(contractAddr)...),
[]byte(pairString)...,
)
}
func MemOrderPrefix(contractAddr string) []byte {
return append(KeyPrefix(MemOrderKey), AddressKeyPrefix(contractAddr)...)
}
func MemCancelPrefix(contractAddr string) []byte {
return append(KeyPrefix(MemCancelKey), AddressKeyPrefix(contractAddr)...)
}
func MemDepositPrefix(contractAddr string) []byte {
return append(KeyPrefix(MemDepositKey), AddressKeyPrefix(contractAddr)...)
}
func MemDepositSubprefix(creator, denom string) []byte {
return append([]byte(creator), []byte(denom)...)
}
func ContractKey(contractAddr string) []byte {
return AddressKeyPrefix(contractAddr)
}
func OrderCountPrefix(contractAddr string, priceDenom string, assetDenom string, long bool) []byte {
var prefix []byte
if long {
prefix = KeyPrefix(LongOrderCountKey)
} else {
prefix = KeyPrefix(ShortOrderCountKey)
}
return append(prefix, append(AddressKeyPrefix(contractAddr), PairPrefix(priceDenom, assetDenom)...)...)
}
const (
LongBookKey = "LongBook-value-"
ShortBookKey = "ShortBook-value-"
TriggerBookKey = "TriggerBook-value-"
OrderKey = "order"
AccountActiveOrdersKey = "account-active-orders"
CancelKey = "cancel"
TwapKey = "TWAP-"
PriceKey = "Price-"
SettlementEntryKey = "SettlementEntry-"
NextSettlementIDKey = "NextSettlementID-"
NextOrderIDKey = "noid"
RegisteredPairKey = "rp"
AssetListKey = "AssetList-"
MatchResultKey = "MatchResult-"
LongOrderCountKey = "loc-"
ShortOrderCountKey = "soc-"
MemOrderKey = "MemOrder-"
MemDepositKey = "MemDeposit-"
MemCancelKey = "MemCancel-"
)