github.com/Finschia/finschia-sdk@v0.48.1/x/token/keeper/keys.go (about) 1 package keeper 2 3 import ( 4 sdk "github.com/Finschia/finschia-sdk/types" 5 "github.com/Finschia/finschia-sdk/x/token" 6 ) 7 8 var ( 9 balanceKeyPrefix = []byte{0x00} 10 classKeyPrefix = []byte{0x01} 11 grantKeyPrefix = []byte{0x02} 12 authorizationKeyPrefix = []byte{0x03} 13 14 // statistics keys 15 supplyKeyPrefix = []byte{0x04} 16 mintKeyPrefix = []byte{0x05} 17 burnKeyPrefix = []byte{0x06} 18 ) 19 20 func classKey(id string) []byte { 21 key := make([]byte, len(classKeyPrefix)+len(id)) 22 copy(key, classKeyPrefix) 23 copy(key[len(classKeyPrefix):], id) 24 return key 25 } 26 27 func balanceKey(contractID string, address sdk.AccAddress) []byte { 28 prefix := balanceKeyPrefixByContractID(contractID) 29 key := make([]byte, len(prefix)+len(address)) 30 31 copy(key, prefix) 32 copy(key[len(prefix):], address) 33 34 return key 35 } 36 37 func balanceKeyPrefixByContractID(contractID string) []byte { 38 key := make([]byte, len(balanceKeyPrefix)+1+len(contractID)) 39 40 begin := 0 41 copy(key, balanceKeyPrefix) 42 43 begin += len(balanceKeyPrefix) 44 key[begin] = byte(len(contractID)) 45 46 begin++ 47 copy(key[begin:], contractID) 48 49 return key 50 } 51 52 func splitBalanceKey(key []byte) (contractID string, address sdk.AccAddress) { 53 begin := len(balanceKeyPrefix) + 1 54 end := begin + int(key[begin-1]) 55 contractID = string(key[begin:end]) 56 57 begin = end 58 address = key[begin:] 59 60 return 61 } 62 63 func statisticsKey(keyPrefix []byte, contractID string) []byte { 64 key := make([]byte, len(keyPrefix)+len(contractID)) 65 copy(key, keyPrefix) 66 copy(key[len(keyPrefix):], contractID) 67 return key 68 } 69 70 // func supplyKey(contractID string) []byte { 71 // return statisticsKey(supplyKeyPrefix, contractID) 72 // } 73 74 // func mintKey(contractID string) []byte { 75 // return statisticsKey(mintKeyPrefix, contractID) 76 // } 77 78 // func burnKey(contractID string) []byte { 79 // return statisticsKey(burnKeyPrefix, contractID) 80 // } 81 82 func splitStatisticsKey(key, keyPrefix []byte) (contractID string) { 83 return string(key[len(keyPrefix):]) 84 } 85 86 // func splitSupplyKey(key []byte) (contractID string) { 87 // return splitStatisticsKey(key, supplyKeyPrefix) 88 // } 89 90 // func splitMintKey(key []byte) (contractID string) { 91 // return splitStatisticsKey(key, mintKeyPrefix) 92 // } 93 94 // func splitBurnKey(key []byte) (contractID string) { 95 // return splitStatisticsKey(key, burnKeyPrefix) 96 // } 97 98 func grantKey(contractID string, grantee sdk.AccAddress, permission token.Permission) []byte { 99 prefix := grantKeyPrefixByGrantee(contractID, grantee) 100 key := make([]byte, len(prefix)+1) 101 102 copy(key, prefix) 103 key[len(prefix)] = byte(permission) 104 105 return key 106 } 107 108 func grantKeyPrefixByGrantee(contractID string, grantee sdk.AccAddress) []byte { 109 prefix := grantKeyPrefixByContractID(contractID) 110 key := make([]byte, len(prefix)+1+len(grantee)) 111 112 begin := 0 113 copy(key, prefix) 114 115 begin += len(prefix) 116 key[begin] = byte(len(grantee)) 117 118 begin++ 119 copy(key[begin:], grantee) 120 121 return key 122 } 123 124 func grantKeyPrefixByContractID(contractID string) []byte { 125 key := make([]byte, len(grantKeyPrefix)+1+len(contractID)) 126 127 begin := 0 128 copy(key, grantKeyPrefix) 129 130 begin += len(grantKeyPrefix) 131 key[begin] = byte(len(contractID)) 132 133 begin++ 134 copy(key[begin:], contractID) 135 136 return key 137 } 138 139 func splitGrantKey(key []byte) (contractID string, grantee sdk.AccAddress, permission token.Permission) { 140 begin := len(grantKeyPrefix) + 1 141 end := begin + int(key[begin-1]) 142 contractID = string(key[begin:end]) 143 144 begin = end + 1 145 end = begin + int(key[begin-1]) 146 grantee = key[begin:end] 147 148 begin = end 149 permission = token.Permission(key[begin]) 150 151 return 152 } 153 154 func authorizationKey(contractID string, operator, holder sdk.AccAddress) []byte { 155 prefix := authorizationKeyPrefixByOperator(contractID, operator) 156 key := make([]byte, len(prefix)+len(holder)) 157 158 copy(key, prefix) 159 copy(key[len(prefix):], holder) 160 161 return key 162 } 163 164 func authorizationKeyPrefixByOperator(contractID string, operator sdk.AccAddress) []byte { 165 prefix := authorizationKeyPrefixByContractID(contractID) 166 key := make([]byte, len(prefix)+1+len(operator)) 167 168 begin := 0 169 copy(key, prefix) 170 171 begin += len(prefix) 172 key[begin] = byte(len(operator)) 173 174 begin++ 175 copy(key[begin:], operator) 176 177 return key 178 } 179 180 func authorizationKeyPrefixByContractID(contractID string) []byte { 181 key := make([]byte, len(authorizationKeyPrefix)+1+len(contractID)) 182 183 begin := 0 184 copy(key, authorizationKeyPrefix) 185 186 begin += len(authorizationKeyPrefix) 187 key[begin] = byte(len(contractID)) 188 189 begin++ 190 copy(key[begin:], contractID) 191 192 return key 193 } 194 195 func splitAuthorizationKey(key []byte) (contractID string, operator, holder sdk.AccAddress) { 196 begin := len(authorizationKeyPrefix) + 1 197 end := begin + int(key[begin-1]) 198 contractID = string(key[begin:end]) 199 200 begin = end + 1 201 end = begin + int(key[begin-1]) 202 operator = key[begin:end] 203 204 begin = end 205 holder = key[begin:] 206 207 return 208 }