/
keys.go
67 lines (54 loc) · 1.98 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
package types
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/kv"
)
const GrantPrivilegeSignaturePrefix = "GrantPrivilege:"
type CProcess []byte
var (
ProcessStart CProcess = []byte{0x1}
ProcessEnd CProcess = []byte{0x2}
)
var DisablePKBytes = [33]byte{
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff,
}
var (
AllowanceKey = []byte{0x90}
ValidatorOperatorKey = []byte{0x91}
ConsensusPubKey = []byte{0x92}
ConsensusProcessKey = []byte{0x93}
)
func GetAllowanceKey(valAddr sdk.ValAddress, owner, spender sdk.AccAddress) []byte {
// key is of the form AllowanceKey || valAddrLen (1 byte) || valAddr || ownerAddrLen (1 byte) || ownerAddr || spenderAddrLen (1 byte) || spenderAddr
offset := len(AllowanceKey)
key := make([]byte, offset+3+len(valAddr)+len(owner)+len(spender))
copy(key[0:offset], AllowanceKey)
key[offset] = byte(len(valAddr))
copy(key[offset+1:offset+1+len(valAddr)], valAddr.Bytes())
key[offset+1+len(valAddr)] = byte(len(owner))
copy(key[offset+2+len(valAddr):offset+2+len(valAddr)+len(owner)], owner.Bytes())
key[offset+2+len(valAddr)+len(owner)] = byte(len(spender))
copy(key[offset+3+len(valAddr)+len(owner):], spender.Bytes())
return key
}
func GetValidatorOperatorKey(addr sdk.ValAddress) []byte {
return append(ValidatorOperatorKey, addr...)
}
func GetConsensusPubKey(addr sdk.ValAddress) []byte {
return append(ConsensusPubKey, addr...)
}
func GetConsensusProcessKey(process CProcess, addr sdk.ValAddress) []byte {
return append(ConsensusProcessKey, append(process, addr...)...)
}
func AddressFromConsensusPubKey(key []byte) []byte {
kv.AssertKeyAtLeastLength(key, 2)
return key[1:] // remove prefix bytes
}
func AddressFromConsensusProcessKey(key []byte) []byte {
kv.AssertKeyAtLeastLength(key, 3)
return key[2:] // remove prefix bytes and process bytes
}