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  }