-
Notifications
You must be signed in to change notification settings - Fork 28
/
keys.go
146 lines (120 loc) · 3.55 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
package types
import (
"bytes"
"errors"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
gogotypes "github.com/cosmos/gogoproto/types"
)
const (
ModuleName = "onft"
StoreKey = ModuleName
RouterKey = ModuleName
)
var (
PrefixONFT = []byte{0x01}
PrefixOwners = []byte{0x02}
PrefixCollection = []byte{0x03}
PrefixDenom = []byte{0x04}
PrefixDenomSymbol = []byte{0x05}
PrefixCreator = []byte{0x06}
ParamsKey = []byte{0x07}
delimiter = []byte("/")
)
func SplitKeyOwner(key []byte) (address sdk.AccAddress, denom, id string, err error) {
key = key[len(PrefixOwners)+len(delimiter):]
keys := bytes.Split(key, delimiter)
if len(keys) != 3 {
return address, denom, id, errors.New("wrong KeyOwner")
}
address, _ = sdk.AccAddressFromBech32(string(keys[0]))
denom = string(keys[1])
id = string(keys[2])
return
}
func SplitKeyDenom(key []byte) (denomID, nftID string, err error) {
keys := bytes.Split(key, delimiter)
if len(keys) != 2 {
return denomID, nftID, errors.New("wrong KeyOwner")
}
denomID = string(keys[0])
nftID = string(keys[1])
return
}
func KeyOwner(address sdk.AccAddress, denomID, onftID string) []byte {
key := append(PrefixOwners, delimiter...)
if address != nil {
key = append(key, []byte(address.String())...)
key = append(key, delimiter...)
}
if address != nil && len(denomID) > 0 {
key = append(key, []byte(denomID)...)
key = append(key, delimiter...)
}
if address != nil && len(denomID) > 0 && len(onftID) > 0 {
key = append(key, []byte(onftID)...)
}
return key
}
func KeyONFT(denomID, onftID string) []byte {
key := append(PrefixONFT, delimiter...)
if len(denomID) > 0 {
key = append(key, []byte(denomID)...)
key = append(key, delimiter...)
}
if len(denomID) > 0 && len(onftID) > 0 {
key = append(key, []byte(onftID)...)
}
return key
}
func KeyCollection(denomID string) []byte {
key := append(PrefixCollection, delimiter...)
return append(key, []byte(denomID)...)
}
func KeyDenomID(id string) []byte {
key := append(PrefixDenom, delimiter...)
return append(key, []byte(id)...)
}
func KeyDenomCreator(address sdk.AccAddress, denomId string) []byte {
key := append(PrefixCreator, delimiter...)
if address != nil {
key = append(key, []byte(address)...)
key = append(key, delimiter...)
}
if address != nil && len(denomId) > 0 {
key = append(key, []byte(denomId)...)
key = append(key, delimiter...)
}
return key
}
func KeyDenomSymbol(symbol string) []byte {
key := append(PrefixDenomSymbol, delimiter...)
return append(key, []byte(symbol)...)
}
func MustMarshalSupply(cdc codec.BinaryCodec, supply uint64) []byte {
supplyWrap := gogotypes.UInt64Value{Value: supply}
return cdc.MustMarshal(&supplyWrap)
}
func MustUnMarshalSupply(cdc codec.BinaryCodec, value []byte) uint64 {
var supplyWrap gogotypes.UInt64Value
cdc.MustUnmarshal(value, &supplyWrap)
return supplyWrap.Value
}
func MustMarshalONFTID(cdc codec.BinaryCodec, onftID string) []byte {
onftIDWrap := gogotypes.StringValue{Value: onftID}
return cdc.MustMarshal(&onftIDWrap)
}
func MustUnMarshalONFTID(cdc codec.BinaryCodec, value []byte) string {
var onftIDWrap gogotypes.StringValue
cdc.MustUnmarshal(value, &onftIDWrap)
return onftIDWrap.Value
}
func MustMarshalDenomID(cdc codec.BinaryCodec, denomID string) []byte {
denomIDWrap := gogotypes.StringValue{Value: denomID}
return cdc.MustMarshal(&denomIDWrap)
}
func MustUnMarshalDenomID(cdc codec.BinaryCodec, value []byte) string {
var denomIDWrap gogotypes.StringValue
cdc.MustUnmarshal(value, &denomIDWrap)
return denomIDWrap.Value
}