github.com/Finschia/finschia-sdk@v0.48.1/x/collection/keeper/migrations/v2/keys.go (about) 1 package v2 2 3 import ( 4 sdk "github.com/Finschia/finschia-sdk/types" 5 ) 6 7 var ( 8 contractKeyPrefix = []byte{0x10} 9 nextClassIDKeyPrefix = []byte{0x12} 10 11 balanceKeyPrefix = []byte{0x20} 12 13 SupplyKeyPrefix = []byte{0x40} 14 MintedKeyPrefix = []byte{0x41} 15 BurntKeyPrefix = []byte{0x42} 16 ) 17 18 func ContractKey(contractID string) []byte { 19 key := make([]byte, len(contractKeyPrefix)+len(contractID)) 20 21 copy(key, contractKeyPrefix) 22 copy(key[len(contractKeyPrefix):], contractID) 23 24 return key 25 } 26 27 func BalanceKey(contractID string, address sdk.AccAddress, tokenID string) []byte { 28 prefix := balanceKeyPrefixByAddress(contractID, address) 29 key := make([]byte, len(prefix)+len(tokenID)) 30 31 copy(key, prefix) 32 copy(key[len(prefix):], tokenID) 33 34 return key 35 } 36 37 func balanceKeyPrefixByAddress(contractID string, address sdk.AccAddress) []byte { 38 prefix := balanceKeyPrefixByContractID(contractID) 39 key := make([]byte, len(prefix)+1+len(address)) 40 41 begin := 0 42 copy(key, prefix) 43 44 begin += len(prefix) 45 key[begin] = byte(len(address)) 46 47 begin++ 48 copy(key[begin:], address) 49 50 return key 51 } 52 53 func balanceKeyPrefixByContractID(contractID string) []byte { 54 key := make([]byte, len(balanceKeyPrefix)+1+len(contractID)) 55 56 begin := 0 57 copy(key, balanceKeyPrefix) 58 59 begin += len(balanceKeyPrefix) 60 key[begin] = byte(len(contractID)) 61 62 begin++ 63 copy(key[begin:], contractID) 64 65 return key 66 } 67 68 func splitBalanceKey(key []byte) (contractID string, address sdk.AccAddress, tokenID string) { 69 begin := len(balanceKeyPrefix) + 1 70 end := begin + int(key[begin-1]) 71 contractID = string(key[begin:end]) 72 73 begin = end + 1 74 end = begin + int(key[begin-1]) 75 address = sdk.AccAddress(key[begin:end]) 76 77 begin = end 78 tokenID = string(key[begin:]) 79 80 return 81 } 82 83 func StatisticKey(keyPrefix []byte, contractID string, classID string) []byte { 84 prefix := statisticKeyPrefixByContractID(keyPrefix, contractID) 85 key := make([]byte, len(prefix)+len(classID)) 86 87 copy(key, prefix) 88 copy(key[len(prefix):], classID) 89 90 return key 91 } 92 93 func statisticKeyPrefixByContractID(keyPrefix []byte, contractID string) []byte { 94 key := make([]byte, len(keyPrefix)+1+len(contractID)) 95 96 begin := 0 97 copy(key, keyPrefix) 98 99 begin += len(keyPrefix) 100 key[begin] = byte(len(contractID)) 101 102 begin++ 103 copy(key[begin:], contractID) 104 105 return key 106 } 107 108 func NextClassIDKey(contractID string) []byte { 109 key := make([]byte, len(nextClassIDKeyPrefix)+len(contractID)) 110 111 copy(key, nextClassIDKeyPrefix) 112 copy(key[len(nextClassIDKeyPrefix):], contractID) 113 114 return key 115 }