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  }