/
keys.go
129 lines (92 loc) · 3.61 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
package types
import (
time "time"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/address"
"github.com/celinium-network/restaking_protocol/utils"
)
const (
// ModuleName is the name of the multistaking module
ModuleName = "multistaking"
// StoreKey is the string store representation
StoreKey = ModuleName
// RouterKey is the msg router key for the multistaking module
RouterKey = ModuleName
QuerierRoute = ModuleName
)
var (
// Key for the denom white list which allow used for multistaking
DenomWhiteListKey = []byte{0x11}
// Prefix for key which used in `{validator_address + denom } => MTStakingAgent's ID`
MTStakingAgentAddressPrefix = []byte{0x21}
// Prefix for Key which used in `agent_address => MTStakingAgent`
AgentPrefix = []byte{0x22}
// Prefix for key which used in `{agent_address + delegator_address} => MTStakingUnbonding`
UnbondingPrefix = []byte{0x31}
UnbondingQueueKey = []byte{0x32}
// Prefix for key which used in `{agent_address + delegator_address} => shares_amount`
DelegationPrefix = []byte{0x41}
// Prefix for key used in store total minted
MintedKey = []byte{0x51}
// Prefix for key used in store EquivalentMultiplierRecord
TokenMultiplierPrefix = []byte{0x61}
// Prefix for key used in store blockHeight of delegator withdraw reward
WithdrawRewardPrefix = []byte{0x71}
)
func GetMTStakingAgentAddressKey(denom string, valAddr sdk.ValAddress) []byte {
denomBz := utils.BytesLengthPrefix([]byte(denom))
prefixLen := len(MTStakingAgentAddressPrefix)
denomBzLen := len(denomBz)
valAddrBzLen := len(valAddr)
bz := make([]byte, prefixLen+denomBzLen+valAddrBzLen)
copy(bz[:prefixLen], MTStakingAgentAddressPrefix)
copy(bz[prefixLen:prefixLen+valAddrBzLen], valAddr)
copy(bz[prefixLen+valAddrBzLen:], denomBz)
return bz
}
func GetMTStakingAgentKey(agentAddr sdk.AccAddress) []byte {
return append(AgentPrefix, agentAddr...)
}
func GetMTStakingDelegationKey(agentAddr, delegator sdk.AccAddress) []byte {
agentAddBz := address.MustLengthPrefix([]byte(agentAddr))
delegatorBz := address.MustLengthPrefix(delegator)
prefixLen := len(DelegationPrefix)
bz := make([]byte, prefixLen+len(agentAddBz)+len(delegatorBz))
copy(bz[:prefixLen], DelegationPrefix)
copy(bz[prefixLen:prefixLen+len(agentAddBz)], agentAddBz)
copy(bz[prefixLen+len(agentAddBz):], delegatorBz)
return bz
}
func GetMTStakingUnbondingKey(agentAddr, delegator sdk.AccAddress) []byte {
agentAddBz := address.MustLengthPrefix(agentAddr)
delegatorBz := address.MustLengthPrefix(delegator)
prefixLen := len(UnbondingPrefix)
bz := make([]byte, prefixLen+len(agentAddBz)+len(delegatorBz))
copy(bz[:prefixLen], UnbondingPrefix)
copy(bz[prefixLen:prefixLen+len(agentAddBz)], agentAddBz)
copy(bz[prefixLen+len(agentAddBz):], delegatorBz)
return bz
}
func GetMTStakingUnbondingByAgentIndexKey(agentAddr sdk.AccAddress) []byte {
agentAddBz := address.MustLengthPrefix(agentAddr)
prefixLen := len(UnbondingPrefix)
bz := make([]byte, prefixLen+len(agentAddBz))
copy(bz[:prefixLen], UnbondingPrefix)
copy(bz[prefixLen:prefixLen+len(agentAddBz)], agentAddBz)
return bz
}
func GetMTStakingUnbondingDelegationTimeKey(timestamp time.Time) []byte {
bz := sdk.FormatTimeBytes(timestamp)
return append(UnbondingQueueKey, bz...)
}
func GetMTStakingMintedKey() []byte {
return MintedKey
}
func GetMTTokenMultiplierKey(denom string) []byte {
return append(TokenMultiplierPrefix, denom...)
}
func GetMTWithdrawRewardHeightKey(delegator, agent sdk.AccAddress) []byte {
dbz := address.MustLengthPrefix(delegator)
abz := address.MustLengthPrefix(agent)
return append(WithdrawRewardPrefix, append(dbz, abz...)...)
}